// Animancer // https://kybernetik.com.au/animancer // Copyright 2022 Kybernetik // #if UNITY_EDITOR using System; using System.Collections.Generic; using UnityEditor; using UnityEditor.Build; namespace Animancer.Editor { /// [Editor-Only] /// Various utility functions for accessing scripting define symbols. /// /// https://kybernetik.com.au/animancer/api/Animancer.Editor/ScriptingDefineSymbols /// public static class ScriptingDefineSymbols { /************************************************************************************************************************/ /// The platform currently selected in the Player Settings. #if UNITY_2021_2_OR_NEWER private static NamedBuildTarget CurrentBuildTarget { get { var buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; return NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup); } } #else private static BuildTargetGroup CurrentBuildTarget => EditorUserBuildSettings.selectedBuildTargetGroup; #endif /************************************************************************************************************************/ /// The symbols defined in the . public static string[] Symbols { get { var currentBuildTarget = CurrentBuildTarget; #if UNITY_2021_2_OR_NEWER PlayerSettings.GetScriptingDefineSymbols(currentBuildTarget, out var symbols); return symbols; #else var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentBuildTarget); return symbols.Split(';'); #endif } set { var currentBuildTarget = CurrentBuildTarget; #if UNITY_2021_2_OR_NEWER PlayerSettings.SetScriptingDefineSymbols(currentBuildTarget, value); #else var joined = string.Join(";", value); PlayerSettings.SetScriptingDefineSymbolsForGroup(currentBuildTarget, joined); #endif } } /************************************************************************************************************************/ /// Is the `symbol` defined in the . public static bool IsSymbolDefined(string symbol) { return Array.IndexOf(Symbols, symbol) >= 0; } /************************************************************************************************************************/ /// Defines or undefines the `symbol` in the . public static void SetSymbolDefined(string symbol, bool isDefined) { var symbols = Symbols; var index = Array.IndexOf(symbols, symbol); if (isDefined) { if (index >= 0) return; var newSymbols = new List(); newSymbols.AddRange(symbols); newSymbols.Add(symbol); symbols = newSymbols.ToArray(); } else { if (index < 0) return; var newSymbols = new List(symbols); newSymbols.RemoveAt(index); symbols = newSymbols.ToArray(); } Symbols = symbols; } /************************************************************************************************************************/ } } #endif