#if UNITY_EDITOR
namespace UIWidgets
{
using System;
using System.Collections.Generic;
using UnityEditor;
///
/// Scripting Define Symbols.
///
public static class ScriptingDefineSymbols
{
static List GetTargets()
{
var targets = new List();
foreach (var v in Enum.GetValues(typeof(BuildTarget)))
{
var target = (BuildTarget)v;
var group = BuildPipeline.GetBuildTargetGroup(target);
if (IsBuildTargetSupported(group, target) && !targets.Contains(group))
{
targets.Add(group);
}
}
return targets;
}
static bool IsBuildTargetSupported(BuildTargetGroup group, BuildTarget target)
{
#if UNITY_2018_1_OR_NEWER
return BuildPipeline.IsBuildTargetSupported(group, target);
#else
var flags = System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic;
var buildTargetSupported = typeof(BuildPipeline).GetMethod("IsBuildTargetSupported", flags);
return Convert.ToBoolean(buildTargetSupported.Invoke(null, new object[] { group, target }));
#endif
}
///
/// Add scripting define symbols.
///
/// Symbol to add.
public static void Add(string symbol)
{
foreach (var target in GetTargets())
{
var symbols = Symbols(target);
if (symbols.Contains(symbol))
{
continue;
}
symbols.Add(symbol);
Save(symbols, target);
}
}
///
/// Remove scripting define symbols.
///
/// Symbol to remove.
public static void Remove(string symbol)
{
foreach (var target in GetTargets())
{
var symbols = Symbols(target);
if (!symbols.Contains(symbol))
{
continue;
}
symbols.Remove(symbol);
Save(symbols, target);
}
}
static readonly char[] SymbolSeparator = new char[] { ';' };
///
/// Get scripting define symbols.
///
/// Scripting define symbols.
[System.Obsolete("Replaced with Symbols(BuildTargetGroup target).")]
public static HashSet All()
{
var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
return new HashSet(symbols.Split(SymbolSeparator));
}
///
/// Get scripting define symbols.
///
/// Target.
/// Scripting define symbols.
public static HashSet Symbols(BuildTargetGroup target)
{
var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(target);
var result = new HashSet();
foreach (var symbol in symbols.Split(SymbolSeparator))
{
if (symbol.Length > 0)
{
result.Add(symbol);
}
}
return result;
}
///
/// Check if symbol defined in scripting define symbols.
///
/// Symbol.
/// True if symbol defined; otherwise false.
public static bool Contains(string symbol)
{
return Symbols(EditorUserBuildSettings.selectedBuildTargetGroup).Contains(symbol);
}
static void Save(HashSet symbols, BuildTargetGroup target)
{
var arr = new string[symbols.Count];
symbols.CopyTo(arr);
PlayerSettings.SetScriptingDefineSymbolsForGroup(target, string.Join(";", arr));
AssetDatabase.Refresh();
}
}
}
#endif