using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using UnityEditor; using UnityEngine; namespace SRDebugger.Editor { public partial class SRDebugEditor { /// /// Sets compiler define to be enabled/disabled on all build targets. /// static void SetCompileDefine(string define, bool enabled) { foreach (BuildTargetGroup targetGroup in GetAllBuildTargetGroups()) { // Use hash set to remove duplicates. List defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup).Split(';').ToList(); bool alreadyExists = false; for (var i = 0; i < defines.Count; i++) { if (string.Equals(define, defines[i], StringComparison.InvariantCultureIgnoreCase)) { alreadyExists = true; if (!enabled) { defines.RemoveAt(i); } } } if (!alreadyExists && enabled) { defines.Add(define); } PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, string.Join(";", defines.ToArray())); } } static void ForceRecompile() { AssetDatabase.ImportAsset(SRInternalEditorUtil.GetAssetPath("StompyRobot.SRDebugger.asmdef"), ImportAssetOptions.ForceUpdate); } static IEnumerable GetAllBuildTargetGroups() { Type enumType = typeof(BuildTargetGroup); string[] names = Enum.GetNames(enumType); Array values = Enum.GetValues(enumType); for (var i = 0; i < names.Length; i++) { string name = names[i]; BuildTargetGroup value = (BuildTargetGroup)values.GetValue(i); if (value == BuildTargetGroup.Unknown) continue; MemberInfo[] member = enumType.GetMember(name); MemberInfo entry = member.FirstOrDefault(p => p.DeclaringType == enumType); if (entry == null) { Debug.LogErrorFormat( "[SRDebugger] Unhandled build target: {0}. SRDebugger disabled state may not be applied correctly to this platform.", name); continue; } if (entry.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length != 0) { // obsolete, ignore. continue; } yield return value; } } } }