From dc449d4a1ed114a9a3c6363a097f77ea9276fd2f Mon Sep 17 00:00:00 2001 From: sinaioutlander <49360850+sinaioutlander@users.noreply.github.com> Date: Thu, 12 Nov 2020 20:31:08 +1100 Subject: [PATCH] DebugConsole save log on quit, some work on CacheObjects, fix missing-material issue on games without default UI Shader --- src/Config/ModConfig.cs | 1 + src/ExplorerBepInPlugin.cs | 9 ++ src/ExplorerCore.cs | 24 ++-- src/ExplorerMelonMod.cs | 6 + src/Inspectors/InspectorManager.cs | 136 +++++++++--------- .../Reflection/CacheObject/CacheMember.cs | 129 ++++++++++------- .../Reflection/CacheObject/CacheMethod.cs | 29 ++-- .../Reflection/InstanceInspector.cs | 14 +- .../InteractiveValue/InteractiveValue.cs | 17 ++- src/Inspectors/Reflection/StaticInspector.cs | 14 +- src/Inspectors/ReflectionInspector.cs | 52 +++++-- src/Tests/Tests.cs | 11 +- src/UI/Modules/DebugConsole.cs | 109 ++++++++------ src/UI/PanelDragger.cs | 15 +- src/UI/UIFactory.cs | 4 +- src/UI/UIManager.cs | 6 +- src/UnityExplorer.csproj | 8 +- 17 files changed, 336 insertions(+), 248 deletions(-) diff --git a/src/Config/ModConfig.cs b/src/Config/ModConfig.cs index 1ee0336..959fa1e 100644 --- a/src/Config/ModConfig.cs +++ b/src/Config/ModConfig.cs @@ -20,6 +20,7 @@ namespace UnityExplorer.Config public int Default_Page_Limit = 25; public string Default_Output_Path = ExplorerCore.EXPLORER_FOLDER; public bool Log_Unity_Debug = false; + public bool Save_Logs_To_Disk = true; public static event Action OnConfigChanged; diff --git a/src/ExplorerBepInPlugin.cs b/src/ExplorerBepInPlugin.cs index 0528a81..5ee763c 100644 --- a/src/ExplorerBepInPlugin.cs +++ b/src/ExplorerBepInPlugin.cs @@ -8,6 +8,7 @@ using HarmonyLib; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; +using UnityExplorer.UI.Modules; #if CPP using UnhollowerRuntimeLib; using BepInEx.IL2CPP; @@ -46,6 +47,10 @@ namespace UnityExplorer ExplorerCore.Update(); } + internal void OnApplicationQuit() + { + DebugConsole.OnQuit(); + } } #endif @@ -108,7 +113,11 @@ namespace UnityExplorer lastSceneName = scene.name; DoSceneChange(scene, scene); } + } + internal void OnApplicationQuit() + { + DebugConsole.OnQuit(); } } } diff --git a/src/ExplorerCore.cs b/src/ExplorerCore.cs index 76ccd03..66c6144 100644 --- a/src/ExplorerCore.cs +++ b/src/ExplorerCore.cs @@ -41,7 +41,7 @@ namespace UnityExplorer } public static bool m_showMenu; - private static bool m_doneUIInit; + private static bool s_doneUIInit; private static float m_timeSinceStartup; public ExplorerCore() @@ -92,23 +92,18 @@ namespace UnityExplorer public static void Update() { - if (!m_doneUIInit) + if (!s_doneUIInit) CheckUIInit(); if (MouseInspector.Enabled) - { MouseInspector.UpdateInspect(); - } else { if (InputManager.GetKeyDown(ModConfig.Instance.Main_Menu_Toggle)) ShowMenu = !ShowMenu; - if (ShowMenu) - { - //ForceUnlockCursor.Update(); + if (ShowMenu && s_doneUIInit) UIManager.Update(); - } } } @@ -118,7 +113,7 @@ namespace UnityExplorer if (m_timeSinceStartup > 0.1f) { - m_doneUIInit = true; + s_doneUIInit = true; try { UIManager.Init(); @@ -203,5 +198,16 @@ namespace UnityExplorer ExplorerBepInPlugin.Logging?.LogError(message?.ToString()); #endif } + + + public static string RemoveInvalidFilenameChars(string s) + { + var invalid = System.IO.Path.GetInvalidFileNameChars(); + foreach (var c in invalid) + { + s = s.Replace(c.ToString(), ""); + } + return s; + } } } diff --git a/src/ExplorerMelonMod.cs b/src/ExplorerMelonMod.cs index a2736a8..030ff3e 100644 --- a/src/ExplorerMelonMod.cs +++ b/src/ExplorerMelonMod.cs @@ -1,5 +1,6 @@ #if ML using MelonLoader; +using UnityExplorer.UI.Modules; namespace UnityExplorer { @@ -24,6 +25,11 @@ namespace UnityExplorer ExplorerCore.Update(); } + public override void OnApplicationQuit() + { + DebugConsole.OnQuit(); + } + //public override void OnGUI() //{ // ExplorerCore.OnGUI(); diff --git a/src/Inspectors/InspectorManager.cs b/src/Inspectors/InspectorManager.cs index c1140f2..95be444 100644 --- a/src/Inspectors/InspectorManager.cs +++ b/src/Inspectors/InspectorManager.cs @@ -167,7 +167,7 @@ namespace UnityExplorer.Inspectors titleLayout.minHeight = 30; titleLayout.flexibleHeight = 0; titleLayout.minWidth = 90; - titleLayout.flexibleWidth = 0; + titleLayout.flexibleWidth = 20000; ConstructToolbar(topRowObj); @@ -222,84 +222,84 @@ namespace UnityExplorer.Inspectors invisGroup.padding.right = 2; invisGroup.spacing = 10; - // time scale group +// // time scale group - var timeGroupObj = UIFactory.CreateHorizontalGroup(invisObj, new Color(1, 1, 1, 0)); - var timeGroup = timeGroupObj.GetComponent(); - timeGroup.childForceExpandWidth = false; - timeGroup.childControlWidth = true; - timeGroup.childForceExpandHeight = false; - timeGroup.childControlHeight = true; - timeGroup.padding.top = 2; - timeGroup.padding.left = 5; - timeGroup.padding.right = 2; - timeGroup.padding.bottom = 2; - timeGroup.spacing = 5; - timeGroup.childAlignment = TextAnchor.MiddleCenter; - var timeGroupLayout = timeGroupObj.AddComponent(); - timeGroupLayout.minWidth = 100; - timeGroupLayout.flexibleWidth = 300; - timeGroupLayout.minHeight = 25; - timeGroupLayout.flexibleHeight = 0; +// var timeGroupObj = UIFactory.CreateHorizontalGroup(invisObj, new Color(1, 1, 1, 0)); +// var timeGroup = timeGroupObj.GetComponent(); +// timeGroup.childForceExpandWidth = false; +// timeGroup.childControlWidth = true; +// timeGroup.childForceExpandHeight = false; +// timeGroup.childControlHeight = true; +// timeGroup.padding.top = 2; +// timeGroup.padding.left = 5; +// timeGroup.padding.right = 2; +// timeGroup.padding.bottom = 2; +// timeGroup.spacing = 5; +// timeGroup.childAlignment = TextAnchor.MiddleCenter; +// var timeGroupLayout = timeGroupObj.AddComponent(); +// timeGroupLayout.minWidth = 100; +// timeGroupLayout.flexibleWidth = 300; +// timeGroupLayout.minHeight = 25; +// timeGroupLayout.flexibleHeight = 0; - // time scale title +// // time scale title - var timeTitleObj = UIFactory.CreateLabel(timeGroupObj, TextAnchor.MiddleLeft); - var timeTitle = timeTitleObj.GetComponent(); - timeTitle.text = "Time Scale:"; - timeTitle.color = new Color(21f / 255f, 192f / 255f, 235f / 255f); - var titleLayout = timeTitleObj.AddComponent(); - titleLayout.minHeight = 25; - titleLayout.minWidth = 80; - titleLayout.flexibleHeight = 0; - timeTitle.horizontalOverflow = HorizontalWrapMode.Overflow; +// var timeTitleObj = UIFactory.CreateLabel(timeGroupObj, TextAnchor.MiddleLeft); +// var timeTitle = timeTitleObj.GetComponent(); +// timeTitle.text = "Time Scale:"; +// timeTitle.color = new Color(21f / 255f, 192f / 255f, 235f / 255f); +// var titleLayout = timeTitleObj.AddComponent(); +// titleLayout.minHeight = 25; +// titleLayout.minWidth = 80; +// titleLayout.flexibleHeight = 0; +// timeTitle.horizontalOverflow = HorizontalWrapMode.Overflow; - // actual active time label +// // actual active time label - var timeLabelObj = UIFactory.CreateLabel(timeGroupObj, TextAnchor.MiddleLeft); - var timeLabelLayout = timeLabelObj.AddComponent(); - timeLabelLayout.minWidth = 40; - timeLabelLayout.minHeight = 25; - timeLabelLayout.flexibleHeight = 0; +// var timeLabelObj = UIFactory.CreateLabel(timeGroupObj, TextAnchor.MiddleLeft); +// var timeLabelLayout = timeLabelObj.AddComponent(); +// timeLabelLayout.minWidth = 40; +// timeLabelLayout.minHeight = 25; +// timeLabelLayout.flexibleHeight = 0; - // todo make static and update - var s_timeText = timeLabelObj.GetComponent(); - s_timeText.text = Time.timeScale.ToString("F1"); +// // todo make static and update +// var s_timeText = timeLabelObj.GetComponent(); +// s_timeText.text = Time.timeScale.ToString("F1"); - // time scale input +// // time scale input - var timeInputObj = UIFactory.CreateInputField(timeGroupObj); - var timeInput = timeInputObj.GetComponent(); - timeInput.characterValidation = InputField.CharacterValidation.Decimal; - var timeInputLayout = timeInputObj.AddComponent(); - timeInputLayout.minWidth = 90; - timeInputLayout.flexibleWidth = 0; - timeInputLayout.minHeight = 25; - timeInputLayout.flexibleHeight = 0; +// var timeInputObj = UIFactory.CreateInputField(timeGroupObj); +// var timeInput = timeInputObj.GetComponent(); +// timeInput.characterValidation = InputField.CharacterValidation.Decimal; +// var timeInputLayout = timeInputObj.AddComponent(); +// timeInputLayout.minWidth = 90; +// timeInputLayout.flexibleWidth = 0; +// timeInputLayout.minHeight = 25; +// timeInputLayout.flexibleHeight = 0; - // time scale apply button +// // time scale apply button - var applyBtnObj = UIFactory.CreateButton(timeGroupObj); - var applyBtn = applyBtnObj.GetComponent