Files
beyond/Assets/ThirdParty/PlayMaker/Editor/DefinesHelper.cs
2024-11-20 15:21:28 +01:00

128 lines
4.3 KiB
C#

using System;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace HutongGames.PlayMakerEditor
{
/// <summary>
/// Helper class for adding/removing define symbols
/// </summary>
public class DefinesHelper
{
public static void AddSymbolToAllTargets(string defineSymbol)
{
foreach (BuildTargetGroup group in Enum.GetValues(typeof(BuildTargetGroup)))
{
if (!IsValidBuildTargetGroup(group)) continue;
var defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(group).Split(';').Select(d => d.Trim()).ToList();
if (!defineSymbols.Contains(defineSymbol))
{
defineSymbols.Add(defineSymbol);
try
{
PlayerSettings.SetScriptingDefineSymbolsForGroup(group, string.Join(";", defineSymbols.ToArray()));
}
catch (Exception)
{
Debug.Log("Could not set PLAYMAKER defines for build target group: " + group);
throw;
}
}
}
}
public static void RemoveSymbolFromAllTargets(string defineSymbol)
{
foreach (BuildTargetGroup group in Enum.GetValues(typeof(BuildTargetGroup)))
{
if (!IsValidBuildTargetGroup(group)) continue;
var defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(group).Split(';').Select(d => d.Trim()).ToList();
if (defineSymbols.Contains(defineSymbol))
{
defineSymbols.Remove(defineSymbol);
PlayerSettings.SetScriptingDefineSymbolsForGroup(group, string.Join(";", defineSymbols.ToArray()));
}
}
}
private static bool IsValidBuildTargetGroup(BuildTargetGroup group)
{
if (group == BuildTargetGroup.Unknown || IsObsolete(group)) return false;
// Checking Obsolete attribute should be enough,
// but sometimes Unity versions are missing attributes
// so keeping these checks around just in case:
#if UNITY_5_3_0 || UNITY_5_3 // Unity 5.3.0 had tvOS in enum but throws error if used
if ((int)(object)group == 25) return false;
#endif
#if UNITY_5_4 || UNITY_5_5 // Unity 5.4+ doesn't like Wp8 and Blackberry any more
if ((int)(object)group == 15) return false;
if ((int)(object)group == 16) return false;
#endif
/*
#if UNITY_5_6 // Unity 5.6 bug
if ((int)(object)group == 27) return false;
#endif
*/
// Not making a build with Unity 5.6
// So check unityVersion string instead of symbol
if (Application.unityVersion.StartsWith("5.6"))
{
if ((int)(object)group == 27) return false;
}
return true;
}
private static bool IsObsolete(Enum value)
{
var enumInt = (int)(object)value;
if (enumInt == 4 || enumInt == 14) return false;
var field = value.GetType().GetField(value.ToString());
var attributes = (ObsoleteAttribute[])field.GetCustomAttributes(typeof(ObsoleteAttribute), false);
return attributes.Length > 0;
}
/* NOTE: IsObsolete is complicated by the definition of BuildTargetGroup enum.
* E.g., in Unity 5.4:
*
public enum BuildTargetGroup
{
Unknown = 0,
Standalone = 1,
[Obsolete("WebPlayer was removed in 5.4, consider using WebGL")] WebPlayer = 2,
iOS = 4,
[Obsolete("Use iOS instead (UnityUpgradable) -> iOS", true)] iPhone = 4,
PS3 = 5,
XBOX360 = 6,
Android = 7,
WebGL = 13,
[Obsolete("Use WSA instead")] Metro = 14,
WSA = 14,
[Obsolete("Use WSA instead")] WP8 = 15,
[Obsolete("BlackBerry has been removed as of 5.4")] BlackBerry = 16,
Tizen = 17,
PSP2 = 18,
PS4 = 19,
PSM = 20,
XboxOne = 21,
SamsungTV = 22,
Nintendo3DS = 23,
WiiU = 24,
tvOS = 25,
}
*/
}
}