private void OnEnable() { if (_singletonInstance != null) { if (_singletonInstance != this) { Destroy(gameObject); } return; } _singletonInstance = this; DontDestroyOnLoad(gameObject); _options = Options; Initialize(); }
public override void OnInspectorGUI() { var t = (DllManipulator)this.target; t.Options.dllPathPattern = EditorGUILayout.TextField(DLL_PATH_PATTERN_GUI_CONTENT, t.Options.dllPathPattern); if (EditorApplication.isPlaying) { GUI.enabled = false; } t.Options.loadingMode = (DllLoadingMode)EditorGUILayout.EnumPopup(DLL_LOADING_MODE_GUI_CONTENT, t.Options.loadingMode); #if UNITY_STANDALONE_LINUX t.Options.linuxDlopenFlags = (LinuxDlopenFlags)EditorGUILayout.EnumPopup(LINUX_DLOPEN_FLAGS_GUI_CONTENT, t.Options.linuxDlopenFlags); #endif t.Options.mockAllNativeFunctions = EditorGUILayout.Toggle(MOCK_ALL_NATIVE_FUNCTIONS_GUI_CONTENT, t.Options.mockAllNativeFunctions); t.Options.mockCallsInAllTypes = EditorGUILayout.Toggle(MOCK_CALLS_IN_ALL_TYPES_GUI_CONTENT, t.Options.mockCallsInAllTypes); GUI.enabled = true; 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(); } } else if (EditorApplication.isPaused) { if (GUILayout.Button("Unpause")) { EditorApplication.isPaused = false; } } if (usedDlls.Any(d => d.isLoaded)) { if (EditorApplication.isPlaying && !EditorApplication.isPaused) { if (GUILayout.Button("Unload all DLLs & Pause")) { EditorApplication.isPaused = true; DllManipulator.UnloadAll(); } } if (EditorApplication.isPlaying && !EditorApplication.isPaused && t.Options.loadingMode == DllLoadingMode.Preload) { if (GUILayout.Button(UNLOAD_ALL_DLLS_IN_PLAY_PRELOADED_GUI_CONTENT)) { DllManipulator.UnloadAll(); } } else { if (GUILayout.Button("Unload all DLLs")) { DllManipulator.UnloadAll(); } } } _showLoadedLibraries = EditorGUILayout.Foldout(_showLoadedLibraries, "Mocked DLLs"); if (_showLoadedLibraries) { var prevIndent = EditorGUI.indentLevel; EditorGUI.indentLevel += 1; bool isFirstDll = true; foreach (var dll in usedDlls) { if (!isFirstDll) { EditorGUILayout.Space(); } var stateAttributes = new List <string> { dll.isLoaded ? "LOADED" : "NOT LOADED" }; if (dll.loadingError) { stateAttributes.Add("LOAD ERROR"); } if (dll.symbolError) { stateAttributes.Add("SYMBOL ERRROR"); } var state = string.Join(" | ", stateAttributes); EditorGUILayout.LabelField($"[{state}] {dll.name}"); EditorGUILayout.LabelField(dll.path); isFirstDll = false; } EditorGUI.indentLevel = prevIndent; } } else if (EditorApplication.isPlaying) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); EditorGUILayout.LabelField("No DLLs to mock"); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } if (EditorApplication.isPlaying && DllManipulator.InitializationTime != null) { EditorGUILayout.Space(); var time = DllManipulator.InitializationTime.Value; EditorGUILayout.LabelField($"Initialized in: {(int)time.TotalSeconds}.{time.Milliseconds.ToString("D3")}s"); } }