diff --git a/Unity/Editor/Configurator.cs b/Unity/Editor/Configurator.cs new file mode 100644 index 0000000..25942ee --- /dev/null +++ b/Unity/Editor/Configurator.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEditor.PackageManager.Requests; +using UnityEditor.PackageManager; + +namespace RoboidControl.Unity +{ + [InitializeOnLoad] + public class ConfigurationCheck + { + static ConfigurationCheck() + { + RetrievePackageList(); + } + + protected static ListRequest request; + public static List packageNameList; + + public static void RetrievePackageList() + { + request = Client.List(); // List packages installed for the Project + EditorApplication.update += Progress; + } + + public static void Progress() + { + if (request.IsCompleted) + { + if (request.Status == StatusCode.Success) + { + packageNameList = new List(); + foreach (UnityEditor.PackageManager.PackageInfo package in request.Result) + packageNameList.Add(package.name); + + DidReloadScripts(); + } + else if (request.Status >= StatusCode.Failure) + Debug.Log(request.Error.message); + + EditorApplication.update -= Progress; + } + } + + //[DidReloadScripts] + protected static void DidReloadScripts() + { + if (packageNameList == null) + return; + CheckExtension( + packageNameList.Contains("com.unity.cloud.gltfast"), "GLTF"); + } + + protected static void CheckExtension(bool enabled, string define) + { + if (enabled) + GlobalDefine(define); + else + GlobalUndefine(define); + } + + public static void GlobalDefine(string name) + { + //Debug.Log("Define " + name); + string scriptDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + if (!scriptDefines.Contains(name)) + { + string newScriptDefines = scriptDefines + " " + name; + if (EditorUserBuildSettings.selectedBuildTargetGroup != 0) + PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, newScriptDefines); + } + } + + public static void GlobalUndefine(string name) + { + //Debug.Log("Undefine " + name); + string scriptDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + if (scriptDefines.Contains(name)) + { + int playMakerIndex = scriptDefines.IndexOf(name); + string newScriptDefines = scriptDefines.Remove(playMakerIndex, name.Length); + PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, newScriptDefines); + } + + } + } +} \ No newline at end of file