// 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