89 lines
3.5 KiB
C#
89 lines
3.5 KiB
C#
|
#if UNITY_EDITOR
|
||
|
|
||
|
using System;
|
||
|
using System.Reflection;
|
||
|
using System.Text;
|
||
|
using UnityEditor;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace XCharts.Runtime
|
||
|
{
|
||
|
public static class DefineSymbolsUtil
|
||
|
{
|
||
|
private static readonly StringBuilder s_StringBuilder = new StringBuilder();
|
||
|
|
||
|
public static void AddGlobalDefine(string symbol)
|
||
|
{
|
||
|
var flag = false;
|
||
|
var num = 0;
|
||
|
foreach (var buildTargetGroup in (BuildTargetGroup[]) Enum.GetValues(typeof(BuildTargetGroup)))
|
||
|
{
|
||
|
if (IsValidBuildTargetGroup(buildTargetGroup))
|
||
|
{
|
||
|
var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup);
|
||
|
symbols = symbols.Replace(" ", "");
|
||
|
if (Array.IndexOf(symbols.Split(';'), symbol) != -1) continue;
|
||
|
flag = true;
|
||
|
num++;
|
||
|
var defines = symbols + (symbols.Length > 0 ? ";" + symbol : symbol);
|
||
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, defines);
|
||
|
}
|
||
|
}
|
||
|
if (flag)
|
||
|
{
|
||
|
Debug.LogFormat("Added global define symbol \"{0}\" to {1} BuildTargetGroups.", symbol, num);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void RemoveGlobalDefine(string symbol)
|
||
|
{
|
||
|
var flag = false;
|
||
|
var num = 0;
|
||
|
foreach (var buildTargetGroup in (BuildTargetGroup[]) Enum.GetValues(typeof(BuildTargetGroup)))
|
||
|
{
|
||
|
if (IsValidBuildTargetGroup(buildTargetGroup))
|
||
|
{
|
||
|
var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup).Split(';');
|
||
|
if (Array.IndexOf(symbols, symbol) == -1) continue;
|
||
|
flag = true;
|
||
|
num++;
|
||
|
s_StringBuilder.Length = 0;
|
||
|
foreach (var str in symbols)
|
||
|
{
|
||
|
if (!str.Equals(symbol))
|
||
|
{
|
||
|
if (s_StringBuilder.Length > 0) s_StringBuilder.Append(";");
|
||
|
s_StringBuilder.Append(str);
|
||
|
}
|
||
|
}
|
||
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, s_StringBuilder.ToString());
|
||
|
}
|
||
|
}
|
||
|
if (flag)
|
||
|
{
|
||
|
Debug.LogFormat("Removed global define symbol \"{0}\" to {1} BuildTargetGroups.", symbol, num);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static bool IsValidBuildTargetGroup(BuildTargetGroup group)
|
||
|
{
|
||
|
if (group == BuildTargetGroup.Unknown) return false;
|
||
|
var type = Type.GetType("UnityEditor.Modules.ModuleManager, UnityEditor.dll");
|
||
|
if (type == null) return true;
|
||
|
var method1 = type.GetMethod("GetTargetStringFromBuildTargetGroup", BindingFlags.Static | BindingFlags.NonPublic);
|
||
|
var method2 = typeof(PlayerSettings).GetMethod("GetPlatformName", BindingFlags.Static | BindingFlags.NonPublic);
|
||
|
if (method1 == null || method2 == null) return true;
|
||
|
var str1 = (string) method1.Invoke(null, new object[] { group });
|
||
|
var str2 = (string) method2.Invoke(null, new object[] { group });
|
||
|
if (string.IsNullOrEmpty(str1))
|
||
|
{
|
||
|
return !string.IsNullOrEmpty(str2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
#endif
|