using System.Collections.Generic; using UnityEditor; namespace RotaryHeart.Lib { public class Definer { /// /// Applies the defines to the script symbols /// /// List of defines to add public static void ApplyDefines(List defines) { if (defines == null || defines.Count == 0) { return; } string availableDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); List definesSplit = new List(availableDefines.Split(';')); foreach (string define in defines) { if (!definesSplit.Contains(define)) { definesSplit.Add(define); } } _ApplyDefine(string.Join(";", definesSplit.ToArray())); } /// /// Removes the defines from the script symbols /// /// List of defines to remove public static void RemoveDefines(List defines) { if (defines == null || defines.Count == 0) return; string availableDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); List definesSplit = new List(availableDefines.Split(';')); foreach (string define in defines) { definesSplit.Remove(define); } _ApplyDefine(string.Join(";", definesSplit.ToArray())); } /// /// Returns true if a define is already defined /// /// Define to check public static bool ContainsDefine(string define) { if (string.IsNullOrEmpty(define)) { return false; } string availableDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); List definesSplit = new List(availableDefines.Split(';')); return definesSplit.Contains(define); } /// /// Actual logic that applies the defines symbols /// /// List of defines to save, this includes the already defined ones static void _ApplyDefine(string define) { if (string.IsNullOrEmpty(define)) { return; } PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, define); } } }