using DSM.Editor; using General; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using UnityEditor; using UnityEngine; public class DSMInspector : EditorWindow { private const string ClearDsmInCurrentScene = "Clear DSM in current scene"; private const string InstantiateDsmInCurrentScene = "Instantiate DSM in current scene"; private const string ForceInstantiateDsmInCurrentScene = "Force instantiate DSM in current scene"; private const string DSMMissingInTheCurrentScene = "DSM missing in the current scene."; private const string KeepOldVersion = "Keep Old Version"; private const string Debugger = "Debugger"; void OnGUI() { var height = 30; GUILayout.Space(20); GUIStyle gUI = new GUIStyle(GUI.skin.button); gUI.fontSize = 20; GUILayout.Space(20); if (GUILayout.Button(ClearDsmInCurrentScene, gUI, GUILayout.Height(height))) { ProgressBar(0.1f); DSMEditor.ClearCurrentScene(); } GUILayout.Space(10); if (GUILayout.Button(InstantiateDsmInCurrentScene, gUI, GUILayout.Height(height))) { ProgressBar(0.03f); DSMEditor.InstantiateCurrentScene(); } GUILayout.Space(5); if (GUILayout.Button(ForceInstantiateDsmInCurrentScene, gUI, GUILayout.Height(height))) { ProgressBar(0.03f); DSMEditor.InstantiateCurrentScene(true); } GUILayout.Space(10); if (DebuggerComponent.Instance) { var sb = PlayerSettings.GetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup); if(sb == ScriptingImplementation.IL2CPP) { var il2cpp = PlayerSettings.GetIl2CppCompilerConfiguration(EditorUserBuildSettings.selectedBuildTargetGroup); EditorGUILayout.HelpBox($"{sb} {il2cpp}", MessageType.Info, true); } else { EditorGUILayout.HelpBox($"{sb}", MessageType.Info, true); } } else { EditorGUILayout.HelpBox(DSMMissingInTheCurrentScene, MessageType.Warning, true); } if (DebuggerComponent.Instance) { DSMObj dsmObj = default; foreach (var item in AssetDatabase.FindAssets("DSMData")) { var data = (DSMObj)AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(item), typeof(DSMObj)); if (data.gameObjectFps != null) { dsmObj = data; break; } } GUIStyle gUIL = new GUIStyle(GUI.skin.label); gUIL.fontSize = 30; GUILayout.Label(Debugger, gUIL); GUILayout.BeginHorizontal(); gUIL.fontSize = 20; GUILayout.Label(KeepOldVersion, gUIL); var keepToggle = GUILayout.Toggle(DebuggerComponent.Instance.keepOldVersion , GUIContent.none, GUILayout.MinHeight(30)); if (keepToggle != dsmObj.keepOldVersion) { dsmObj.keepOldVersion = keepToggle; EditorUtility.SetDirty(dsmObj); AssetDatabase.SaveAssets(); } DebuggerComponent.Instance.keepOldVersion = dsmObj.keepOldVersion; GUILayout.EndHorizontal(); } } #region Methods [MenuItem("Plugins/DSM/DSM Inspector")] static void Init() { DSMInspector window = (DSMInspector)GetWindow(typeof(DSMInspector)); window.Show(); } async void ProgressBar(float step) { float t = 0; while (true) { await Task.Yield(); t += step; EditorUtility.DisplayProgressBar("DSM", "In process...", t); if (t >= 1) { EditorUtility.ClearProgressBar(); break; } } } #endregion }