ScriptingDefineSymbols.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2022 Kybernetik //
  2. #if UNITY_EDITOR
  3. using System;
  4. using System.Collections.Generic;
  5. using UnityEditor;
  6. using UnityEditor.Build;
  7. namespace Animancer.Editor
  8. {
  9. /// <summary>[Editor-Only]
  10. /// Various utility functions for accessing scripting define symbols.
  11. /// </summary>
  12. /// https://kybernetik.com.au/animancer/api/Animancer.Editor/ScriptingDefineSymbols
  13. ///
  14. public static class ScriptingDefineSymbols
  15. {
  16. /************************************************************************************************************************/
  17. /// <summary>The platform currently selected in the Player Settings.</summary>
  18. #if UNITY_2021_2_OR_NEWER
  19. private static NamedBuildTarget CurrentBuildTarget
  20. {
  21. get
  22. {
  23. var buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
  24. return NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup);
  25. }
  26. }
  27. #else
  28. private static BuildTargetGroup CurrentBuildTarget
  29. => EditorUserBuildSettings.selectedBuildTargetGroup;
  30. #endif
  31. /************************************************************************************************************************/
  32. /// <summary>The symbols defined in the <see cref="CurrentBuildTarget"/>.</summary>
  33. public static string[] Symbols
  34. {
  35. get
  36. {
  37. var currentBuildTarget = CurrentBuildTarget;
  38. #if UNITY_2021_2_OR_NEWER
  39. PlayerSettings.GetScriptingDefineSymbols(currentBuildTarget, out var symbols);
  40. return symbols;
  41. #else
  42. var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentBuildTarget);
  43. return symbols.Split(';');
  44. #endif
  45. }
  46. set
  47. {
  48. var currentBuildTarget = CurrentBuildTarget;
  49. #if UNITY_2021_2_OR_NEWER
  50. PlayerSettings.SetScriptingDefineSymbols(currentBuildTarget, value);
  51. #else
  52. var joined = string.Join(";", value);
  53. PlayerSettings.SetScriptingDefineSymbolsForGroup(currentBuildTarget, joined);
  54. #endif
  55. }
  56. }
  57. /************************************************************************************************************************/
  58. /// <summary>Is the `symbol` defined in the <see cref="CurrentBuildTarget"/>.</summary>
  59. public static bool IsSymbolDefined(string symbol)
  60. {
  61. return Array.IndexOf(Symbols, symbol) >= 0;
  62. }
  63. /************************************************************************************************************************/
  64. /// <summary>Defines or undefines the `symbol` in the <see cref="CurrentBuildTarget"/>.</summary>
  65. public static void SetSymbolDefined(string symbol, bool isDefined)
  66. {
  67. var symbols = Symbols;
  68. var index = Array.IndexOf(symbols, symbol);
  69. if (isDefined)
  70. {
  71. if (index >= 0)
  72. return;
  73. var newSymbols = new List<string>();
  74. newSymbols.AddRange(symbols);
  75. newSymbols.Add(symbol);
  76. symbols = newSymbols.ToArray();
  77. }
  78. else
  79. {
  80. if (index < 0)
  81. return;
  82. var newSymbols = new List<string>(symbols);
  83. newSymbols.RemoveAt(index);
  84. symbols = newSymbols.ToArray();
  85. }
  86. Symbols = symbols;
  87. }
  88. /************************************************************************************************************************/
  89. }
  90. }
  91. #endif