public override void OnInspectorGUI() { var t = (DllManipulatorScript)this.target; DrawOptions(t.Options); EditorGUILayout.Space(); var usedDlls = DllManipulator.GetUsedDllsInfos(); if (usedDlls.Count != 0) { if (t.Options.loadingMode == DllLoadingMode.Preload && usedDlls.Any(d => !d.isLoaded)) { if (EditorApplication.isPaused) { if (GUILayout.Button("Load all DLLs & Unpause")) { DllManipulator.LoadAll(); EditorApplication.isPaused = false; } } if (GUILayout.Button("Load all DLLs")) { DllManipulator.LoadAll(); } } if (usedDlls.Any(d => d.isLoaded)) { if (EditorApplication.isPlaying && !EditorApplication.isPaused) { bool pauseAndUnloadAll; if (t.Options.threadSafe) { pauseAndUnloadAll = GUILayout.Button(UNLOAD_ALL_DLLS_AND_PAUSE_WITH_THREAD_SAFETY_GUI_CONTENT); } else { pauseAndUnloadAll = GUILayout.Button("Unload all DLLs & Pause"); } if (pauseAndUnloadAll) { EditorApplication.isPaused = true; DllManipulator.UnloadAll(); } } bool unloadAll; if (EditorApplication.isPlaying && t.Options.threadSafe) { unloadAll = GUILayout.Button(UNLOAD_ALL_DLLS_WITH_THREAD_SAFETY_GUI_CONTENT); } else if (EditorApplication.isPlaying && !EditorApplication.isPaused && t.Options.loadingMode == DllLoadingMode.Preload) { unloadAll = GUILayout.Button(UNLOAD_ALL_DLLS_IN_PLAY_PRELOADED_GUI_CONTENT); } else { unloadAll = GUILayout.Button("Unload all DLLs"); } if (unloadAll) { DllManipulator.UnloadAll(); } } DrawUsedDlls(usedDlls); } else if (EditorApplication.isPlaying) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); EditorGUILayout.LabelField("No DLLs to mock"); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } if (EditorApplication.isPlaying && t.InitializationTime != null) { EditorGUILayout.Space(); EditorGUILayout.Space(); var time = t.InitializationTime.Value; EditorGUILayout.LabelField($"Initialized in: {(int)time.TotalSeconds}.{time.Milliseconds.ToString("D3")}s"); } }
/// <summary> /// Draws GUI related to the current state of the DllManipulator. /// Buttons to load/unload Dlls as well as details about which Dlls are loaded /// </summary> /// <param name="t">The OnInspectorGUI target</param> private void DrawCurrentState(DllManipulatorScript t) { if (DllManipulator.Options == null) // Exit if we have not initialized DllManipulator { return; } var usedDlls = DllManipulator.GetUsedDllsInfos(); if (usedDlls.Count != 0) { if (DllManipulator.Options.loadingMode == DllLoadingMode.Preload && usedDlls.Any(d => !d.isLoaded)) { if (EditorApplication.isPaused) { if (GUILayout.Button("Load all DLLs & Unpause")) { DllManipulator.LoadAll(); EditorApplication.isPaused = false; } } if (GUILayout.Button("Load all DLLs")) { DllManipulator.LoadAll(); } } if (usedDlls.Any(d => d.isLoaded)) { if (EditorApplication.isPlaying && !EditorApplication.isPaused) { bool pauseAndUnloadAll; if (DllManipulator.Options.threadSafe) { pauseAndUnloadAll = GUILayout.Button(UNLOAD_ALL_DLLS_AND_PAUSE_WITH_THREAD_SAFETY_GUI_CONTENT); } else { pauseAndUnloadAll = GUILayout.Button("Unload all DLLs & Pause"); } if (pauseAndUnloadAll) { EditorApplication.isPaused = true; DllManipulator.UnloadAll(); } } bool unloadAll; if (DllManipulator.Options.threadSafe) { unloadAll = GUILayout.Button(UNLOAD_ALL_DLLS_WITH_THREAD_SAFETY_GUI_CONTENT); } else if (DllManipulator.Options.loadingMode == DllLoadingMode.Preload && (EditorApplication.isPlaying && !EditorApplication.isPaused || DllManipulator.Options.enableInEditMode)) { unloadAll = GUILayout.Button(UNLOAD_ALL_DLLS_IN_PLAY_PRELOADED_GUI_CONTENT); } else { unloadAll = GUILayout.Button("Unload all DLLs"); } if (unloadAll) { DllManipulator.UnloadAll(); } } DrawUsedDlls(usedDlls); } else { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); EditorGUILayout.LabelField("No DLLs to mock"); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } if (t.InitializationTime != null) { EditorGUILayout.Space(); EditorGUILayout.Space(); var time = t.InitializationTime.Value; EditorGUILayout.LabelField($"Initialized in: {(int)time.TotalSeconds}.{time.Milliseconds.ToString("D3")}s"); } }