using System; using System.Collections.Generic; using System.Linq; using UnityEditor; namespace Unity.VisualScripting { public static class DefineUtility { private static IEnumerable buildTargetGroups { get { return Enum.GetValues(typeof(BuildTargetGroup)).Cast().Where (group => group != BuildTargetGroup.Unknown && !typeof(BuildTargetGroup).GetField(group.ToString()).HasAttribute() ); } } public static bool ToggleDefine(string define, bool enable) { if (enable) { return AddDefine(define); } else { return RemoveDefine(define); } } private static string GetScriptingDefineSymbolsForGroup(BuildTargetGroup targetGroup) { #if UNITY_2023_1_OR_NEWER var namedBuildTarget = UnityEditor.Build.NamedBuildTarget.FromBuildTargetGroup(targetGroup); return PlayerSettings.GetScriptingDefineSymbols(namedBuildTarget); #else return PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup); #endif } private static void SetScriptingDefineSymbolsForGroup(BuildTargetGroup targetGroup, string defines) { #if UNITY_2023_1_OR_NEWER var namedBuildTarget = UnityEditor.Build.NamedBuildTarget.FromBuildTargetGroup(targetGroup); PlayerSettings.SetScriptingDefineSymbols(namedBuildTarget, defines); #else PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, defines); #endif } public static bool AddDefine(string define) { var added = false; foreach (var group in buildTargetGroups) { var defines = GetScriptingDefineSymbolsForGroup(group).Split(';').Select(d => d.Trim()).ToList(); if (!defines.Contains(define)) { defines.Add(define); SetScriptingDefineSymbolsForGroup(group, string.Join(";", defines.ToArray())); added = true; } } return added; } public static bool RemoveDefine(string define) { var removed = false; foreach (var group in buildTargetGroups) { var defines = GetScriptingDefineSymbolsForGroup(group).Split(';').Select(d => d.Trim()).ToList(); if (defines.Contains(define)) { defines.Remove(define); SetScriptingDefineSymbolsForGroup(group, string.Join(";", defines.ToArray())); removed = true; } } return removed; } #if VISUAL_SCRIPT_INTERNAL [MenuItem("Tools/Bolt/Internal/Delete All Script Defines", priority = LudiqProduct.DeveloperToolsMenuPriority + 404)] #endif public static void ClearAllDefines() { foreach (var group in buildTargetGroups) { SetScriptingDefineSymbolsForGroup(group, string.Empty); } } } }