From 7eb4b1bc772c706a8583aaca9793d8f29a03bd5b Mon Sep 17 00:00:00 2001 From: Sinai Date: Thu, 15 Apr 2021 20:18:03 +1000 Subject: [PATCH 001/178] WIP * Using publicized mono assemblies * Remaking UI from scratch. Done the Scene Explorer so far. --- lib/UnityEngine.UI.dll | Bin 217600 -> 245760 bytes lib/publicized_assemblies/UnityEngine.UI.dll | Bin 0 -> 238080 bytes lib/publicized_assemblies/UnityEngine.dll | Bin 0 -> 918016 bytes src/Core/CSharp/ScriptInteraction.cs | 71 +-- src/Core/CSharp/Suggestion.cs | 5 +- src/Core/Config/ConfigManager.cs | 18 +- src/Core/Input/CursorUnlocker.cs | 1 - src/Core/Input/InputSystem.cs | 14 +- src/Core/Input/LegacyInput.cs | 1 - src/Core/ReflectionUtility.cs | 34 +- src/Core/Runtime/Il2Cpp/Il2CppProvider.cs | 50 +- src/Core/Runtime/Il2Cpp/Il2CppReflection.cs | 22 +- src/Core/Runtime/Mono/MonoProvider.cs | 21 +- src/Core/Runtime/ReflectionProvider.cs | 20 + src/Core/Runtime/RuntimeContext.cs | 13 + src/Core/Runtime/RuntimeProvider.cs | 24 +- src/Core/SceneHandler.cs | 194 ++++++ src/Core/Search/SearchProvider.cs | 9 +- src/Core/{ => Tests}/TestClass.cs | 4 +- src/Core/Unity/UnityHelpers.cs | 4 +- src/ExplorerCore.cs | 25 +- src/UI/CacheObject/CacheConfigEntry.cs | 102 --- src/UI/CacheObject/CacheEnumerated.cs | 57 -- src/UI/CacheObject/CacheField.cs | 40 -- src/UI/CacheObject/CacheMember.cs | 383 ------------ src/UI/CacheObject/CacheMethod.cs | 173 ----- src/UI/CacheObject/CacheObjectBase.cs | 110 ---- src/UI/CacheObject/CachePaired.cs | 72 --- src/UI/CacheObject/CacheProperty.cs | 71 --- src/UI/InspectorManager.cs | 17 + src/UI/Inspectors/GameObjects/ChildList.cs | 193 ------ .../Inspectors/GameObjects/ComponentList.cs | 192 ------ .../GameObjects/GameObjectControls.cs | 468 -------------- .../GameObjects/GameObjectInspector.cs | 350 ----------- src/UI/Inspectors/InspectUnderMouse.cs | 328 ---------- src/UI/Inspectors/InspectorBase.cs | 120 ---- src/UI/Inspectors/InspectorManager.cs | 204 ------ .../Reflection/InstanceInspector.cs | 253 -------- .../Reflection/ReflectionInspector.cs | 518 --------------- .../Inspectors/Reflection/StaticInspector.cs | 14 - src/UI/InteractiveValues/InteractiveBool.cs | 110 ---- src/UI/InteractiveValues/InteractiveColor.cs | 168 ----- .../InteractiveDictionary.cs | 247 -------- src/UI/InteractiveValues/InteractiveEnum.cs | 164 ----- .../InteractiveEnumerable.cs | 207 ------ src/UI/InteractiveValues/InteractiveFlags.cs | 126 ---- .../InteractiveFloatStruct.cs | 201 ------ src/UI/InteractiveValues/InteractiveNumber.cs | 118 ---- src/UI/InteractiveValues/InteractiveString.cs | 188 ------ src/UI/InteractiveValues/InteractiveValue.cs | 352 ----------- src/UI/Main/BaseMenuPage.cs | 36 -- src/UI/Main/CSConsole/AutoCompleter.cs | 302 --------- src/UI/Main/CSConsole/CSLexerHighlighter.cs | 290 --------- src/UI/Main/CSConsole/CSharpConsole.cs | 590 ------------------ src/UI/Main/CSConsole/Lexer/CommentMatch.cs | 46 -- src/UI/Main/CSConsole/Lexer/KeywordMatch.cs | 105 ---- src/UI/Main/CSConsole/Lexer/Matcher.cs | 32 - src/UI/Main/CSConsole/Lexer/NumberMatch.cs | 39 -- src/UI/Main/CSConsole/Lexer/StringMatch.cs | 26 - src/UI/Main/CSConsole/Lexer/SymbolMatch.cs | 106 ---- src/UI/Main/DebugConsole.cs | 238 ------- src/UI/Main/Home/HomePage.cs | 46 -- src/UI/Main/Home/SceneExplorer.cs | 553 ---------------- src/UI/Main/MainMenu.cs | 229 ------- src/UI/Main/Options/OptionsPage.cs | 73 --- src/UI/Main/Search/SearchPage.cs | 460 -------------- src/UI/Model/UIBehaviourModel.cs | 53 ++ src/UI/Model/UIModel.cs | 27 + src/UI/Panels/SceneExplorer.cs | 181 ++++++ src/UI/UIFactory.cs | 143 +++-- src/UI/UIManager.cs | 71 ++- src/UI/{Main => Utility}/PanelDragger.cs | 134 ++-- src/UI/Utility/SignatureHighlighter.cs | 1 - src/UI/Widgets/InfiniteScroll/ICell.cs | 15 + .../Widgets/InfiniteScroll/IListDataSource.cs | 14 + .../InfiniteScroll/InfiniteScrollRect.cs | 497 +++++++++++++++ src/UI/Widgets/InfiniteScroll/UIExtensions.cs | 38 ++ .../InputFieldScroller.cs | 1 - src/UI/{Utility => Widgets}/PageHandler.cs | 38 +- .../{Utility => Widgets}/SliderScrollbar.cs | 51 +- .../Widgets/TransformTree/CachedTransform.cs | 35 ++ src/UI/Widgets/TransformTree/TransformCell.cs | 86 +++ src/UI/Widgets/TransformTree/TransformTree.cs | 181 ++++++ src/UnityExplorer.csproj | 88 +-- 84 files changed, 1819 insertions(+), 9082 deletions(-) create mode 100644 lib/publicized_assemblies/UnityEngine.UI.dll create mode 100644 lib/publicized_assemblies/UnityEngine.dll create mode 100644 src/Core/Runtime/RuntimeContext.cs create mode 100644 src/Core/SceneHandler.cs rename src/Core/{ => Tests}/TestClass.cs (89%) delete mode 100644 src/UI/CacheObject/CacheConfigEntry.cs delete mode 100644 src/UI/CacheObject/CacheEnumerated.cs delete mode 100644 src/UI/CacheObject/CacheField.cs delete mode 100644 src/UI/CacheObject/CacheMember.cs delete mode 100644 src/UI/CacheObject/CacheMethod.cs delete mode 100644 src/UI/CacheObject/CacheObjectBase.cs delete mode 100644 src/UI/CacheObject/CachePaired.cs delete mode 100644 src/UI/CacheObject/CacheProperty.cs create mode 100644 src/UI/InspectorManager.cs delete mode 100644 src/UI/Inspectors/GameObjects/ChildList.cs delete mode 100644 src/UI/Inspectors/GameObjects/ComponentList.cs delete mode 100644 src/UI/Inspectors/GameObjects/GameObjectControls.cs delete mode 100644 src/UI/Inspectors/GameObjects/GameObjectInspector.cs delete mode 100644 src/UI/Inspectors/InspectUnderMouse.cs delete mode 100644 src/UI/Inspectors/InspectorBase.cs delete mode 100644 src/UI/Inspectors/InspectorManager.cs delete mode 100644 src/UI/Inspectors/Reflection/InstanceInspector.cs delete mode 100644 src/UI/Inspectors/Reflection/ReflectionInspector.cs delete mode 100644 src/UI/Inspectors/Reflection/StaticInspector.cs delete mode 100644 src/UI/InteractiveValues/InteractiveBool.cs delete mode 100644 src/UI/InteractiveValues/InteractiveColor.cs delete mode 100644 src/UI/InteractiveValues/InteractiveDictionary.cs delete mode 100644 src/UI/InteractiveValues/InteractiveEnum.cs delete mode 100644 src/UI/InteractiveValues/InteractiveEnumerable.cs delete mode 100644 src/UI/InteractiveValues/InteractiveFlags.cs delete mode 100644 src/UI/InteractiveValues/InteractiveFloatStruct.cs delete mode 100644 src/UI/InteractiveValues/InteractiveNumber.cs delete mode 100644 src/UI/InteractiveValues/InteractiveString.cs delete mode 100644 src/UI/InteractiveValues/InteractiveValue.cs delete mode 100644 src/UI/Main/BaseMenuPage.cs delete mode 100644 src/UI/Main/CSConsole/AutoCompleter.cs delete mode 100644 src/UI/Main/CSConsole/CSLexerHighlighter.cs delete mode 100644 src/UI/Main/CSConsole/CSharpConsole.cs delete mode 100644 src/UI/Main/CSConsole/Lexer/CommentMatch.cs delete mode 100644 src/UI/Main/CSConsole/Lexer/KeywordMatch.cs delete mode 100644 src/UI/Main/CSConsole/Lexer/Matcher.cs delete mode 100644 src/UI/Main/CSConsole/Lexer/NumberMatch.cs delete mode 100644 src/UI/Main/CSConsole/Lexer/StringMatch.cs delete mode 100644 src/UI/Main/CSConsole/Lexer/SymbolMatch.cs delete mode 100644 src/UI/Main/DebugConsole.cs delete mode 100644 src/UI/Main/Home/HomePage.cs delete mode 100644 src/UI/Main/Home/SceneExplorer.cs delete mode 100644 src/UI/Main/MainMenu.cs delete mode 100644 src/UI/Main/Options/OptionsPage.cs delete mode 100644 src/UI/Main/Search/SearchPage.cs create mode 100644 src/UI/Model/UIBehaviourModel.cs create mode 100644 src/UI/Model/UIModel.cs create mode 100644 src/UI/Panels/SceneExplorer.cs rename src/UI/{Main => Utility}/PanelDragger.cs (75%) create mode 100644 src/UI/Widgets/InfiniteScroll/ICell.cs create mode 100644 src/UI/Widgets/InfiniteScroll/IListDataSource.cs create mode 100644 src/UI/Widgets/InfiniteScroll/InfiniteScrollRect.cs create mode 100644 src/UI/Widgets/InfiniteScroll/UIExtensions.cs rename src/UI/{Utility => Widgets}/InputFieldScroller.cs (99%) rename src/UI/{Utility => Widgets}/PageHandler.cs (90%) rename src/UI/{Utility => Widgets}/SliderScrollbar.cs (83%) create mode 100644 src/UI/Widgets/TransformTree/CachedTransform.cs create mode 100644 src/UI/Widgets/TransformTree/TransformCell.cs create mode 100644 src/UI/Widgets/TransformTree/TransformTree.cs diff --git a/lib/UnityEngine.UI.dll b/lib/UnityEngine.UI.dll index 74933d59b04b6a0dda9d0007b2488289381dc4d7..cf7c37e0f2d65368f24f86259d0b6e17ded439b7 100644 GIT binary patch literal 245760 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%0AVgB?FMH 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 literal 217600 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

F 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%0AKM!^Y+wF45bV}@Z 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

(RAHw4w9UdFb z3!B2@!sEje!V|-jSp#3ia^aW4;cye${EM*m{Bj6~f0o@#6NFD9YK5q#RhlLTZ-19| zl&1sfQ*KY$$U1RjxPrO&FuGAWWmvn1+6tqd&}tCMK0^~^8(fzX9#3d_QtHn^Lc=Fh z<)M{oIHy03w1TkhUz4j+ER*xP{+y-VXo3s7{x!L$RLhj`=>8J+LkIDk=p+h`Q2dsr2b0vStdv5uNG=tvU#5B{d4HQG{rJGFMP6>eZ=@OlKOJ=NpzVy zPJWp$S1ZQ-m6pk zY^&krW}b4IT{ft+aMmKxjKRNfzNy;9GGCM`R>3ZSU4Tg&2n!$5N=xdcuPn7HQKK|U zlZKvToK!x=Ev!OQjASXnW&5@|)aM7SVq9rVIn0r->_3GBPco!XqGe{0Z1j?(BCF}i z(&{o;v-Rs$RToM#M3zuewIyacCj6IMSWDbVEGm|&UN-Q1RVC<>Uawp`q(~bDf+f~9 z$fda}g(ep1&KgQo>rk2})8te%tkBuDv{zoKL`{WHfkQ8{|2CRt?;Ri#b_4Un#*pz> z84Q)m=<3ncLmzsW1SYnXoDr)pneko`4 z?D+eT`1`Qv8F{8CNP9)iHA81-kd2lZ#cvboUPP*A zXQN|EB4=$FK0B*qqnpkdeO@*?Oq53k&v-5EFa|q8`W#yIhGB>G**Q^<0 z=7ji0$Xickqw7@AI?rX@0ClLCk79>ckeSDIJUL{QwV}og-;y(38CX-lC=1@%7f|+^ z4eLFpP0ID4N*o@h+i~zeM9$em=Zv1N42>?_MlH$h?6ujTRd;Px-xx*~7HQ|m^iZgb zOzS@qS75XZxTWOh$yqPwNvk%}l7-vJV{ImQWZ@2jR~S|$h-BFc3y{|%y}p#-O)i}O)JC0GQw2-T5=ulWDNWO@~ue#Hl=xErn==3iX_3cmHXK~@L!H(JNP@Za#)21XaYHUMMu z1CdLHQ{_mRmoqC`fzOn+|vDyz?w|sv{H2gmQE1)H?MZJJp7XE;E4bMnRvQb2# zcWE9zqmU8kM{w<}bCi4^7IW`2_gUt?$J|rqN-jdl zMakE!5{###_X60l
TAw7`+>_;h`0wCPEBV3_H5G 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 bDv49))lU8w4v_~D@UcpY{l(}1P6Gc1Ur5`- diff --git a/lib/publicized_assemblies/UnityEngine.UI.dll b/lib/publicized_assemblies/UnityEngine.UI.dll new file mode 100644 index 0000000000000000000000000000000000000000..838d63b251671135f81d6210e1c1cd7e8f34611b GIT binary patch literal 238080 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�cGmYtv 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

L8jx{Q)_N(kZHKe)<{2t^ua#1 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%0Dr#RG8OKMD(UzPs-ZSwR7M9^4dH4EA$I~ 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 Tga*)ZhLY$ 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 literal 0 HcmV?d00001 diff --git a/src/Core/CSharp/ScriptInteraction.cs b/src/Core/CSharp/ScriptInteraction.cs index 0c71220..24804c8 100644 --- a/src/Core/CSharp/ScriptInteraction.cs +++ b/src/Core/CSharp/ScriptInteraction.cs @@ -5,9 +5,6 @@ using UnityEngine; using System.Collections.Generic; using System.Linq; using UnityExplorer.Core.Runtime; -using UnityExplorer.UI.Main.CSConsole; -using UnityExplorer.UI.Main.Home; -using UnityExplorer.UI.Inspectors; namespace UnityExplorer.Core.CSharp { @@ -23,45 +20,45 @@ namespace UnityExplorer.Core.CSharp RuntimeProvider.Instance.StartCoroutine(ienumerator); } - public static void AddUsing(string directive) - { - CSharpConsole.Instance.AddUsing(directive); - } + //public static void AddUsing(string directive) + //{ + // CSharpConsole.Instance.AddUsing(directive); + //} - public static void GetUsing() - { - ExplorerCore.Log(CSharpConsole.Instance.Evaluator.GetUsing()); - } + //public static void GetUsing() + //{ + // ExplorerCore.Log(CSharpConsole.Instance.Evaluator.GetUsing()); + //} - public static void Reset() - { - CSharpConsole.Instance.ResetConsole(); - } + //public static void Reset() + //{ + // CSharpConsole.Instance.ResetConsole(); + //} - public static object CurrentTarget() - { - return InspectorManager.Instance?.m_activeInspector?.Target; - } + //public static object CurrentTarget() + //{ + // return InspectorManager.Instance?.m_activeInspector?.Target; + //} - public static object[] AllTargets() - { - int count = InspectorManager.Instance?.m_currentInspectors.Count ?? 0; - object[] ret = new object[count]; - for (int i = 0; i < count; i++) - { - ret[i] = InspectorManager.Instance?.m_currentInspectors[i].Target; - } - return ret; - } + //public static object[] AllTargets() + //{ + // int count = InspectorManager.Instance?.m_currentInspectors.Count ?? 0; + // object[] ret = new object[count]; + // for (int i = 0; i < count; i++) + // { + // ret[i] = InspectorManager.Instance?.m_currentInspectors[i].Target; + // } + // return ret; + //} - public static void Inspect(object obj) - { - InspectorManager.Instance.Inspect(obj); - } + //public static void Inspect(object obj) + //{ + // InspectorManager.Instance.Inspect(obj); + //} - public static void Inspect(Type type) - { - InspectorManager.Instance.Inspect(type); - } + //public static void Inspect(Type type) + //{ + // InspectorManager.Instance.Inspect(type); + //} } } \ No newline at end of file diff --git a/src/Core/CSharp/Suggestion.cs b/src/Core/CSharp/Suggestion.cs index 2bdd0dc..e452ff8 100644 --- a/src/Core/CSharp/Suggestion.cs +++ b/src/Core/CSharp/Suggestion.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Reflection; using UnityEngine; using UnityExplorer.Core; -using UnityExplorer.UI.Main.CSConsole; namespace UnityExplorer.Core.CSharp { @@ -49,8 +48,8 @@ namespace UnityExplorer.Core.CSharp public static HashSet Namespaces => m_namespaces ?? GetNamespaces(); private static HashSet m_namespaces; - public static HashSet Keywords => m_keywords ?? (m_keywords = new HashSet(CSLexerHighlighter.validKeywordMatcher.Keywords)); - private static HashSet m_keywords; + public static HashSet Keywords => throw new NotImplementedException("TODO!"); // m_keywords ?? (m_keywords = new HashSet(CSLexerHighlighter.validKeywordMatcher.Keywords)); + //private static HashSet m_keywords; private static readonly Color keywordColor = new Color(80f / 255f, 150f / 255f, 215f / 255f); diff --git a/src/Core/Config/ConfigManager.cs b/src/Core/Config/ConfigManager.cs index 44d1ee0..c487c36 100644 --- a/src/Core/Config/ConfigManager.cs +++ b/src/Core/Config/ConfigManager.cs @@ -6,8 +6,6 @@ using System.Linq; using System.Runtime.InteropServices; using System.Text; using UnityEngine; -using UnityExplorer.UI.Main; -using UnityExplorer.UI.Main.Home; namespace UnityExplorer.Core.Config { @@ -19,7 +17,7 @@ namespace UnityExplorer.Core.Config public static ConfigElement Main_Menu_Toggle; public static ConfigElement Force_Unlock_Mouse; - public static ConfigElement Default_Tab; + //public static ConfigElement Default_Tab; public static ConfigElement Default_Page_Limit; public static ConfigElement Default_Output_Path; public static ConfigElement Log_Unity_Debug; @@ -42,10 +40,10 @@ namespace UnityExplorer.Core.Config Handler.LoadConfig(); - SceneExplorer.OnToggleShow += SceneExplorer_OnToggleShow; - PanelDragger.OnFinishResize += PanelDragger_OnFinishResize; - PanelDragger.OnFinishDrag += PanelDragger_OnFinishDrag; - DebugConsole.OnToggleShow += DebugConsole_OnToggleShow; + //SceneExplorer.OnToggleShow += SceneExplorer_OnToggleShow; + //PanelDragger.OnFinishResize += PanelDragger_OnFinishResize; + //PanelDragger.OnFinishDrag += PanelDragger_OnFinishDrag; + //DebugConsole.OnToggleShow += DebugConsole_OnToggleShow; InitConsoleCallback(); } @@ -66,9 +64,9 @@ namespace UnityExplorer.Core.Config "Should UnityExplorer be hidden on startup?", false); - Default_Tab = new ConfigElement("Default Tab", - "The default menu page when starting the game.", - MenuPages.Home); + //Default_Tab = new ConfigElement("Default Tab", + // "The default menu page when starting the game.", + // MenuPages.Home); Log_Unity_Debug = new ConfigElement("Log Unity Debug", "Should UnityEngine.Debug.Log messages be printed to UnityExplorer's log?", diff --git a/src/Core/Input/CursorUnlocker.cs b/src/Core/Input/CursorUnlocker.cs index ab5dc9a..6ef9bba 100644 --- a/src/Core/Input/CursorUnlocker.cs +++ b/src/Core/Input/CursorUnlocker.cs @@ -1,6 +1,5 @@ using System; using UnityEngine; -using UnityExplorer.Core.Unity; using UnityEngine.EventSystems; using UnityExplorer.Core.Input; using BF = System.Reflection.BindingFlags; diff --git a/src/Core/Input/InputSystem.cs b/src/Core/Input/InputSystem.cs index 5fcf2d5..3f6ac33 100644 --- a/src/Core/Input/InputSystem.cs +++ b/src/Core/Input/InputSystem.cs @@ -1,11 +1,9 @@ using System; using System.Reflection; -using UnityExplorer.Core.Unity; using UnityEngine; using UnityEngine.EventSystems; using UnityExplorer.UI; using System.Collections.Generic; -using UnityExplorer.UI.Inspectors; using System.Linq; namespace UnityExplorer.Core.Input @@ -164,13 +162,13 @@ namespace UnityExplorer.Core.Input var assetType = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.InputActionAsset"); m_newInputModule = RuntimeProvider.Instance.AddComponent(UIManager.CanvasRoot, TInputSystemUIInputModule); var asset = RuntimeProvider.Instance.CreateScriptable(assetType) - .Cast(assetType); + .TryCast(assetType); inputExtensions = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.InputActionSetupExtensions"); var addMap = inputExtensions.GetMethod("AddActionMap", new Type[] { assetType, typeof(string) }); var map = addMap.Invoke(null, new object[] { asset, "UI" }) - .Cast(ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.InputActionMap")); + .TryCast(ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.InputActionMap")); CreateAction(map, "point", new[] { "/position" }, "point"); CreateAction(map, "click", new[] { "/leftButton" }, "leftClick"); @@ -191,22 +189,22 @@ namespace UnityExplorer.Core.Input var inputActionType = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.InputAction"); var addAction = inputExtensions.GetMethod("AddAction"); var action = addAction.Invoke(null, new object[] { map, actionName, default, null, null, null, null, null }) - .Cast(inputActionType); + .TryCast(inputActionType); var addBinding = inputExtensions.GetMethod("AddBinding", new Type[] { inputActionType, typeof(string), typeof(string), typeof(string), typeof(string) }); foreach (string binding in bindings) - addBinding.Invoke(null, new object[] { action.Cast(inputActionType), binding, null, null, null }); + addBinding.Invoke(null, new object[] { action.TryCast(inputActionType), binding, null, null, null }); var refType = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.InputActionReference"); var inputRef = refType.GetMethod("Create") .Invoke(null, new object[] { action }) - .Cast(refType); + .TryCast(refType); TInputSystemUIInputModule .GetProperty(propertyName) - .SetValue(m_newInputModule.Cast(TInputSystemUIInputModule), inputRef, null); + .SetValue(m_newInputModule.TryCast(TInputSystemUIInputModule), inputRef, null); } public void ActivateModule() diff --git a/src/Core/Input/LegacyInput.cs b/src/Core/Input/LegacyInput.cs index 65d4ad1..8463cc4 100644 --- a/src/Core/Input/LegacyInput.cs +++ b/src/Core/Input/LegacyInput.cs @@ -1,6 +1,5 @@ using System; using System.Reflection; -using UnityExplorer.Core.Unity; using UnityEngine; using UnityEngine.EventSystems; using UnityExplorer.UI; diff --git a/src/Core/ReflectionUtility.cs b/src/Core/ReflectionUtility.cs index b7e8a8f..6e872b1 100644 --- a/src/Core/ReflectionUtility.cs +++ b/src/Core/ReflectionUtility.cs @@ -13,6 +13,36 @@ namespace UnityExplorer { public const BF AllFlags = BF.Public | BF.Instance | BF.NonPublic | BF.Static; + public static void Test() + { + AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(AssemblyResolver); + } + + private static Assembly AssemblyResolver(object sender, ResolveEventArgs args) + { + if (args.Name.StartsWith("UnityExplorer")) + return typeof(ExplorerCore).Assembly; + + return null; + } + + public static bool ValueEqual(this T objA, T objB) + { + return (objA == null && objB == null) || (objA != null && objA.Equals(objB)); + } + + public static bool ReferenceEqual(this object objA, object objB) + { + if (objA.TryCast() is UnityEngine.Object unityA) + { + var unityB = objB.TryCast(); + if (unityB && unityA.m_CachedPtr == unityB.m_CachedPtr) + return true; + } + + return object.ReferenceEquals(objA, objB); + } + ///

/// Helper for IL2CPP to get the underlying true Type (Unhollowed) of the object. /// @@ -31,7 +61,7 @@ namespace UnityExplorer /// /// The object to cast /// The object, cast to the underlying Type if possible, otherwise the original object. - public static object Cast(this object obj) + public static object TryCast(this object obj) => ReflectionProvider.Instance.Cast(obj, GetActualType(obj)); /// @@ -40,7 +70,7 @@ namespace UnityExplorer /// The object to cast /// The Type to cast to /// The object, cast to the Type provided if possible, otherwise the original object. - public static object Cast(this object obj, Type castTo) + public static object TryCast(this object obj, Type castTo) => ReflectionProvider.Instance.Cast(obj, castTo); public static T TryCast(this object obj) diff --git a/src/Core/Runtime/Il2Cpp/Il2CppProvider.cs b/src/Core/Runtime/Il2Cpp/Il2CppProvider.cs index 76b1a3a..637bc71 100644 --- a/src/Core/Runtime/Il2Cpp/Il2CppProvider.cs +++ b/src/Core/Runtime/Il2Cpp/Il2CppProvider.cs @@ -21,6 +21,7 @@ namespace UnityExplorer.Core.Runtime.Il2Cpp { public override void Initialize() { + ExplorerCore.Context = RuntimeContext.IL2CPP; Reflection = new Il2CppReflection(); TextureUtil = new Il2CppTextureUtil(); } @@ -80,18 +81,6 @@ namespace UnityExplorer.Core.Runtime.Il2Cpp list.AddRange(il2cppList.ToArray()); } - public override bool IsReferenceEqual(object a, object b) - { - if (a.TryCast() is UnityEngine.Object ua) - { - var ub = b.TryCast(); - if (ub && ua.m_CachedPtr == ub.m_CachedPtr) - return true; - } - - return base.IsReferenceEqual(a, b); - } - // LayerMask.LayerToName internal delegate IntPtr d_LayerToName(int layer); @@ -117,9 +106,6 @@ namespace UnityExplorer.Core.Runtime.Il2Cpp return new Il2CppReferenceArray(iCall.Invoke(Il2CppType.From(type).Pointer)); } - public override int GetSceneHandle(Scene scene) - => scene.handle; - // Scene.GetRootGameObjects(); internal delegate void d_GetRootGameObjects(int handle, IntPtr list); @@ -250,41 +236,31 @@ namespace UnityExplorer.Core.Runtime.Il2Cpp ExplorerCore.Log(ex); } } - - public override void FindSingleton(string[] possibleNames, Type type, BF flags, List instances) - { - PropertyInfo pi; - foreach (var name in possibleNames) - { - pi = type.GetProperty(name, flags); - if (pi != null) - { - var instance = pi.GetValue(null, null); - if (instance != null) - { - instances.Add(instance); - return; - } - } - } - - base.FindSingleton(possibleNames, type, flags, instances); - } } } public static class Il2CppExtensions { - public static void AddListener(this UnityEvent action, Action listener) + public static void AddListenerEx(this UnityEvent action, Action listener) { action.AddListener(listener); } - public static void AddListener(this UnityEvent action, Action listener) + public static void AddListenerEx(this UnityEvent action, Action listener) { action.AddListener(listener); } + public static void RemoveListener(this UnityEvent action, Action listener) + { + action.RemoveListener(listener); + } + + public static void RemoveListener(this UnityEvent action, Action listener) + { + action.RemoveListener(listener); + } + public static void SetChildControlHeight(this HorizontalOrVerticalLayoutGroup group, bool value) => group.childControlHeight = value; public static void SetChildControlWidth(this HorizontalOrVerticalLayoutGroup group, bool value) => group.childControlWidth = value; } diff --git a/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs b/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs index 8d10743..a253b30 100644 --- a/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs +++ b/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs @@ -412,7 +412,7 @@ namespace UnityExplorer.Core.Runtime.Il2Cpp var keyList = new List(); var valueList = new List(); - var hashtable = value.Cast(typeof(Il2CppSystem.Collections.Hashtable)) as Il2CppSystem.Collections.Hashtable; + var hashtable = value.TryCast(typeof(Il2CppSystem.Collections.Hashtable)) as Il2CppSystem.Collections.Hashtable; if (hashtable != null) { @@ -465,6 +465,26 @@ namespace UnityExplorer.Core.Runtime.Il2Cpp } } + public override void FindSingleton(string[] possibleNames, Type type, BF flags, List instances) + { + PropertyInfo pi; + foreach (var name in possibleNames) + { + pi = type.GetProperty(name, flags); + if (pi != null) + { + var instance = pi.GetValue(null, null); + if (instance != null) + { + instances.Add(instance); + return; + } + } + } + + base.FindSingleton(possibleNames, type, flags, instances); + } + // ~~~~~~~~~~ not used ~~~~~~~~~~~~ // cached il2cpp unbox methods diff --git a/src/Core/Runtime/Mono/MonoProvider.cs b/src/Core/Runtime/Mono/MonoProvider.cs index 3501634..bf6a918 100644 --- a/src/Core/Runtime/Mono/MonoProvider.cs +++ b/src/Core/Runtime/Mono/MonoProvider.cs @@ -19,6 +19,7 @@ namespace UnityExplorer.Core.Runtime.Mono { public override void Initialize() { + ExplorerCore.Context = RuntimeContext.Mono; Reflection = new MonoReflection(); TextureUtil = new MonoTextureUtil(); @@ -66,12 +67,12 @@ namespace UnityExplorer.Core.Runtime.Mono public override UnityEngine.Object[] FindObjectsOfTypeAll(Type type) => Resources.FindObjectsOfTypeAll(type); - private static readonly FieldInfo fi_Scene_handle = typeof(Scene).GetField("m_Handle", ReflectionUtility.AllFlags); + //private static readonly FieldInfo fi_Scene_handle = typeof(Scene).GetField("m_Handle", ReflectionUtility.AllFlags); - public override int GetSceneHandle(Scene scene) - { - return (int)fi_Scene_handle.GetValue(scene); - } + //public override int GetSceneHandle(Scene scene) + //{ + // return (int)fi_Scene_handle.GetValue(scene); + //} public override GameObject[] GetRootGameObjects(Scene scene) { @@ -125,6 +126,16 @@ public static class MonoExtensions _event.AddListener(new UnityAction(listener)); } + public static void RemoveListener(this UnityEvent _event, Action listener) + { + _event.RemoveListener(new UnityAction(listener)); + } + + public static void RemoveListener(this UnityEvent _event, Action listener) + { + _event.RemoveListener(new UnityAction(listener)); + } + public static void Clear(this StringBuilder sb) { sb.Remove(0, sb.Length); diff --git a/src/Core/Runtime/ReflectionProvider.cs b/src/Core/Runtime/ReflectionProvider.cs index 6ddd10b..80c9b84 100644 --- a/src/Core/Runtime/ReflectionProvider.cs +++ b/src/Core/Runtime/ReflectionProvider.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Text; namespace UnityExplorer.Core.Runtime @@ -38,5 +39,24 @@ namespace UnityExplorer.Core.Runtime public virtual IEnumerable EnumerateEnumerable(object value) => null; + + public virtual void FindSingleton(string[] s_instanceNames, Type type, BindingFlags flags, List instances) + { + // Look for a typical Instance backing field. + FieldInfo fi; + foreach (var name in s_instanceNames) + { + fi = type.GetField(name, flags); + if (fi != null) + { + var instance = fi.GetValue(null); + if (instance != null) + { + instances.Add(instance); + return; + } + } + } + } } } diff --git a/src/Core/Runtime/RuntimeContext.cs b/src/Core/Runtime/RuntimeContext.cs new file mode 100644 index 0000000..1dbd7fe --- /dev/null +++ b/src/Core/Runtime/RuntimeContext.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UnityExplorer.Core.Runtime +{ + public enum RuntimeContext + { + Mono, + IL2CPP + } +} diff --git a/src/Core/Runtime/RuntimeProvider.cs b/src/Core/Runtime/RuntimeProvider.cs index 7715676..60cb6f9 100644 --- a/src/Core/Runtime/RuntimeProvider.cs +++ b/src/Core/Runtime/RuntimeProvider.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Reflection; using System.Text; using UnityEngine; using UnityEngine.EventSystems; @@ -42,7 +41,7 @@ namespace UnityExplorer public abstract void Update(); - public virtual bool IsReferenceEqual(object a, object b) => ReferenceEquals(a, b); + //public virtual bool IsReferenceEqual(object a, object b) => ReferenceEquals(a, b); // Unity API handlers @@ -56,7 +55,7 @@ namespace UnityExplorer public abstract void GraphicRaycast(GraphicRaycaster raycaster, PointerEventData data, List list); - public abstract int GetSceneHandle(Scene scene); + //public abstract int GetSceneHandle(Scene scene); public abstract GameObject[] GetRootGameObjects(Scene scene); @@ -66,24 +65,5 @@ namespace UnityExplorer public abstract void SetColorBlock(Selectable selectable, Color? normal = null, Color? highlighted = null, Color? pressed = null, Color? disabled = null); - - public virtual void FindSingleton(string[] s_instanceNames, Type type, BindingFlags flags, List instances) - { - // Look for a typical Instance backing field. - FieldInfo fi; - foreach (var name in s_instanceNames) - { - fi = type.GetField(name, flags); - if (fi != null) - { - var instance = fi.GetValue(null); - if (instance != null) - { - instances.Add(instance); - return; - } - } - } - } } } diff --git a/src/Core/SceneHandler.cs b/src/Core/SceneHandler.cs new file mode 100644 index 0000000..a10c08f --- /dev/null +++ b/src/Core/SceneHandler.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace UnityExplorer.Core +{ + public static class SceneHandler + { + /// + /// The currently inspected Scene. + /// + public static Scene? SelectedScene + { + get => m_selectedScene; + internal set + { + if (m_selectedScene != null && m_selectedScene?.handle == value?.handle) + return; + m_selectedScene = value; + OnInspectedSceneChanged?.Invoke((Scene)m_selectedScene); + } + } + private static Scene? m_selectedScene; + + /// + /// The GameObjects in the currently inspected scene. + /// + public static ReadOnlyCollection CurrentRootObjects => new ReadOnlyCollection(rootObjects); + private static GameObject[] rootObjects = new GameObject[0]; + + /// + /// All currently loaded Scenes. + /// + public static ReadOnlyCollection LoadedScenes => new ReadOnlyCollection(allLoadedScenes); + private static readonly List allLoadedScenes = new List(); + + /// + /// The names of all scenes in the build settings, if they could be retrieved. + /// + public static ReadOnlyCollection AllSceneNames => new ReadOnlyCollection(allScenesInBuild); + private static readonly List allScenesInBuild = new List(); + + /// + /// Whether or not we successfuly retrieved the names of the scenes in the build settings. + /// + public static bool WasAbleToGetScenesInBuild => gotAllScenesInBuild; + private static bool gotAllScenesInBuild = true; + + /// + /// Invoked when the currently inspected Scene changes. The argument is the new scene. + /// + public static event Action OnInspectedSceneChanged; + + /// + /// Invoked whenever the list of currently loaded Scenes changes. The argument contains all loaded scenes after the change. + /// + public static event Action> OnLoadedScenesChanged; + + /// + /// Equivalent to + 1, to include 'DontDestroyOnLoad'. + /// + public static int LoadedSceneCount => SceneManager.sceneCount + 1; + + // Cached on startup, will never change during runtime (and generally doesn't change between Unity versions either) + + internal static Scene DontDestroyScene => DontDestroyMe.scene; + internal static int DontDestroyHandle => DontDestroyScene.handle; + + internal static GameObject DontDestroyMe + { + get + { + if (!dontDestroyObject) + { + dontDestroyObject = new GameObject("DontDestroyMe"); + GameObject.DontDestroyOnLoad(dontDestroyObject); + } + return dontDestroyObject; + } + } + private static GameObject dontDestroyObject; + + internal static Scene AssetScene => AssetObject.scene; + internal static int AssetHandle => AssetScene.handle; + + internal static GameObject AssetObject + { + get + { + if (!assetObject) + { + assetObject = RuntimeProvider.Instance.FindObjectsOfTypeAll(typeof(GameObject)) + .First(it => !it.TryCast().scene.IsValid()) + .TryCast(); + } + return assetObject; + } + } + private static GameObject assetObject; + + internal static void Init() + { + // Try to get all scenes in the build settings. This may not work. + try + { + Type sceneUtil = ReflectionUtility.GetTypeByName("UnityEngine.SceneManagement.SceneUtility"); + if (sceneUtil == null) + throw new Exception("This version of Unity does not ship with the 'SceneUtility' class, or it was not unstripped."); + + var method = sceneUtil.GetMethod("GetScenePathByBuildIndex", ReflectionUtility.AllFlags); + int sceneCount = SceneManager.sceneCountInBuildSettings; + for (int i = 0; i < sceneCount; i++) + { + var scenePath = (string)method.Invoke(null, new object[] { i }); + allScenesInBuild.Add(scenePath); + } + } + catch (Exception ex) + { + gotAllScenesInBuild = false; + ExplorerCore.Log($"Unable to generate list of all Scenes in the build: {ex}"); + } + } + + internal static void Update() + { + int curHandle = SelectedScene?.handle ?? -1; + // DontDestroyOnLoad always exists, so default to true if our curHandle is that handle. + // otherwise we will check while iterating. + bool inspectedExists = curHandle == DontDestroyHandle || curHandle == AssetHandle; + + // Quick sanity check if the loaded scenes changed + bool anyChange = LoadedSceneCount != allLoadedScenes.Count; + // otherwise keep a lookup table of the previous handles to check if the list changed at all. + HashSet previousHandles = null; + if (!anyChange) + previousHandles = new HashSet(allLoadedScenes.Select(it => it.handle)); + + allLoadedScenes.Clear(); + + for (int i = 0; i < SceneManager.sceneCount; i++) + { + Scene scene = SceneManager.GetSceneAt(i); + if (scene == default || scene.handle == -1) + continue; + + // If no changes yet, ensure the previous list contained this handle. + if (!anyChange && !previousHandles.Contains(scene.handle)) + anyChange = true; + + // If we have not yet confirmed inspectedExists, check if this scene is our currently inspected one. + if (curHandle != -1 && !inspectedExists && scene.handle == curHandle) + inspectedExists = true; + + allLoadedScenes.Add(scene); + } + + // Always add the DontDestroyOnLoad scene and the "none" scene. + allLoadedScenes.Add(DontDestroyScene); + allLoadedScenes.Add(AssetScene); + + // Default to first scene if none selected or previous selection no longer exists. + if (!inspectedExists) + { + SelectedScene = allLoadedScenes.First(); + } + + // Notify on the list changing at all + if (anyChange) + { + OnLoadedScenesChanged?.Invoke(LoadedScenes); + } + + // Finally, update the root objects list. + if (SelectedScene != null && ((Scene)SelectedScene).IsValid()) + rootObjects = RuntimeProvider.Instance.GetRootGameObjects((Scene)SelectedScene); + else + { + var allObjects = RuntimeProvider.Instance.FindObjectsOfTypeAll(typeof(GameObject)); + var list = new List(); + foreach (var obj in allObjects) + { + if (obj.TryCast() is GameObject go && !go.scene.IsValid() && go.transform.parent == null) + list.Add(go); + } + rootObjects = list.ToArray(); + } + } + } +} diff --git a/src/Core/Search/SearchProvider.cs b/src/Core/Search/SearchProvider.cs index a21f20a..bd198f9 100644 --- a/src/Core/Search/SearchProvider.cs +++ b/src/Core/Search/SearchProvider.cs @@ -5,8 +5,6 @@ using System.Reflection; using System.Text; using UnityEngine; using UnityExplorer.Core.Runtime; -using UnityExplorer.UI.Main; -using UnityExplorer.UI.Main.Search; namespace UnityExplorer.Core.Search { @@ -68,7 +66,7 @@ namespace UnityExplorer.Core.Search if (!string.IsNullOrEmpty(nameFilter) && !type.FullName.ToLower().Contains(nameFilter)) continue; - RuntimeProvider.Instance.FindSingleton(s_instanceNames, type, flags, instances); + ReflectionProvider.Instance.FindSingleton(s_instanceNames, type, flags, instances); } catch { } } @@ -78,7 +76,7 @@ namespace UnityExplorer.Core.Search } internal static object[] UnityObjectSearch(string input, string customTypeInput, SearchContext context, - ChildFilter childFilter, SceneFilter sceneFilter) + ChildFilter childFilter, SceneFilter sceneFilter, string sceneName = null) { Type searchType = null; switch (context) @@ -134,7 +132,8 @@ namespace UnityExplorer.Core.Search if (sceneFilter == SceneFilter.DontDestroyOnLoad) sceneFilterString = "DontDestroyOnLoad"; else if (sceneFilter == SceneFilter.Explicit) - sceneFilterString = SearchPage.Instance.m_sceneDropdown.options[SearchPage.Instance.m_sceneDropdown.value].text; + //sceneFilterString = SearchPage.Instance.m_sceneDropdown.options[SearchPage.Instance.m_sceneDropdown.value].text; + sceneFilterString = sceneName; } foreach (var obj in allObjects) diff --git a/src/Core/TestClass.cs b/src/Core/Tests/TestClass.cs similarity index 89% rename from src/Core/TestClass.cs rename to src/Core/Tests/TestClass.cs index b9747c9..1923855 100644 --- a/src/Core/TestClass.cs +++ b/src/Core/Tests/TestClass.cs @@ -3,11 +3,11 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace UnityExplorer +namespace UnityExplorer.Tests { public static class TestClass { - public static UI.Main.PanelDragger.ResizeTypes flags = UI.Main.PanelDragger.ResizeTypes.NONE; + //public static UI.Main.PanelDragger.ResizeTypes flags = UI.Main.PanelDragger.ResizeTypes.NONE; #if CPP public static string testStringOne = "Test"; diff --git a/src/Core/Unity/UnityHelpers.cs b/src/Core/Unity/UnityHelpers.cs index fc401c1..feabcea 100644 --- a/src/Core/Unity/UnityHelpers.cs +++ b/src/Core/Unity/UnityHelpers.cs @@ -4,9 +4,11 @@ using System.Globalization; using System.Linq; using System.Text; using UnityEngine; +using UnityEngine.Events; using Object = UnityEngine.Object; -namespace UnityExplorer.Core.Unity +// Project-wide namespace for accessibility +namespace UnityExplorer { public static class UnityHelpers { diff --git a/src/ExplorerCore.cs b/src/ExplorerCore.cs index 47b7cff..dd72b26 100644 --- a/src/ExplorerCore.cs +++ b/src/ExplorerCore.cs @@ -2,12 +2,11 @@ using System.Collections; using System.IO; using UnityEngine; +using UnityExplorer.Core; using UnityExplorer.Core.Config; using UnityExplorer.Core.Input; using UnityExplorer.Core.Runtime; using UnityExplorer.UI; -using UnityExplorer.UI.Inspectors; -using UnityExplorer.UI.Main; namespace UnityExplorer { @@ -21,10 +20,14 @@ namespace UnityExplorer public static ExplorerCore Instance { get; private set; } public static IExplorerLoader Loader { get; private set; } + public static RuntimeContext Context { get; internal set; } // Prevent using ctor, must use Init method. private ExplorerCore() { } + /// + /// Initialize UnityExplorer with the provided Loader implementation. + /// public static void Init(IExplorerLoader loader) { if (Instance != null) @@ -42,7 +45,7 @@ namespace UnityExplorer ConfigManager.Init(Loader.ConfigHandler); RuntimeProvider.Init(); - + SceneHandler.Init(); InputManager.Init(); Log($"{NAME} {VERSION} initialized."); @@ -61,11 +64,15 @@ namespace UnityExplorer yield return null; Log($"Creating UI, after delay of {delay} second(s)."); - UIManager.Init(); + + UIManager.InitUI(); //InspectorManager.Instance.Inspect(typeof(TestClass)); } + /// + /// Should be called once per frame. + /// public static void Update() { RuntimeProvider.Instance.Update(); @@ -73,6 +80,8 @@ namespace UnityExplorer UIManager.Update(); } + #region LOGGING + public static void Log(object message) => Log(message, LogType.Log, false); @@ -94,20 +103,22 @@ namespace UnityExplorer case LogType.Assert: case LogType.Log: Loader.OnLogMessage(log); - DebugConsole.Log(log, Color.white); + //DebugConsole.Log(log, Color.white); break; case LogType.Warning: Loader.OnLogWarning(log); - DebugConsole.Log(log, Color.yellow); + //DebugConsole.Log(log, Color.yellow); break; case LogType.Error: case LogType.Exception: Loader.OnLogError(log); - DebugConsole.Log(log, Color.red); + //DebugConsole.Log(log, Color.red); break; } } + + #endregion } } diff --git a/src/UI/CacheObject/CacheConfigEntry.cs b/src/UI/CacheObject/CacheConfigEntry.cs deleted file mode 100644 index ca27b2e..0000000 --- a/src/UI/CacheObject/CacheConfigEntry.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Config; -using UnityExplorer.UI.InteractiveValues; - -namespace UnityExplorer.UI.CacheObject -{ - public class CacheConfigEntry : CacheObjectBase - { - public IConfigElement RefConfig { get; } - - public override Type FallbackType => RefConfig.ElementType; - - public override bool HasEvaluated => true; - public override bool HasParameters => false; - public override bool IsMember => false; - public override bool CanWrite => true; - - public CacheConfigEntry(IConfigElement config, GameObject parent) - { - RefConfig = config; - - m_parentContent = parent; - - config.OnValueChangedNotify += () => { UpdateValue(); }; - - CreateIValue(config.BoxedValue, config.ElementType); - } - - public override void CreateIValue(object value, Type fallbackType) - { - IValue = InteractiveValue.Create(value, fallbackType); - IValue.Owner = this; - IValue.m_mainContentParent = m_mainGroup; - IValue.m_subContentParent = this.m_subContent; - } - - public override void UpdateValue() - { - IValue.Value = RefConfig.BoxedValue; - - base.UpdateValue(); - } - - public override void SetValue() - { - RefConfig.BoxedValue = IValue.Value; - } - - internal GameObject m_mainGroup; - - internal override void ConstructUI() - { - base.ConstructUI(); - - m_mainGroup = UIFactory.CreateVerticalGroup(m_mainContent, "ConfigHolder", true, false, true, true, 5, new Vector4(2, 2, 2, 2)); - - var horiGroup = UIFactory.CreateHorizontalGroup(m_mainGroup, "ConfigEntryHolder", false, false, true, true, childAlignment: TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(horiGroup, minHeight: 30, flexibleHeight: 0); - - // config entry label - - var configLabel = UIFactory.CreateLabel(horiGroup, "ConfigLabel", this.RefConfig.Name, TextAnchor.MiddleLeft); - var leftRect = configLabel.GetComponent(); - leftRect.anchorMin = Vector2.zero; - leftRect.anchorMax = Vector2.one; - leftRect.offsetMin = Vector2.zero; - leftRect.offsetMax = Vector2.zero; - leftRect.sizeDelta = Vector2.zero; - UIFactory.SetLayoutElement(configLabel.gameObject, minWidth: 250, minHeight: 25, flexibleWidth: 0, flexibleHeight: 0); - - // Default button - - var defaultButton = UIFactory.CreateButton(horiGroup, - "RevertDefaultButton", - "Default", - () => { RefConfig.RevertToDefaultValue(); }, - new Color(0.3f, 0.3f, 0.3f)); - UIFactory.SetLayoutElement(defaultButton.gameObject, minWidth: 80, minHeight: 22, flexibleWidth: 0); - - // Description label - - var desc = UIFactory.CreateLabel(m_mainGroup, "Description", $"{RefConfig.Description}", TextAnchor.MiddleLeft, Color.grey); - UIFactory.SetLayoutElement(desc.gameObject, minWidth: 250, minHeight: 20, flexibleWidth: 9999, flexibleHeight: 0); - - // IValue - - if (IValue != null) - { - IValue.m_mainContentParent = m_mainGroup; - IValue.m_subContentParent = this.m_subContent; - } - - // makes the subcontent look nicer - m_subContent.transform.SetParent(m_mainGroup.transform, false); - } - } -} diff --git a/src/UI/CacheObject/CacheEnumerated.cs b/src/UI/CacheObject/CacheEnumerated.cs deleted file mode 100644 index 97fae07..0000000 --- a/src/UI/CacheObject/CacheEnumerated.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityExplorer.UI; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.UI.InteractiveValues; - -namespace UnityExplorer.UI.CacheObject -{ - public class CacheEnumerated : CacheObjectBase - { - public override Type FallbackType => ParentEnumeration.m_baseEntryType; - public override bool CanWrite => RefIList != null && ParentEnumeration.Owner.CanWrite; - - public int Index { get; set; } - public IList RefIList { get; set; } - public InteractiveEnumerable ParentEnumeration { get; set; } - - public CacheEnumerated(int index, InteractiveEnumerable parentEnumeration, IList refIList, GameObject parentContent) - { - this.ParentEnumeration = parentEnumeration; - this.Index = index; - this.RefIList = refIList; - this.m_parentContent = parentContent; - } - - public override void CreateIValue(object value, Type fallbackType) - { - IValue = InteractiveValue.Create(value, fallbackType); - IValue.Owner = this; - } - - public override void SetValue() - { - RefIList[Index] = IValue.Value; - ParentEnumeration.Value = RefIList; - - ParentEnumeration.Owner.SetValue(); - } - - internal override void ConstructUI() - { - base.ConstructUI(); - - var rowObj = UIFactory.CreateHorizontalGroup(m_mainContent, "CacheEnumeratedGroup", false, true, true, true, 0, new Vector4(0,0,5,2), - new Color(1, 1, 1, 0)); - - var indexLabel = UIFactory.CreateLabel(rowObj, "IndexLabel", $"{this.Index}:", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(indexLabel.gameObject, minWidth: 20, flexibleWidth: 30, minHeight: 25); - - IValue.m_mainContentParent = rowObj; - } - } -} diff --git a/src/UI/CacheObject/CacheField.cs b/src/UI/CacheObject/CacheField.cs deleted file mode 100644 index d3f5160..0000000 --- a/src/UI/CacheObject/CacheField.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Reflection; -using UnityExplorer.UI; -using UnityEngine; - -namespace UnityExplorer.UI.CacheObject -{ - public class CacheField : CacheMember - { - public override bool IsStatic => (MemInfo as FieldInfo).IsStatic; - - public override Type FallbackType => (MemInfo as FieldInfo).FieldType; - - public CacheField(FieldInfo fieldInfo, object declaringInstance, GameObject parent) : base(fieldInfo, declaringInstance, parent) - { - CreateIValue(null, fieldInfo.FieldType); - } - - public override void UpdateReflection() - { - var fi = MemInfo as FieldInfo; - IValue.Value = fi.GetValue(fi.IsStatic ? null : DeclaringInstance); - - m_evaluated = true; - ReflectionException = null; - } - - public override void SetValue() - { - var fi = MemInfo as FieldInfo; - fi.SetValue(fi.IsStatic ? null : DeclaringInstance, IValue.Value); - - if (this.ParentInspector?.ParentMember != null) - this.ParentInspector.ParentMember.SetValue(); - } - } -} diff --git a/src/UI/CacheObject/CacheMember.cs b/src/UI/CacheObject/CacheMember.cs deleted file mode 100644 index df5cbe8..0000000 --- a/src/UI/CacheObject/CacheMember.cs +++ /dev/null @@ -1,383 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.UI; -using UnityExplorer.Core.Unity; -using UnityExplorer.Core.Runtime; -using UnityExplorer.Core; -using UnityExplorer.UI.Utility; -using UnityExplorer.UI.InteractiveValues; -using UnityExplorer.UI.Inspectors.Reflection; - -namespace UnityExplorer.UI.CacheObject -{ - public abstract class CacheMember : CacheObjectBase - { - public override bool IsMember => true; - - public override Type FallbackType { get; } - - public ReflectionInspector ParentInspector { get; set; } - public MemberInfo MemInfo { get; set; } - public Type DeclaringType { get; set; } - public object DeclaringInstance { get; set; } - public virtual bool IsStatic { get; private set; } - - public string ReflectionException { get; set; } - - public override bool CanWrite => m_canWrite ?? GetCanWrite(); - private bool? m_canWrite; - - public override bool HasParameters => ParamCount > 0; - public virtual int ParamCount => m_arguments.Length; - public override bool HasEvaluated => m_evaluated; - public bool m_evaluated = false; - public bool m_isEvaluating; - public ParameterInfo[] m_arguments = new ParameterInfo[0]; - public string[] m_argumentInput = new string[0]; - - public string NameForFiltering => m_nameForFilter ?? (m_nameForFilter = $"{MemInfo.DeclaringType.Name}.{MemInfo.Name}".ToLower()); - private string m_nameForFilter; - - public string RichTextName => m_richTextName ?? GetRichTextName(); - private string m_richTextName; - - public CacheMember(MemberInfo memberInfo, object declaringInstance, GameObject parentContent) - { - MemInfo = memberInfo; - DeclaringType = memberInfo.DeclaringType; - DeclaringInstance = declaringInstance; - this.m_parentContent = parentContent; - - DeclaringInstance = ReflectionProvider.Instance.Cast(declaringInstance, DeclaringType); - } - - public static bool CanProcessArgs(ParameterInfo[] parameters) - { - foreach (var param in parameters) - { - var pType = param.ParameterType; - - if (pType.IsByRef && pType.HasElementType) - pType = pType.GetElementType(); - - if (pType != null && (pType.IsPrimitive || pType == typeof(string))) - continue; - else - return false; - } - return true; - } - - public override void CreateIValue(object value, Type fallbackType) - { - IValue = InteractiveValue.Create(value, fallbackType); - IValue.Owner = this; - IValue.m_mainContentParent = this.m_rightGroup; - IValue.m_subContentParent = this.m_subContent; - } - - public override void UpdateValue() - { - if (!HasParameters || m_isEvaluating) - { - try - { - Type baseType = ReflectionUtility.GetActualType(IValue.Value) ?? FallbackType; - - if (!ReflectionProvider.Instance.IsReflectionSupported(baseType)) - throw new Exception("Type not supported with reflection"); - - UpdateReflection(); - - if (IValue.Value != null) - IValue.Value = IValue.Value.Cast(ReflectionUtility.GetActualType(IValue.Value)); - } - catch (Exception e) - { - ReflectionException = e.ReflectionExToString(true); - } - } - - base.UpdateValue(); - } - - public abstract void UpdateReflection(); - - public override void SetValue() - { - // no implementation for base class - } - - public object[] ParseArguments() - { - if (m_arguments.Length < 1) - return new object[0]; - - var parsedArgs = new List(); - for (int i = 0; i < m_arguments.Length; i++) - { - var input = m_argumentInput[i]; - var type = m_arguments[i].ParameterType; - - if (type.IsByRef) - type = type.GetElementType(); - - if (!string.IsNullOrEmpty(input)) - { - if (type == typeof(string)) - { - parsedArgs.Add(input); - continue; - } - else - { - try - { - var arg = type.GetMethod("Parse", new Type[] { typeof(string) }) - .Invoke(null, new object[] { input }); - - parsedArgs.Add(arg); - continue; - } - catch - { - ExplorerCore.Log($"Could not parse input '{input}' for argument #{i} '{m_arguments[i].Name}' ({type.FullName})"); - } - } - } - - // No input, see if there is a default value. - if (m_arguments[i].IsOptional) - { - parsedArgs.Add(m_arguments[i].DefaultValue); - continue; - } - - // Try add a null arg I guess - parsedArgs.Add(null); - } - - return parsedArgs.ToArray(); - } - - private bool GetCanWrite() - { - if (MemInfo is FieldInfo fi) - m_canWrite = !(fi.IsLiteral && !fi.IsInitOnly); - else if (MemInfo is PropertyInfo pi) - m_canWrite = pi.CanWrite; - else - m_canWrite = false; - - return (bool)m_canWrite; - } - - private string GetRichTextName() - { - return m_richTextName = SignatureHighlighter.ParseFullSyntax(MemInfo.DeclaringType, false, MemInfo); - } - - #region UI - - internal float GetMemberLabelWidth(RectTransform scrollRect) - { - var textGenSettings = m_memLabelText.GetGenerationSettings(m_topRowRect.rect.size); - textGenSettings.scaleFactor = InputFieldScroller.canvasScaler.scaleFactor; - - var textGen = m_memLabelText.cachedTextGeneratorForLayout; - float preferredWidth = textGen.GetPreferredWidth(RichTextName, textGenSettings); - - float max = scrollRect.rect.width * 0.4f; - - if (preferredWidth > max) preferredWidth = max; - - return preferredWidth < 125f ? 125f : preferredWidth; - } - - internal void SetWidths(float labelWidth, float valueWidth) - { - m_leftLayout.preferredWidth = labelWidth; - m_rightLayout.preferredWidth = valueWidth; - } - - internal RectTransform m_topRowRect; - internal Text m_memLabelText; - internal GameObject m_leftGroup; - internal LayoutElement m_leftLayout; - internal GameObject m_rightGroup; - internal LayoutElement m_rightLayout; - - internal override void ConstructUI() - { - base.ConstructUI(); - - var topGroupObj = UIFactory.CreateHorizontalGroup(m_mainContent, "CacheMemberGroup", false, false, true, true, 10, new Vector4(0, 0, 3, 3), - new Color(1, 1, 1, 0)); - - m_topRowRect = topGroupObj.GetComponent(); - - UIFactory.SetLayoutElement(topGroupObj, minHeight: 25, flexibleHeight: 0, minWidth: 300, flexibleWidth: 5000); - - // left group - - m_leftGroup = UIFactory.CreateHorizontalGroup(topGroupObj, "LeftGroup", false, true, true, true, 4, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(m_leftGroup, minHeight: 25, flexibleHeight: 0, minWidth: 125, flexibleWidth: 200); - - // member label - - m_memLabelText = UIFactory.CreateLabel(m_leftGroup, "MemLabelText", RichTextName, TextAnchor.MiddleLeft); - m_memLabelText.horizontalOverflow = HorizontalWrapMode.Wrap; - var leftRect = m_memLabelText.GetComponent(); - leftRect.anchorMin = Vector2.zero; - leftRect.anchorMax = Vector2.one; - leftRect.offsetMin = Vector2.zero; - leftRect.offsetMax = Vector2.zero; - leftRect.sizeDelta = Vector2.zero; - m_leftLayout = m_memLabelText.gameObject.AddComponent(); - m_leftLayout.preferredWidth = 125; - m_leftLayout.minHeight = 25; - m_leftLayout.flexibleHeight = 100; - var labelFitter = m_memLabelText.gameObject.AddComponent(); - labelFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; - labelFitter.horizontalFit = ContentSizeFitter.FitMode.PreferredSize; - - // right group - - m_rightGroup = UIFactory.CreateVerticalGroup(topGroupObj, "RightGroup", false, true, true, true, 2, new Vector4(4,2,0,0), - new Color(1, 1, 1, 0)); - - m_rightLayout = m_rightGroup.AddComponent(); - m_rightLayout.minHeight = 25; - m_rightLayout.flexibleHeight = 480; - m_rightLayout.minWidth = 125; - m_rightLayout.flexibleWidth = 5000; - - ConstructArgInput(out GameObject argsHolder); - - ConstructEvaluateButtons(argsHolder); - - IValue.m_mainContentParent = m_rightGroup; - } - - internal void ConstructArgInput(out GameObject argsHolder) - { - argsHolder = null; - - if (HasParameters) - { - argsHolder = UIFactory.CreateVerticalGroup(m_rightGroup, "ArgsHolder", true, false, true, true, 4, new Color(1, 1, 1, 0)); - - if (this is CacheMethod cm && cm.GenericArgs.Length > 0) - cm.ConstructGenericArgInput(argsHolder); - - if (m_arguments.Length > 0) - { - UIFactory.CreateLabel(argsHolder, "ArgumentsLabel", "Arguments:", TextAnchor.MiddleLeft); - - for (int i = 0; i < m_arguments.Length; i++) - AddArgRow(i, argsHolder); - } - - argsHolder.SetActive(false); - } - } - - internal void AddArgRow(int i, GameObject parent) - { - var arg = m_arguments[i]; - - var rowObj = UIFactory.CreateHorizontalGroup(parent, "ArgRow", true, false, true, true, 4, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(rowObj, minHeight: 25, flexibleWidth: 5000); - - var argTypeTxt = SignatureHighlighter.ParseFullSyntax(arg.ParameterType, false); - var argLabel = UIFactory.CreateLabel(rowObj, "ArgLabel", $"{argTypeTxt} {arg.Name}", - TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(argLabel.gameObject, minHeight: 25); - - var argInputObj = UIFactory.CreateInputField(rowObj, "ArgInput", "...", 14, (int)TextAnchor.MiddleLeft, 1); - UIFactory.SetLayoutElement(argInputObj, flexibleWidth: 1200, preferredWidth: 150, minWidth: 20, minHeight: 25, flexibleHeight: 0); - - var argInput = argInputObj.GetComponent(); - argInput.onValueChanged.AddListener((string val) => { m_argumentInput[i] = val; }); - - if (arg.IsOptional) - { - var phInput = argInput.placeholder.GetComponent(); - phInput.text = " = " + arg.DefaultValue?.ToString() ?? "null"; - } - } - - internal void ConstructEvaluateButtons(GameObject argsHolder) - { - if (HasParameters) - { - var evalGroupObj = UIFactory.CreateHorizontalGroup(m_rightGroup, "EvalGroup", false, false, true, true, 5, - default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(evalGroupObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 5000); - - var evalButton = UIFactory.CreateButton(evalGroupObj, - "EvalButton", - $"Evaluate ({ParamCount})", - null); - - RuntimeProvider.Instance.SetColorBlock(evalButton, new Color(0.4f, 0.4f, 0.4f), - new Color(0.4f, 0.7f, 0.4f), new Color(0.3f, 0.3f, 0.3f)); - - UIFactory.SetLayoutElement(evalButton.gameObject, minWidth: 100, minHeight: 22, flexibleWidth: 0); - - var evalText = evalButton.GetComponentInChildren(); - - var cancelButton = UIFactory.CreateButton(evalGroupObj, "CancelButton", "Close", null, new Color(0.3f, 0.3f, 0.3f)); - UIFactory.SetLayoutElement(cancelButton.gameObject, minWidth: 100, minHeight: 22, flexibleWidth: 0); - - cancelButton.gameObject.SetActive(false); - - evalButton.onClick.AddListener(() => - { - if (!m_isEvaluating) - { - argsHolder.SetActive(true); - m_isEvaluating = true; - evalText.text = "Evaluate"; - RuntimeProvider.Instance.SetColorBlock(evalButton, new Color(0.3f, 0.6f, 0.3f)); - - cancelButton.gameObject.SetActive(true); - } - else - { - if (this is CacheMethod cm) - cm.Evaluate(); - else - UpdateValue(); - } - }); - - cancelButton.onClick.AddListener(() => - { - cancelButton.gameObject.SetActive(false); - argsHolder.SetActive(false); - m_isEvaluating = false; - - evalText.text = $"Evaluate ({ParamCount})"; - RuntimeProvider.Instance.SetColorBlock(evalButton, new Color(0.4f, 0.4f, 0.4f)); - }); - } - else if (this is CacheMethod) - { - // simple method evaluate button - - var evalButton = UIFactory.CreateButton(m_rightGroup, "EvalButton", "Evaluate", () => { (this as CacheMethod).Evaluate(); }); - RuntimeProvider.Instance.SetColorBlock(evalButton, new Color(0.4f, 0.4f, 0.4f), - new Color(0.4f, 0.7f, 0.4f), new Color(0.3f, 0.3f, 0.3f)); - - UIFactory.SetLayoutElement(evalButton.gameObject, minWidth: 100, minHeight: 22, flexibleWidth: 0); - } - } - - #endregion - } -} diff --git a/src/UI/CacheObject/CacheMethod.cs b/src/UI/CacheObject/CacheMethod.cs deleted file mode 100644 index e34d3f6..0000000 --- a/src/UI/CacheObject/CacheMethod.cs +++ /dev/null @@ -1,173 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.UI; -using UnityExplorer.Core.Unity; -using UnityExplorer.Core; -using UnityExplorer.UI.Utility; - -namespace UnityExplorer.UI.CacheObject -{ - public class CacheMethod : CacheMember - { - //private CacheObjectBase m_cachedReturnValue; - - public override Type FallbackType => (MemInfo as MethodInfo).ReturnType; - - public override bool HasParameters => base.HasParameters || GenericArgs.Length > 0; - - public override bool IsStatic => (MemInfo as MethodInfo).IsStatic; - - public override int ParamCount => base.ParamCount + m_genericArgInput.Length; - - public Type[] GenericArgs { get; private set; } - public Type[][] GenericConstraints { get; private set; } - - public string[] m_genericArgInput = new string[0]; - - public CacheMethod(MethodInfo methodInfo, object declaringInstance, GameObject parent) : base(methodInfo, declaringInstance, parent) - { - GenericArgs = methodInfo.GetGenericArguments(); - - GenericConstraints = GenericArgs.Select(x => x.GetGenericParameterConstraints()) - .Where(x => x != null) - .ToArray(); - - m_genericArgInput = new string[GenericArgs.Length]; - - m_arguments = methodInfo.GetParameters(); - m_argumentInput = new string[m_arguments.Length]; - - CreateIValue(null, methodInfo.ReturnType); - } - - public override void UpdateReflection() - { - // CacheMethod cannot UpdateValue directly. Need to Evaluate. - } - - public void Evaluate() - { - MethodInfo mi; - if (GenericArgs.Length > 0) - { - mi = MakeGenericMethodFromInput(); - if (mi == null) return; - } - else - { - mi = MemInfo as MethodInfo; - } - - object ret = null; - - try - { - ret = mi.Invoke(mi.IsStatic ? null : DeclaringInstance, ParseArguments()); - m_evaluated = true; - m_isEvaluating = false; - ReflectionException = null; - } - catch (Exception e) - { - while (e.InnerException != null) - e = e.InnerException; - - ExplorerCore.LogWarning($"Exception evaluating: {e.GetType()}, {e.Message}"); - ReflectionException = ReflectionUtility.ReflectionExToString(e); - } - - IValue.Value = ret; - UpdateValue(); - } - - private MethodInfo MakeGenericMethodFromInput() - { - var mi = MemInfo as MethodInfo; - - var list = new List(); - for (int i = 0; i < GenericArgs.Length; i++) - { - var input = m_genericArgInput[i]; - if (ReflectionUtility.GetTypeByName(input) is Type t) - { - if (GenericConstraints[i].Length == 0) - { - list.Add(t); - } - else - { - foreach (var constraint in GenericConstraints[i].Where(x => x != null)) - { - if (!constraint.IsAssignableFrom(t)) - { - ExplorerCore.LogWarning($"Generic argument #{i}, '{input}' is not assignable from the constraint '{constraint}'!"); - return null; - } - } - - list.Add(t); - } - } - else - { - ExplorerCore.LogWarning($"Generic argument #{i}, could not get any type by the name of '{input}'!" + - $" Make sure you use the full name including the namespace."); - return null; - } - } - - // make into a generic with type list - mi = mi.MakeGenericMethod(list.ToArray()); - - return mi; - } - - #region UI CONSTRUCTION - - internal void ConstructGenericArgInput(GameObject parent) - { - UIFactory.CreateLabel(parent, "GenericArgLabel", "Generic Arguments:", TextAnchor.MiddleLeft); - - for (int i = 0; i < GenericArgs.Length; i++) - AddGenericArgRow(i, parent); - } - - internal void AddGenericArgRow(int i, GameObject parent) - { - var arg = GenericArgs[i]; - - string constrainTxt = ""; - if (this.GenericConstraints[i].Length > 0) - { - foreach (var constraint in this.GenericConstraints[i]) - { - if (constrainTxt != "") - constrainTxt += ", "; - - constrainTxt += $"{SignatureHighlighter.ParseFullSyntax(constraint, false)}"; - } - } - else - constrainTxt = $"Any"; - - var rowObj = UIFactory.CreateHorizontalGroup(parent, "ArgRowObj", false, true, true, true, 4, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(rowObj, minHeight: 25, flexibleWidth: 5000); - - var argLabelObj = UIFactory.CreateLabel(rowObj, "ArgLabelObj", $"{constrainTxt} {arg.Name}", - TextAnchor.MiddleLeft); - - var argInputObj = UIFactory.CreateInputField(rowObj, "ArgInput", "...", 14, (int)TextAnchor.MiddleLeft, 1); - UIFactory.SetLayoutElement(argInputObj, flexibleWidth: 1200); - - var argInput = argInputObj.GetComponent(); - argInput.onValueChanged.AddListener((string val) => { m_genericArgInput[i] = val; }); - - } - - #endregion - } -} diff --git a/src/UI/CacheObject/CacheObjectBase.cs b/src/UI/CacheObject/CacheObjectBase.cs deleted file mode 100644 index b9516c7..0000000 --- a/src/UI/CacheObject/CacheObjectBase.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using UnityEngine; -using UnityExplorer.UI; -using UnityExplorer.Core.Unity; -using UnityEngine.UI; -using UnityExplorer.Core; -using UnityExplorer.UI.InteractiveValues; - -namespace UnityExplorer.UI.CacheObject -{ - public abstract class CacheObjectBase - { - public InteractiveValue IValue; - - public virtual bool CanWrite => false; - public virtual bool HasParameters => false; - public virtual bool IsMember => false; - public virtual bool HasEvaluated => true; - - public abstract Type FallbackType { get; } - - public abstract void CreateIValue(object value, Type fallbackType); - - public virtual void Enable() - { - if (!m_constructedUI) - { - ConstructUI(); - UpdateValue(); - } - - m_mainContent.SetActive(true); - m_mainContent.transform.SetAsLastSibling(); - } - - public virtual void Disable() - { - if (m_mainContent) - m_mainContent.SetActive(false); - } - - public void Destroy() - { - if (this.m_mainContent) - GameObject.Destroy(this.m_mainContent); - } - - public virtual void UpdateValue() - { - var value = IValue.Value; - - // if the type has changed fundamentally, make a new interactivevalue for it - var type = value == null - ? FallbackType - : ReflectionUtility.GetActualType(value); - - var ivalueType = InteractiveValue.GetIValueForType(type); - - if (ivalueType != IValue.GetType()) - { - IValue.OnDestroy(); - CreateIValue(value, FallbackType); - m_subContent.SetActive(false); - } - - IValue.OnValueUpdated(); - - IValue.RefreshElementsAfterUpdate(); - } - - public virtual void SetValue() => throw new NotImplementedException(); - - #region UI CONSTRUCTION - - internal bool m_constructedUI; - internal GameObject m_parentContent; - internal RectTransform m_mainRect; - internal GameObject m_mainContent; - internal GameObject m_subContent; - - // Make base UI holder for CacheObject, this doesnt actually display anything. - internal virtual void ConstructUI() - { - m_constructedUI = true; - - m_mainContent = UIFactory.CreateVerticalGroup(m_parentContent, "CacheObjectBase.MainContent", true, true, true, true, 0, default, - new Color(0.1f, 0.1f, 0.1f)); - m_mainRect = m_mainContent.GetComponent(); - m_mainRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 25); - - UIFactory.SetLayoutElement(m_mainContent, minHeight: 25, flexibleHeight: 9999, minWidth: 200, flexibleWidth: 5000); - - // subcontent - - m_subContent = UIFactory.CreateVerticalGroup(m_mainContent, "CacheObjectBase.SubContent", true, false, true, true, 0, default, - new Color(0.085f, 0.085f, 0.085f)); - UIFactory.SetLayoutElement(m_subContent, minHeight: 30, flexibleHeight: 9999, minWidth: 125, flexibleWidth: 9000); - - m_subContent.SetActive(false); - - IValue.m_subContentParent = m_subContent; - } - - #endregion - - } -} diff --git a/src/UI/CacheObject/CachePaired.cs b/src/UI/CacheObject/CachePaired.cs deleted file mode 100644 index ec508df..0000000 --- a/src/UI/CacheObject/CachePaired.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityExplorer.UI; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.UI.InteractiveValues; - -namespace UnityExplorer.UI.CacheObject -{ - public enum PairTypes - { - Key, - Value - } - - public class CachePaired : CacheObjectBase - { - public override Type FallbackType => PairType == PairTypes.Key - ? ParentDictionary.m_typeOfKeys - : ParentDictionary.m_typeofValues; - - public override bool CanWrite => false; // todo? - - public PairTypes PairType; - public int Index { get; private set; } - public InteractiveDictionary ParentDictionary { get; private set; } - internal IDictionary RefIDict; - - public CachePaired(int index, InteractiveDictionary parentDict, IDictionary refIDict, PairTypes pairType, GameObject parentContent) - { - Index = index; - ParentDictionary = parentDict; - RefIDict = refIDict; - this.PairType = pairType; - this.m_parentContent = parentContent; - } - - public override void CreateIValue(object value, Type fallbackType) - { - IValue = InteractiveValue.Create(value, fallbackType); - IValue.Owner = this; - } - - #region UI CONSTRUCTION - - internal override void ConstructUI() - { - base.ConstructUI(); - - Color bgColor = this.PairType == PairTypes.Key - ? new Color(0.07f, 0.07f, 0.07f) - : new Color(0.1f, 0.1f, 0.1f); - - var rowObj = UIFactory.CreateHorizontalGroup(m_mainContent, "PairedGroup", false, false, true, true, 0, new Vector4(0,0,5,2), - bgColor); - - string lbl = $"{this.PairType}"; - if (this.PairType == PairTypes.Key) - lbl = $"[{Index}] {lbl}"; - - var indexLabel = UIFactory.CreateLabel(rowObj, "IndexLabel", lbl, TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(indexLabel.gameObject, minWidth: 80, flexibleWidth: 30, minHeight: 25); - - IValue.m_mainContentParent = rowObj; - } - - #endregion - } -} diff --git a/src/UI/CacheObject/CacheProperty.cs b/src/UI/CacheObject/CacheProperty.cs deleted file mode 100644 index 5e3620b..0000000 --- a/src/UI/CacheObject/CacheProperty.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Reflection; -using UnityExplorer.UI; -using UnityExplorer.Core.Unity; -using UnityEngine; - -namespace UnityExplorer.UI.CacheObject -{ - public class CacheProperty : CacheMember - { - public override Type FallbackType => (MemInfo as PropertyInfo).PropertyType; - - public override bool IsStatic => (MemInfo as PropertyInfo).GetAccessors(true)[0].IsStatic; - - public CacheProperty(PropertyInfo propertyInfo, object declaringInstance, GameObject parent) : base(propertyInfo, declaringInstance, parent) - { - this.m_arguments = propertyInfo.GetIndexParameters(); - this.m_argumentInput = new string[m_arguments.Length]; - - CreateIValue(null, propertyInfo.PropertyType); - } - - public override void UpdateReflection() - { - if (HasParameters && !m_isEvaluating) - { - // Need to enter parameters first. - return; - } - - var pi = MemInfo as PropertyInfo; - - if (pi.CanRead) - { - var target = pi.GetAccessors(true)[0].IsStatic ? null : DeclaringInstance; - - IValue.Value = pi.GetValue(target, ParseArguments()); - - m_evaluated = true; - ReflectionException = null; - } - else - { - if (FallbackType == typeof(string)) - { - IValue.Value = ""; - } - else if (FallbackType.IsPrimitive) - { - IValue.Value = Activator.CreateInstance(FallbackType); - } - m_evaluated = true; - ReflectionException = null; - } - } - - public override void SetValue() - { - var pi = MemInfo as PropertyInfo; - var target = pi.GetAccessors()[0].IsStatic ? null : DeclaringInstance; - - pi.SetValue(target, IValue.Value, ParseArguments()); - - if (this.ParentInspector?.ParentMember != null) - this.ParentInspector.ParentMember.SetValue(); - } - } -} diff --git a/src/UI/InspectorManager.cs b/src/UI/InspectorManager.cs new file mode 100644 index 0000000..9672332 --- /dev/null +++ b/src/UI/InspectorManager.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UnityExplorer.UI +{ + public static class InspectorManager + { + // internal static readonly List InspectedObjects; + + public static void Inspect(this object obj) + => throw new NotImplementedException("TODO"); + + + } +} diff --git a/src/UI/Inspectors/GameObjects/ChildList.cs b/src/UI/Inspectors/GameObjects/ChildList.cs deleted file mode 100644 index 28b7276..0000000 --- a/src/UI/Inspectors/GameObjects/ChildList.cs +++ /dev/null @@ -1,193 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Runtime; -using UnityExplorer.UI.Utility; - -namespace UnityExplorer.UI.Inspectors.GameObjects -{ - public class ChildList - { - internal static ChildList Instance; - - public ChildList() - { - Instance = this; - } - - public static PageHandler s_childListPageHandler; - private static GameObject s_childListContent; - - private static GameObject[] s_allChildren = new GameObject[0]; - private static readonly List s_childrenShortlist = new List(); - private static int s_lastChildCount; - - private static readonly List s_childListTexts = new List(); - private static readonly List s_childListToggles = new List(); - - internal void RefreshChildObjectList() - { - var go = GameObjectInspector.ActiveInstance.TargetGO; - - s_allChildren = new GameObject[go.transform.childCount]; - for (int i = 0; i < go.transform.childCount; i++) - { - var child = go.transform.GetChild(i); - s_allChildren[i] = child.gameObject; - } - - var objects = s_allChildren; - s_childListPageHandler.ListCount = objects.Length; - - int newCount = 0; - - foreach (var itemIndex in s_childListPageHandler) - { - newCount++; - - // normalized index starting from 0 - var i = itemIndex - s_childListPageHandler.StartIndex; - - if (itemIndex >= objects.Length) - { - if (i > s_lastChildCount || i >= s_childListTexts.Count) - break; - - GameObject label = s_childListTexts[i].transform.parent.parent.gameObject; - if (label.activeSelf) - label.SetActive(false); - } - else - { - GameObject obj = objects[itemIndex]; - - if (!obj) - continue; - - if (i >= s_childrenShortlist.Count) - { - s_childrenShortlist.Add(obj); - AddChildListButton(); - } - else - { - s_childrenShortlist[i] = obj; - } - - var text = s_childListTexts[i]; - - var name = obj.name; - - if (obj.transform.childCount > 0) - name = $"[{obj.transform.childCount}] {name}"; - - text.text = name; - text.color = obj.activeSelf ? Color.green : Color.red; - - var tog = s_childListToggles[i]; - tog.isOn = obj.activeSelf; - - var label = text.transform.parent.parent.gameObject; - if (!label.activeSelf) - { - label.SetActive(true); - } - } - } - - s_lastChildCount = newCount; - } - - internal static void OnChildListObjectClicked(int index) - { - if (GameObjectInspector.ActiveInstance == null) - return; - - if (index >= s_childrenShortlist.Count || !s_childrenShortlist[index]) - return; - - GameObjectInspector.ActiveInstance.ChangeInspectorTarget(s_childrenShortlist[index]); - GameObjectInspector.ActiveInstance.Update(); - } - - internal static void OnChildListPageTurn() - { - if (Instance == null) - return; - - Instance.RefreshChildObjectList(); - } - - internal static void OnToggleClicked(int index, bool newVal) - { - if (GameObjectInspector.ActiveInstance == null) - return; - - if (index >= s_childrenShortlist.Count || !s_childrenShortlist[index]) - return; - - var obj = s_childrenShortlist[index]; - obj.SetActive(newVal); - } - - #region UI CONSTRUCTION - - internal void ConstructChildList(GameObject parent) - { - var vertGroupObj = UIFactory.CreateVerticalGroup(parent, "ChildListGroup", false, true, true, true, 5, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(vertGroupObj, minWidth: 120, flexibleWidth: 25000, minHeight: 200, flexibleHeight: 5000); - - var childTitle = UIFactory.CreateLabel(vertGroupObj, "ChildListTitle", "Children:", TextAnchor.MiddleLeft, Color.grey, true, 14); - UIFactory.SetLayoutElement(childTitle.gameObject, minHeight: 30); - - var childrenScrollObj = UIFactory.CreateScrollView(vertGroupObj, "ChildListScrollView", out s_childListContent, - out SliderScrollbar scroller, new Color(0.07f, 0.07f, 0.07f)); - UIFactory.SetLayoutElement(childrenScrollObj, minHeight: 50); - - s_childListPageHandler = new PageHandler(scroller); - s_childListPageHandler.ConstructUI(vertGroupObj); - s_childListPageHandler.OnPageChanged += OnChildListPageTurn; - } - - internal void AddChildListButton() - { - int thisIndex = s_childListTexts.Count; - - var btnGroupObj = UIFactory.CreateHorizontalGroup(s_childListContent, "ChildButtonGroup", true, false, true, true, - 0, default, new Color(0.07f, 0.07f, 0.07f)); - UIFactory.SetLayoutElement(btnGroupObj, flexibleWidth: 320, minHeight: 25, flexibleHeight: 0); - btnGroupObj.AddComponent(); - - var toggleObj = UIFactory.CreateToggle(btnGroupObj, "Toggle", out Toggle toggle, out Text toggleText, new Color(0.3f, 0.3f, 0.3f)); - UIFactory.SetLayoutElement(toggleObj, minHeight: 25, minWidth: 25); - toggleText.text = ""; - toggle.isOn = false; - s_childListToggles.Add(toggle); - toggle.onValueChanged.AddListener((bool val) => { OnToggleClicked(thisIndex, val); }); - - var mainBtn = UIFactory.CreateButton(btnGroupObj, - "MainButton", - "", - () => { OnChildListObjectClicked(thisIndex); }); - - RuntimeProvider.Instance.SetColorBlock(mainBtn, new Color(0.07f, 0.07f, 0.07f), - new Color(0.2f, 0.2f, 0.2f, 1), new Color(0.05f, 0.05f, 0.05f)); - - UIFactory.SetLayoutElement(mainBtn.gameObject, minHeight: 25, flexibleHeight: 0, minWidth: 25, flexibleWidth: 9999); - - Text mainText = mainBtn.GetComponentInChildren(); - mainText.alignment = TextAnchor.MiddleLeft; - mainText.horizontalOverflow = HorizontalWrapMode.Overflow; - mainText.resizeTextForBestFit = true; - mainText.resizeTextMaxSize = 14; - mainText.resizeTextMinSize = 10; - - s_childListTexts.Add(mainText); - } - - #endregion - } -} diff --git a/src/UI/Inspectors/GameObjects/ComponentList.cs b/src/UI/Inspectors/GameObjects/ComponentList.cs deleted file mode 100644 index 869a66a..0000000 --- a/src/UI/Inspectors/GameObjects/ComponentList.cs +++ /dev/null @@ -1,192 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core; -using UnityExplorer.Core.Runtime; -using UnityExplorer.UI.Utility; - -namespace UnityExplorer.UI.Inspectors.GameObjects -{ - public class ComponentList - { - internal static ComponentList Instance; - - public ComponentList() - { - Instance = this; - } - - public static PageHandler s_compListPageHandler; - private static Component[] s_allComps = new Component[0]; - private static readonly List s_compShortlist = new List(); - private static GameObject s_compListContent; - private static readonly List s_compListTexts = new List(); - private static int s_lastCompCount; - public static readonly List s_compToggles = new List(); - - internal void RefreshComponentList() - { - var go = GameObjectInspector.ActiveInstance.TargetGO; - - s_allComps = go.GetComponents().ToArray(); - - var components = s_allComps; - s_compListPageHandler.ListCount = components.Length; - - //int startIndex = m_sceneListPageHandler.StartIndex; - - int newCount = 0; - - foreach (var itemIndex in s_compListPageHandler) - { - newCount++; - - // normalized index starting from 0 - var i = itemIndex - s_compListPageHandler.StartIndex; - - if (itemIndex >= components.Length) - { - if (i > s_lastCompCount || i >= s_compListTexts.Count) - break; - - GameObject label = s_compListTexts[i].transform.parent.parent.gameObject; - if (label.activeSelf) - label.SetActive(false); - } - else - { - Component comp = components[itemIndex]; - - if (!comp) - continue; - - if (i >= s_compShortlist.Count) - { - s_compShortlist.Add(comp); - AddCompListButton(); - } - else - { - s_compShortlist[i] = comp; - } - - var text = s_compListTexts[i]; - - text.text = SignatureHighlighter.ParseFullSyntax(ReflectionUtility.GetActualType(comp), true); - - var toggle = s_compToggles[i]; - if (comp.TryCast() is Behaviour behaviour) - { - if (!toggle.gameObject.activeSelf) - toggle.gameObject.SetActive(true); - - toggle.isOn = behaviour.enabled; - } - else - { - if (toggle.gameObject.activeSelf) - toggle.gameObject.SetActive(false); - } - - var label = text.transform.parent.parent.gameObject; - if (!label.activeSelf) - { - label.SetActive(true); - } - } - } - - s_lastCompCount = newCount; - } - - internal static void OnCompToggleClicked(int index, bool value) - { - var comp = s_compShortlist[index]; - comp.TryCast().enabled = value; - } - - internal static void OnCompListObjectClicked(int index) - { - if (index >= s_compShortlist.Count || !s_compShortlist[index]) - return; - - InspectorManager.Instance.Inspect(s_compShortlist[index]); - } - - internal static void OnCompListPageTurn() - { - if (Instance == null) - return; - - Instance.RefreshComponentList(); - } - - - #region UI CONSTRUCTION - - internal void ConstructCompList(GameObject parent) - { - var vertGroupObj = UIFactory.CreateVerticalGroup(parent, "ComponentList", false, true, true, true, 5, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(vertGroupObj, minWidth: 120, flexibleWidth: 25000, minHeight: 200, flexibleHeight: 5000); - - var compTitle = UIFactory.CreateLabel(vertGroupObj, "ComponentsTitle", "Components:", TextAnchor.MiddleLeft, Color.grey); - UIFactory.SetLayoutElement(compTitle.gameObject, minHeight: 30); - - var compScrollObj = UIFactory.CreateScrollView(vertGroupObj, "ComponentListScrollView", out s_compListContent, - out SliderScrollbar scroller, new Color(0.07f, 0.07f, 0.07f)); - - UIFactory.SetLayoutElement(compScrollObj, minHeight: 50, flexibleHeight: 5000); - - s_compListPageHandler = new PageHandler(scroller); - s_compListPageHandler.ConstructUI(vertGroupObj); - s_compListPageHandler.OnPageChanged += OnCompListPageTurn; - } - - internal void AddCompListButton() - { - int thisIndex = s_compListTexts.Count; - - GameObject groupObj = UIFactory.CreateHorizontalGroup(s_compListContent, "CompListButton", true, false, true, true, 0, default, - new Color(0.07f, 0.07f, 0.07f), TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(groupObj, minWidth: 25, flexibleWidth: 999, minHeight: 25, flexibleHeight: 0); - groupObj.AddComponent(); - - // Behaviour enabled toggle - - var toggleObj = UIFactory.CreateToggle(groupObj, "EnabledToggle", out Toggle toggle, out Text toggleText, new Color(0.3f, 0.3f, 0.3f)); - UIFactory.SetLayoutElement(toggleObj, minWidth: 25, minHeight: 25); - toggleText.text = ""; - toggle.isOn = true; - s_compToggles.Add(toggle); - toggle.onValueChanged.AddListener((bool val) => { OnCompToggleClicked(thisIndex, val); }); - - // Main component button - - var mainBtn = UIFactory.CreateButton(groupObj, - "MainButton", - "", - () => { OnCompListObjectClicked(thisIndex); }); - - RuntimeProvider.Instance.SetColorBlock(mainBtn, new Color(0.07f, 0.07f, 0.07f), - new Color(0.2f, 0.2f, 0.2f, 1), new Color(0.05f, 0.05f, 0.05f)); - - UIFactory.SetLayoutElement(mainBtn.gameObject, minHeight: 25, flexibleHeight: 0, minWidth: 25, flexibleWidth: 999); - - // Component button text - - Text mainText = mainBtn.GetComponentInChildren(); - mainText.alignment = TextAnchor.MiddleLeft; - mainText.horizontalOverflow = HorizontalWrapMode.Overflow; - mainText.resizeTextForBestFit = true; - mainText.resizeTextMaxSize = 14; - mainText.resizeTextMinSize = 8; - - s_compListTexts.Add(mainText); - } - - #endregion - } -} diff --git a/src/UI/Inspectors/GameObjects/GameObjectControls.cs b/src/UI/Inspectors/GameObjects/GameObjectControls.cs deleted file mode 100644 index bd9bc66..0000000 --- a/src/UI/Inspectors/GameObjects/GameObjectControls.cs +++ /dev/null @@ -1,468 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Input; -using UnityExplorer.Core.Runtime; -using UnityExplorer.Core.Unity; - -namespace UnityExplorer.UI.Inspectors.GameObjects -{ - public class GameObjectControls - { - internal static GameObjectControls Instance; - - public GameObjectControls() - { - Instance = this; - } - - internal static bool Showing; - - internal static void ToggleVisibility() => SetVisibility(!Showing); - - internal static void SetVisibility(bool show) - { - if (show == Showing) - return; - - Showing = show; - - m_hideShowLabel.text = show ? "Hide" : "Show"; - m_contentObj.SetActive(show); - } - - internal static GameObject m_contentObj; - internal static Text m_hideShowLabel; - - private static InputField s_setParentInput; - - private static ControlEditor s_positionControl; - private static ControlEditor s_localPosControl; - private static ControlEditor s_rotationControl; - private static ControlEditor s_scaleControl; - - // Transform Vector editors - - internal struct ControlEditor - { - public InputField fullValue; - public Slider[] sliders; - public InputField[] inputs; - public Text[] values; - } - - internal static bool s_sliderChangedWanted; - private static Slider s_currentSlider; - private static ControlType s_currentSliderType; - private static VectorValue s_currentSliderValueType; - private static float s_currentSliderValue; - - internal enum ControlType - { - position, - localPosition, - eulerAngles, - localScale - } - - internal enum VectorValue - { - x, y, z - }; - - internal void RefreshControls() - { - var go = GameObjectInspector.ActiveInstance.TargetGO; - - s_positionControl.fullValue.text = go.transform.position.ToStringPretty(); - s_positionControl.values[0].text = go.transform.position.x.ToString("F3"); - s_positionControl.values[1].text = go.transform.position.y.ToString("F3"); - s_positionControl.values[2].text = go.transform.position.z.ToString("F3"); - - s_localPosControl.fullValue.text = go.transform.localPosition.ToStringPretty(); - s_localPosControl.values[0].text = go.transform.localPosition.x.ToString("F3"); - s_localPosControl.values[1].text = go.transform.localPosition.y.ToString("F3"); - s_localPosControl.values[2].text = go.transform.localPosition.z.ToString("F3"); - - s_rotationControl.fullValue.text = go.transform.eulerAngles.ToStringPretty(); - s_rotationControl.values[0].text = go.transform.eulerAngles.x.ToString("F3"); - s_rotationControl.values[1].text = go.transform.eulerAngles.y.ToString("F3"); - s_rotationControl.values[2].text = go.transform.eulerAngles.z.ToString("F3"); - - s_scaleControl.fullValue.text = go.transform.localScale.ToStringPretty(); - s_scaleControl.values[0].text = go.transform.localScale.x.ToString("F3"); - s_scaleControl.values[1].text = go.transform.localScale.y.ToString("F3"); - s_scaleControl.values[2].text = go.transform.localScale.z.ToString("F3"); - - } - - internal static void OnSetParentClicked() - { - var go = GameObjectInspector.ActiveInstance.TargetGO; - - if (!go) - return; - - var input = s_setParentInput.text; - - if (string.IsNullOrEmpty(input)) - { - go.transform.parent = null; - } - else - { - if (GameObject.Find(input) is GameObject newParent) - { - go.transform.parent = newParent.transform; - } - else - { - ExplorerCore.Log($"Could not find any GameObject from name or path '{input}'! Note: The target must be enabled."); - } - } - } - - internal static void OnSliderControlChanged(float value, Slider slider, ControlType controlType, VectorValue vectorValue) - { - if (value == 0) - s_sliderChangedWanted = false; - else - { - if (!s_sliderChangedWanted) - { - s_sliderChangedWanted = true; - s_currentSlider = slider; - s_currentSliderType = controlType; - s_currentSliderValueType = vectorValue; - } - - s_currentSliderValue = value; - } - } - - internal static void UpdateSliderControl() - { - if (!InputManager.GetMouseButton(0)) - { - s_sliderChangedWanted = false; - s_currentSlider.value = 0; - - return; - } - - if (GameObjectInspector.ActiveInstance == null) return; - - var transform = GameObjectInspector.ActiveInstance.TargetGO.transform; - - // get the current vector for the control type - Vector3 vector = Vector2.zero; - switch (s_currentSliderType) - { - case ControlType.position: - vector = transform.position; break; - case ControlType.localPosition: - vector = transform.localPosition; break; - case ControlType.eulerAngles: - vector = transform.eulerAngles; break; - case ControlType.localScale: - vector = transform.localScale; break; - } - - // apply vector value change - switch (s_currentSliderValueType) - { - case VectorValue.x: - vector.x += s_currentSliderValue; break; - case VectorValue.y: - vector.y += s_currentSliderValue; break; - case VectorValue.z: - vector.z += s_currentSliderValue; break; - } - - // set vector to transform member - switch (s_currentSliderType) - { - case ControlType.position: - transform.position = vector; break; - case ControlType.localPosition: - transform.localPosition = vector; break; - case ControlType.eulerAngles: - transform.eulerAngles = vector; break; - case ControlType.localScale: - transform.localScale = vector; break; - } - } - - internal static void OnVectorControlInputApplied(ControlType controlType, VectorValue vectorValue) - { - if (!(InspectorManager.Instance.m_activeInspector is GameObjectInspector instance)) return; - - // get relevant input for controltype + value - - InputField[] inputs = null; - switch (controlType) - { - case ControlType.position: - inputs = s_positionControl.inputs; break; - case ControlType.localPosition: - inputs = s_localPosControl.inputs; break; - case ControlType.eulerAngles: - inputs = s_rotationControl.inputs; break; - case ControlType.localScale: - inputs = s_scaleControl.inputs; break; - } - InputField input = inputs[(int)vectorValue]; - - float val = float.Parse(input.text); - - // apply transform value - - Vector3 vector = Vector3.zero; - var transform = instance.TargetGO.transform; - switch (controlType) - { - case ControlType.position: - vector = transform.position; break; - case ControlType.localPosition: - vector = transform.localPosition; break; - case ControlType.eulerAngles: - vector = transform.eulerAngles; break; - case ControlType.localScale: - vector = transform.localScale; break; - } - - switch (vectorValue) - { - case VectorValue.x: - vector.x = val; break; - case VectorValue.y: - vector.y = val; break; - case VectorValue.z: - vector.z = val; break; - } - - // set back to transform - switch (controlType) - { - case ControlType.position: - transform.position = vector; break; - case ControlType.localPosition: - transform.localPosition = vector; break; - case ControlType.eulerAngles: - transform.eulerAngles = vector; break; - case ControlType.localScale: - transform.localScale = vector; break; - } - } - - #region UI CONSTRUCTION - - internal void ConstructControls(GameObject parent) - { - var mainGroup = UIFactory.CreateVerticalGroup(parent, "ControlsGroup", false, false, true, true, 5, new Vector4(4,4,4,4), - new Color(0.07f, 0.07f, 0.07f)); - - // ~~~~~~ Top row ~~~~~~ - - var topRow = UIFactory.CreateHorizontalGroup(mainGroup, "TopRow", false, false, true, true, 5, default, new Color(1, 1, 1, 0)); - - var hideButton = UIFactory.CreateButton(topRow, "ToggleShowButton", "Show", ToggleVisibility, new Color(0.16f, 0.16f, 0.16f)); - UIFactory.SetLayoutElement(hideButton.gameObject, minWidth: 40, flexibleWidth: 0, minHeight: 25, flexibleHeight: 0); - m_hideShowLabel = hideButton.GetComponentInChildren(); - - var topTitle = UIFactory.CreateLabel(topRow, "ControlsLabel", "Controls", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(topTitle.gameObject, minWidth: 100, flexibleWidth: 9500, minHeight: 25); - - //// ~~~~~~~~ Content ~~~~~~~~ // - - m_contentObj = UIFactory.CreateVerticalGroup(mainGroup, "ContentGroup", true, false, true, true, 5, default, new Color(1, 1, 1, 0)); - - // transform controls - ConstructVector3Editor(m_contentObj, "Position", ControlType.position, out s_positionControl); - ConstructVector3Editor(m_contentObj, "Local Position", ControlType.localPosition, out s_localPosControl); - ConstructVector3Editor(m_contentObj, "Rotation", ControlType.eulerAngles, out s_rotationControl); - ConstructVector3Editor(m_contentObj, "Scale", ControlType.localScale, out s_scaleControl); - - // set parent - ConstructSetParent(m_contentObj); - - // bottom row buttons - ConstructBottomButtons(m_contentObj); - - // set controls content inactive now that content is made (otherwise TMP font size goes way too big?) - m_contentObj.SetActive(false); - } - - internal void ConstructSetParent(GameObject contentObj) - { - var setParentGroupObj = UIFactory.CreateHorizontalGroup(contentObj, "SetParentRow", false, false, true, true, 5, default, - new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(setParentGroupObj, minHeight: 25, flexibleHeight: 0); - - var title = UIFactory.CreateLabel(setParentGroupObj, "SetParentLabel", "Set Parent:", TextAnchor.MiddleLeft, Color.grey); - UIFactory.SetLayoutElement(title.gameObject, minWidth: 110, minHeight: 25, flexibleHeight: 0); - - var inputFieldObj = UIFactory.CreateInputField(setParentGroupObj, "SetParentInputField", "Enter a GameObject name or path..."); - s_setParentInput = inputFieldObj.GetComponent(); - UIFactory.SetLayoutElement(inputFieldObj, minHeight: 25, preferredWidth: 400, flexibleWidth: 9999); - - var applyButton = UIFactory.CreateButton(setParentGroupObj, "SetParentButton", "Apply", OnSetParentClicked); - UIFactory.SetLayoutElement(applyButton.gameObject, minWidth: 55, flexibleWidth: 0, minHeight: 25, flexibleHeight: 0); - } - - internal void ConstructVector3Editor(GameObject parent, string titleText, ControlType type, out ControlEditor editor) - { - editor = new ControlEditor(); - - var topBarObj = UIFactory.CreateHorizontalGroup(parent, "Vector3Editor", false, false, true, true, 5, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(topBarObj, minHeight: 25, flexibleHeight: 0); - - var title = UIFactory.CreateLabel(topBarObj, "Title", titleText, TextAnchor.MiddleLeft, Color.grey); - UIFactory.SetLayoutElement(title.gameObject, minWidth: 110, flexibleWidth: 0, minHeight: 25); - - // expand button - var expandButton = UIFactory.CreateButton(topBarObj, "ExpandArrow", "▼"); - var expandText = expandButton.GetComponentInChildren(); - expandText.fontSize = 12; - UIFactory.SetLayoutElement(expandButton.gameObject, minWidth: 35, flexibleWidth: 0, minHeight: 25, flexibleHeight: 0); - - // readonly value input - - var valueInputObj = UIFactory.CreateInputField(topBarObj, "ValueInput", "..."); - var valueInput = valueInputObj.GetComponent(); - valueInput.readOnly = true; - UIFactory.SetLayoutElement(valueInputObj, minHeight: 25, flexibleHeight: 0, preferredWidth: 400, flexibleWidth: 9999); - - editor.fullValue = valueInput; - - editor.sliders = new Slider[3]; - editor.inputs = new InputField[3]; - editor.values = new Text[3]; - - var xRow = ConstructEditorRow(parent, editor, type, VectorValue.x); - xRow.SetActive(false); - var yRow = ConstructEditorRow(parent, editor, type, VectorValue.y); - yRow.SetActive(false); - var zRow = ConstructEditorRow(parent, editor, type, VectorValue.z); - zRow.SetActive(false); - - // add expand callback now that we have group reference - expandButton.onClick.AddListener(ToggleExpand); - void ToggleExpand() - { - if (xRow.activeSelf) - { - xRow.SetActive(false); - yRow.SetActive(false); - zRow.SetActive(false); - expandText.text = "▼"; - } - else - { - xRow.SetActive(true); - yRow.SetActive(true); - zRow.SetActive(true); - expandText.text = "▲"; - } - } - } - - internal GameObject ConstructEditorRow(GameObject parent, ControlEditor editor, ControlType type, VectorValue vectorValue) - { - var rowObject = UIFactory.CreateHorizontalGroup(parent, "EditorRow", false, false, true, true, 5, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(rowObject, minHeight: 25, flexibleHeight: 0, minWidth: 100); - - // Value labels - - var valueTitle = UIFactory.CreateLabel(rowObject, "ValueTitle", $"{vectorValue.ToString().ToUpper()}:", TextAnchor.MiddleLeft, Color.cyan); - UIFactory.SetLayoutElement(valueTitle.gameObject, minHeight: 25, flexibleHeight: 0, minWidth: 25, flexibleWidth: 0); - - // actual value label - var valueLabel = UIFactory.CreateLabel(rowObject, "ValueLabel", "", TextAnchor.MiddleLeft); - editor.values[(int)vectorValue] = valueLabel; - UIFactory.SetLayoutElement(valueLabel.gameObject, minWidth: 85, flexibleWidth: 0, minHeight: 25); - - // input field - - var inputHolder = UIFactory.CreateVerticalGroup(rowObject, "InputFieldGroup", false, false, true, true, 0, default, new Color(1, 1, 1, 0)); - - var inputObj = UIFactory.CreateInputField(inputHolder, "InputField", "..."); - var input = inputObj.GetComponent(); - //input.characterValidation = InputField.CharacterValidation.Decimal; - - UIFactory.SetLayoutElement(inputObj, minHeight: 25, flexibleHeight: 0, minWidth: 90, flexibleWidth: 50); - - editor.inputs[(int)vectorValue] = input; - - // apply button - - var applyBtn = UIFactory.CreateButton(rowObject, "ApplyButton", "Apply", () => { OnVectorControlInputApplied(type, vectorValue); }); - UIFactory.SetLayoutElement(applyBtn.gameObject, minWidth: 60, minHeight: 25); - - - // Slider - - var sliderObj = UIFactory.CreateSlider(rowObject, "VectorSlider", out Slider slider); - UIFactory.SetLayoutElement(sliderObj, minHeight: 20, flexibleHeight: 0, minWidth: 200, flexibleWidth: 9000); - sliderObj.transform.Find("Fill Area").gameObject.SetActive(false); - RuntimeProvider.Instance.SetColorBlock(slider, new Color(0.65f, 0.65f, 0.65f)); - slider.minValue = -2; - slider.maxValue = 2; - slider.value = 0; - slider.onValueChanged.AddListener((float val) => { OnSliderControlChanged(val, slider, type, vectorValue); }); - editor.sliders[(int)vectorValue] = slider; - - return rowObject; - } - - internal void ConstructBottomButtons(GameObject contentObj) - { - var bottomRow = UIFactory.CreateHorizontalGroup(contentObj, "BottomButtons", true, true, false, false, 4, default, new Color(1, 1, 1, 0)); - - var instantiateBtn = UIFactory.CreateButton(bottomRow, "InstantiateBtn", "Instantiate", InstantiateBtn, new Color(0.2f, 0.2f, 0.2f)); - UIFactory.SetLayoutElement(instantiateBtn.gameObject, minWidth: 150); - - void InstantiateBtn() - { - var go = GameObjectInspector.ActiveInstance.TargetGO; - if (!go) - return; - - var clone = GameObject.Instantiate(go); - InspectorManager.Instance.Inspect(clone); - } - - var dontDestroyBtn = UIFactory.CreateButton(bottomRow, "DontDestroyButton", "Set DontDestroyOnLoad", DontDestroyOnLoadBtn, - new Color(0.2f, 0.2f, 0.2f)); - UIFactory.SetLayoutElement(dontDestroyBtn.gameObject, flexibleWidth: 5000); - - void DontDestroyOnLoadBtn() - { - var go = GameObjectInspector.ActiveInstance.TargetGO; - if (!go) - return; - - GameObject.DontDestroyOnLoad(go); - } - - var destroyBtn = UIFactory.CreateButton(bottomRow, "DestroyButton", "Destroy", DestroyBtn, new Color(0.2f, 0.2f, 0.2f)); - UIFactory.SetLayoutElement(destroyBtn.gameObject, minWidth: 150); - var destroyText = destroyBtn.GetComponentInChildren(); - destroyText.color = Color.red; - - void DestroyBtn() - { - var go = GameObjectInspector.ActiveInstance.TargetGO; - if (!go) - return; - - GameObject.Destroy(go); - } - } - - #endregion - } -} diff --git a/src/UI/Inspectors/GameObjects/GameObjectInspector.cs b/src/UI/Inspectors/GameObjects/GameObjectInspector.cs deleted file mode 100644 index df01178..0000000 --- a/src/UI/Inspectors/GameObjects/GameObjectInspector.cs +++ /dev/null @@ -1,350 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Runtime; -using UnityExplorer.Core.Unity; - -namespace UnityExplorer.UI.Inspectors.GameObjects -{ - public class GameObjectInspector : InspectorBase - { - public override string TabLabel => $" [G] {TargetGO?.name}"; - - public static GameObjectInspector ActiveInstance { get; private set; } - - public GameObject TargetGO; - - // sub modules - internal static ChildList s_childList; - internal static ComponentList s_compList; - internal static GameObjectControls s_controls; - - internal static bool m_UIConstructed; - - public GameObjectInspector(GameObject target) : base(target) - { - ActiveInstance = this; - - TargetGO = target; - - if (!TargetGO) - { - ExplorerCore.LogWarning("Target GameObject is null!"); - return; - } - - // one UI is used for all gameobject inspectors. no point recreating it. - if (!m_UIConstructed) - { - m_UIConstructed = true; - - s_childList = new ChildList(); - s_compList = new ComponentList(); - s_controls = new GameObjectControls(); - - ConstructUI(); - } - } - - public override void SetActive() - { - base.SetActive(); - ActiveInstance = this; - } - - public override void SetInactive() - { - base.SetInactive(); - ActiveInstance = null; - } - - internal void ChangeInspectorTarget(GameObject newTarget) - { - if (!newTarget) - return; - - this.Target = this.TargetGO = newTarget; - } - - // Update - - public override void Update() - { - base.Update(); - - if (m_pendingDestroy || !this.IsActive) - return; - - RefreshTopInfo(); - - s_childList.RefreshChildObjectList(); - - s_compList.RefreshComponentList(); - - s_controls.RefreshControls(); - - if (GameObjectControls.s_sliderChangedWanted) - GameObjectControls.UpdateSliderControl(); - } - - private static GameObject s_content; - public override GameObject Content - { - get => s_content; - set => s_content = value; - } - - private static string m_lastName; - public static InputField m_nameInput; - - private static string m_lastPath; - public static InputField m_pathInput; - private static RectTransform m_pathInputRect; - private static GameObject m_pathGroupObj; - private static Text m_hiddenPathText; - private static RectTransform m_hiddenPathRect; - - private static Toggle m_enabledToggle; - private static Text m_enabledText; - private static bool? m_lastEnabledState; - - private static Dropdown m_layerDropdown; - private static int m_lastLayer = -1; - - private static Text m_sceneText; - private static string m_lastScene; - - internal void RefreshTopInfo() - { - var target = TargetGO; - string name = target.name; - - if (m_lastName != name) - { - m_lastName = name; - m_nameInput.text = m_lastName; - } - - if (target.transform.parent) - { - if (!m_pathGroupObj.activeSelf) - m_pathGroupObj.SetActive(true); - - var path = target.transform.GetTransformPath(true); - if (m_lastPath != path) - { - m_lastPath = path; - - m_pathInput.text = path; - m_hiddenPathText.text = path; - - LayoutRebuilder.ForceRebuildLayoutImmediate(m_pathInputRect); - LayoutRebuilder.ForceRebuildLayoutImmediate(m_hiddenPathRect); - } - } - else if (m_pathGroupObj.activeSelf) - m_pathGroupObj.SetActive(false); - - if (m_lastEnabledState != target.activeSelf) - { - m_lastEnabledState = target.activeSelf; - - m_enabledToggle.isOn = target.activeSelf; - m_enabledText.text = target.activeSelf ? "Enabled" : "Disabled"; - m_enabledText.color = target.activeSelf ? Color.green : Color.red; - } - - if (m_lastLayer != target.layer) - { - m_lastLayer = target.layer; - m_layerDropdown.value = target.layer; - } - - if (string.IsNullOrEmpty(m_lastScene) || m_lastScene != target.scene.name) - { - m_lastScene = target.scene.name; - - if (!string.IsNullOrEmpty(target.scene.name)) - m_sceneText.text = m_lastScene; - else - m_sceneText.text = "None (Asset/Resource)"; - } - } - - // UI Callbacks - - private static void OnApplyNameClicked() - { - if (ActiveInstance == null) - return; - - ActiveInstance.TargetGO.name = m_nameInput.text; - } - - private static void OnEnableToggled(bool enabled) - { - if (ActiveInstance == null) - return; - - ActiveInstance.TargetGO.SetActive(enabled); - } - - private static void OnLayerSelected(int layer) - { - if (ActiveInstance == null) - return; - - ActiveInstance.TargetGO.layer = layer; - } - - internal static void OnBackButtonClicked() - { - if (ActiveInstance == null) - return; - - ActiveInstance.ChangeInspectorTarget(ActiveInstance.TargetGO.transform.parent.gameObject); - } - - #region UI CONSTRUCTION - - internal void ConstructUI() - { - var parent = InspectorManager.m_inspectorContent; - - s_content = UIFactory.CreateScrollView(parent, "GameObjectInspector_Content", out GameObject scrollContent, out _, - new Color(0.1f, 0.1f, 0.1f)); - - UIFactory.SetLayoutGroup(scrollContent.transform.parent.gameObject, true, true, true, true); - - UIFactory.SetLayoutGroup(scrollContent, true, true, true, true, 5); - var contentFitter = scrollContent.GetComponent(); - contentFitter.verticalFit = ContentSizeFitter.FitMode.Unconstrained; - - ConstructTopArea(scrollContent); - - s_controls.ConstructControls(scrollContent); - - var midGroupObj = ConstructMidGroup(scrollContent); - - s_childList.ConstructChildList(midGroupObj); - s_compList.ConstructCompList(midGroupObj); - - LayoutRebuilder.ForceRebuildLayoutImmediate(s_content.GetComponent()); - Canvas.ForceUpdateCanvases(); - } - - private void ConstructTopArea(GameObject scrollContent) - { - // path row - - m_pathGroupObj = UIFactory.CreateHorizontalGroup(scrollContent, "TopArea", false, false, true, true, 5, default, new Color(0.1f, 0.1f, 0.1f)); - - var pathRect = m_pathGroupObj.GetComponent(); - pathRect.sizeDelta = new Vector2(pathRect.sizeDelta.x, 20); - UIFactory.SetLayoutElement(m_pathGroupObj, minHeight: 20, flexibleHeight: 75); - - // Back button - - var backButton = UIFactory.CreateButton(m_pathGroupObj, "BackButton", "◄", OnBackButtonClicked, new Color(0.15f, 0.15f, 0.15f)); - UIFactory.SetLayoutElement(backButton.gameObject, minWidth: 55, flexibleWidth: 0, minHeight: 25, flexibleHeight: 0); - - m_hiddenPathText = UIFactory.CreateLabel(m_pathGroupObj, "HiddenPathText", "", TextAnchor.MiddleLeft); - m_hiddenPathText.color = Color.clear; - m_hiddenPathText.fontSize = 14; - m_hiddenPathText.raycastTarget = false; - - var hiddenFitter = m_hiddenPathText.gameObject.AddComponent(); - hiddenFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; - - UIFactory.SetLayoutElement(m_hiddenPathText.gameObject, minHeight: 25, flexibleHeight: 125, minWidth: 250, flexibleWidth: 9000); - UIFactory.SetLayoutGroup(m_hiddenPathText.gameObject, true, true, true, true); - - // Path input - - var pathInputObj = UIFactory.CreateInputField(m_hiddenPathText.gameObject, "PathInputField", "..."); - UIFactory.SetLayoutElement(pathInputObj, minHeight: 25, flexibleHeight: 75, preferredWidth: 400, flexibleWidth: 9999); - var pathInputRect = pathInputObj.GetComponent(); - pathInputRect.sizeDelta = new Vector2(pathInputRect.sizeDelta.x, 25); - - m_pathInput = pathInputObj.GetComponent(); - m_pathInput.text = ActiveInstance.TargetGO.transform.GetTransformPath(); - m_pathInput.readOnly = true; - m_pathInput.lineType = InputField.LineType.MultiLineNewline; - m_pathInput.textComponent.color = new Color(0.75f, 0.75f, 0.75f); - - var textRect = m_pathInput.textComponent.GetComponent(); - textRect.offsetMin = new Vector2(3, 3); - textRect.offsetMax = new Vector2(3, 3); - - m_pathInputRect = m_pathInput.GetComponent(); - m_hiddenPathRect = m_hiddenPathText.GetComponent(); - - // name and enabled row - - var nameRowObj = UIFactory.CreateHorizontalGroup(scrollContent, "NameGroup", false, false, true, true, 5, default, new Color(0.1f, 0.1f, 0.1f)); - UIFactory.SetLayoutElement(nameRowObj, minHeight: 25, flexibleHeight: 0); - var nameRect = nameRowObj.GetComponent(); - nameRect.sizeDelta = new Vector2(nameRect.sizeDelta.x, 25); - - var nameLabel = UIFactory.CreateLabel(nameRowObj, "NameLabel", "Name:", TextAnchor.MiddleCenter, Color.grey, true, 14); - UIFactory.SetLayoutElement(nameLabel.gameObject, minHeight: 25, flexibleHeight: 0, minWidth: 55, flexibleWidth: 0); - - var nameInputObj = UIFactory.CreateInputField(nameRowObj, "NameInput", "..."); - var nameInputRect = nameInputObj.GetComponent(); - nameInputRect.sizeDelta = new Vector2(nameInputRect.sizeDelta.x, 25); - m_nameInput = nameInputObj.GetComponent(); - m_nameInput.text = ActiveInstance.TargetGO.name; - - var applyNameBtn = UIFactory.CreateButton(nameRowObj, "ApplyNameButton", "Apply", OnApplyNameClicked); - UIFactory.SetLayoutElement(applyNameBtn.gameObject, minWidth: 65, minHeight: 25, flexibleHeight: 0); - var applyNameRect = applyNameBtn.GetComponent(); - applyNameRect.sizeDelta = new Vector2(applyNameRect.sizeDelta.x, 25); - - var activeLabel = UIFactory.CreateLabel(nameRowObj, "ActiveLabel", "Active:", TextAnchor.MiddleCenter, Color.grey, true, 14); - UIFactory.SetLayoutElement(activeLabel.gameObject, minWidth: 55, minHeight: 25); - - var enabledToggleObj = UIFactory.CreateToggle(nameRowObj, "EnabledToggle", out m_enabledToggle, out m_enabledText); - UIFactory.SetLayoutElement(enabledToggleObj, minHeight: 25, minWidth: 100, flexibleWidth: 0); - m_enabledText.text = "Enabled"; - m_enabledText.color = Color.green; - m_enabledToggle.onValueChanged.AddListener(OnEnableToggled); - - // layer and scene row - - var sceneLayerRow = UIFactory.CreateHorizontalGroup(scrollContent, "SceneLayerRow", false, true, true, true, 5, default, new Color(0.1f, 0.1f, 0.1f)); - - // layer - - var layerLabel = UIFactory.CreateLabel(sceneLayerRow, "LayerLabel", "Layer:", TextAnchor.MiddleCenter, Color.grey, true, 14); - UIFactory.SetLayoutElement(layerLabel.gameObject, minWidth: 55, flexibleWidth: 0); - - var layerDropdownObj = UIFactory.CreateDropdown(sceneLayerRow, out m_layerDropdown, "", 14, OnLayerSelected); - m_layerDropdown.options.Clear(); - for (int i = 0; i < 32; i++) - { - var layer = RuntimeProvider.Instance.LayerToName(i); - m_layerDropdown.options.Add(new Dropdown.OptionData { text = $"{i}: {layer}" }); - } - UIFactory.SetLayoutElement(layerDropdownObj, minWidth: 120, flexibleWidth: 2000, minHeight: 25); - - // scene - - var sceneLabel = UIFactory.CreateLabel(sceneLayerRow, "SceneLabel", "Scene:", TextAnchor.MiddleCenter, Color.grey, true, 14); - UIFactory.SetLayoutElement(sceneLabel.gameObject, minWidth: 55, flexibleWidth: 0); - - m_sceneText = UIFactory.CreateLabel(sceneLayerRow, "SceneText", "", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(m_sceneText.gameObject, minWidth: 120, flexibleWidth: 2000); - } - - private GameObject ConstructMidGroup(GameObject parent) - { - var midGroupObj = UIFactory.CreateHorizontalGroup(parent, "MidGroup", true, true, true, true, 5, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(midGroupObj, minHeight: 300, flexibleHeight: 3000); - return midGroupObj; - } - #endregion - } -} diff --git a/src/UI/Inspectors/InspectUnderMouse.cs b/src/UI/Inspectors/InspectUnderMouse.cs deleted file mode 100644 index ae837c6..0000000 --- a/src/UI/Inspectors/InspectUnderMouse.cs +++ /dev/null @@ -1,328 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.UI; -using UnityExplorer.Core; -using UnityExplorer.Core.Unity; -using UnityExplorer.Core.Input; -using UnityExplorer.Core.Runtime; -using UnityExplorer.UI; -using UnityExplorer.UI.Main; -using UnityExplorer.UI.Inspectors; - -namespace UnityExplorer.UI.Main.Home -{ - public class InspectUnderMouse - { - public enum MouseInspectMode - { - World, - UI - } - - public static bool Inspecting { get; set; } - - public static MouseInspectMode Mode { get; set; } - - private static GameObject s_lastHit; - private static Vector3 s_lastMousePos; - - private static readonly List _wasDisabledGraphics = new List(); - private static readonly List _wasDisabledCanvasGroups = new List(); - private static readonly List _objectsAddedCastersTo = new List(); - - internal static Camera MainCamera; - internal static GraphicRaycaster[] graphicRaycasters; - - public static void Init() - { - ConstructUI(); - } - - public static void StartInspect(MouseInspectMode mode) - { - MainCamera = Camera.main; - if (!MainCamera) - return; - - Mode = mode; - Inspecting = true; - MainMenu.Instance.MainPanel.SetActive(false); - - s_UIContent.SetActive(true); - - if (mode == MouseInspectMode.UI) - SetupUIRaycast(); - } - - internal static void ClearHitData() - { - s_lastHit = null; - s_objNameLabel.text = "No hits..."; - s_objPathLabel.text = ""; - } - - public static void StopInspect() - { - Inspecting = false; - MainMenu.Instance.MainPanel.SetActive(true); - s_UIContent.SetActive(false); - - if (Mode == MouseInspectMode.UI) - StopUIInspect(); - - ClearHitData(); - } - - public static void UpdateInspect() - { - if (InputManager.GetKeyDown(KeyCode.Escape)) - { - StopInspect(); - return; - } - - var mousePos = InputManager.MousePosition; - - if (mousePos != s_lastMousePos) - UpdatePosition(mousePos); - - // actual inspect raycast - - switch (Mode) - { - case MouseInspectMode.UI: - RaycastUI(mousePos); break; - case MouseInspectMode.World: - RaycastWorld(mousePos); break; - } - } - - internal static void UpdatePosition(Vector2 mousePos) - { - s_lastMousePos = mousePos; - - var inversePos = UIManager.CanvasRoot.transform.InverseTransformPoint(mousePos); - - s_mousePosLabel.text = $"Mouse Position: {mousePos.ToString()}"; - - float yFix = mousePos.y < 120 ? 80 : -80; - s_UIContent.transform.localPosition = new Vector3(inversePos.x, inversePos.y + yFix, 0); - } - - internal static void OnHitGameObject(GameObject obj) - { - if (obj != s_lastHit) - { - s_lastHit = obj; - s_objNameLabel.text = $"Click to Inspect: {obj.name}"; - s_objPathLabel.text = $"Path: {obj.transform.GetTransformPath(true)}"; - } - - if (InputManager.GetMouseButtonDown(0)) - { - StopInspect(); - InspectorManager.Instance.Inspect(obj); - } - } - - // Collider raycasting - - internal static void RaycastWorld(Vector2 mousePos) - { - var ray = MainCamera.ScreenPointToRay(mousePos); - Physics.Raycast(ray, out RaycastHit hit, 1000f); - - if (hit.transform) - { - var obj = hit.transform.gameObject; - OnHitGameObject(obj); - } - else - { - if (s_lastHit) - ClearHitData(); - } - } - - // UI Graphic raycasting - - private static void SetupUIRaycast() - { - foreach (var obj in RuntimeProvider.Instance.FindObjectsOfTypeAll(typeof(Canvas))) - { - var canvas = obj.Cast(typeof(Canvas)) as Canvas; - if (!canvas || !canvas.enabled || !canvas.gameObject.activeInHierarchy) - continue; - if (!canvas.GetComponent()) - { - canvas.gameObject.AddComponent(); - //ExplorerCore.Log("Added raycaster to " + canvas.name); - _objectsAddedCastersTo.Add(canvas.gameObject); - } - } - - // recache Graphic Raycasters each time we start - var casters = RuntimeProvider.Instance.FindObjectsOfTypeAll(typeof(GraphicRaycaster)); - graphicRaycasters = new GraphicRaycaster[casters.Length]; - for (int i = 0; i < casters.Length; i++) - { - graphicRaycasters[i] = casters[i].Cast(typeof(GraphicRaycaster)) as GraphicRaycaster; - } - - // enable raycastTarget on Graphics - foreach (var obj in RuntimeProvider.Instance.FindObjectsOfTypeAll(typeof(Graphic))) - { - var graphic = obj.Cast(typeof(Graphic)) as Graphic; - if (!graphic || !graphic.enabled || graphic.raycastTarget || !graphic.gameObject.activeInHierarchy) - continue; - graphic.raycastTarget = true; - //ExplorerCore.Log("Enabled raycastTarget on " + graphic.name); - _wasDisabledGraphics.Add(graphic); - } - - // enable blocksRaycasts on CanvasGroups - foreach (var obj in RuntimeProvider.Instance.FindObjectsOfTypeAll(typeof(CanvasGroup))) - { - var canvas = obj.Cast(typeof(CanvasGroup)) as CanvasGroup; - if (!canvas || !canvas.gameObject.activeInHierarchy || canvas.blocksRaycasts) - continue; - canvas.blocksRaycasts = true; - //ExplorerCore.Log("Enabled raycasts on " + canvas.name); - _wasDisabledCanvasGroups.Add(canvas); - } - } - - internal static void RaycastUI(Vector2 mousePos) - { - var ped = new PointerEventData(null) - { - position = mousePos - }; - - //ExplorerCore.Log("~~~~~~~~~ begin raycast ~~~~~~~~"); - GameObject hitObject = null; - int highestLayer = int.MinValue; - int highestOrder = int.MinValue; - int highestDepth = int.MinValue; - foreach (var gr in graphicRaycasters) - { - var list = new List(); - RuntimeProvider.Instance.GraphicRaycast(gr, ped, list); - - //gr.Raycast(ped, list); - - if (list.Count > 0) - { - foreach (var hit in list) - { - // Manual trying to determine which object is "on top". - // Not perfect, but not terrible. - - if (!hit.gameObject) - continue; - - if (hit.gameObject.GetComponent() is CanvasGroup group && group.alpha == 0) - continue; - - if (hit.gameObject.GetComponent() is Graphic graphic && graphic.color.a == 0f) - continue; - - if (hit.sortingLayer < highestLayer) - continue; - - if (hit.sortingLayer > highestLayer) - { - highestLayer = hit.sortingLayer; - highestDepth = int.MinValue; - } - - if (hit.depth < highestDepth) - continue; - - if (hit.depth > highestDepth) - { - highestDepth = hit.depth; - highestOrder = int.MinValue; - } - - if (hit.sortingOrder <= highestOrder) - continue; - - highestOrder = hit.sortingOrder; - hitObject = hit.gameObject; - } - } - else - { - if (s_lastHit) - ClearHitData(); - } - } - - if (hitObject) - OnHitGameObject(hitObject); - - //ExplorerCore.Log("~~~~~~~~~ end raycast ~~~~~~~~"); - } - - private static void StopUIInspect() - { - foreach (var obj in _objectsAddedCastersTo) - { - if (obj.GetComponent() is GraphicRaycaster raycaster) - GameObject.Destroy(raycaster); - } - - foreach (var graphic in _wasDisabledGraphics) - graphic.raycastTarget = false; - - foreach (var canvas in _wasDisabledCanvasGroups) - canvas.blocksRaycasts = false; - - _objectsAddedCastersTo.Clear(); - _wasDisabledCanvasGroups.Clear(); - _wasDisabledGraphics.Clear(); - } - - internal static Text s_objNameLabel; - internal static Text s_objPathLabel; - internal static Text s_mousePosLabel; - internal static GameObject s_UIContent; - - internal static void ConstructUI() - { - s_UIContent = UIFactory.CreatePanel("InspectUnderMouse_UI", out GameObject content); - - var baseRect = s_UIContent.GetComponent(); - var half = new Vector2(0.5f, 0.5f); - baseRect.anchorMin = half; - baseRect.anchorMax = half; - baseRect.pivot = half; - baseRect.sizeDelta = new Vector2(700, 150); - - var group = content.GetComponent(); - group.childForceExpandHeight = true; - - // Title text - - UIFactory.CreateLabel(content, "InspectLabel", "Mouse Inspector (press ESC to cancel)", TextAnchor.MiddleCenter); - - s_mousePosLabel = UIFactory.CreateLabel(content, "MousePosLabel", "Mouse Position:", TextAnchor.MiddleCenter); - - s_objNameLabel = UIFactory.CreateLabel(content, "HitLabelObj", "No hits...", TextAnchor.MiddleLeft); - s_objNameLabel.horizontalOverflow = HorizontalWrapMode.Overflow; - - s_objPathLabel = UIFactory.CreateLabel(content, "PathLabel", "", TextAnchor.MiddleLeft); - s_objPathLabel.fontStyle = FontStyle.Italic; - s_objPathLabel.horizontalOverflow = HorizontalWrapMode.Wrap; - - UIFactory.SetLayoutElement(s_objPathLabel.gameObject, minHeight: 75); - - s_UIContent.SetActive(false); - } - } -} diff --git a/src/UI/Inspectors/InspectorBase.cs b/src/UI/Inspectors/InspectorBase.cs deleted file mode 100644 index 2e167c0..0000000 --- a/src/UI/Inspectors/InspectorBase.cs +++ /dev/null @@ -1,120 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Unity; - -namespace UnityExplorer.UI.Inspectors -{ - public abstract class InspectorBase - { - public object Target; - public bool IsActive { get; private set; } - - public abstract string TabLabel { get; } - - internal bool m_pendingDestroy; - - public InspectorBase(object target) - { - Target = target; - - if (Target.IsNullOrDestroyed(false)) - { - Destroy(); - return; - } - - AddInspectorTab(this); - } - - public virtual void SetActive() - { - this.IsActive = true; - Content?.SetActive(true); - } - - public virtual void SetInactive() - { - this.IsActive = false; - Content?.SetActive(false); - } - - public virtual void Update() - { - if (Target.IsNullOrDestroyed(false)) - { - Destroy(); - return; - } - - m_tabText.text = TabLabel; - } - - public virtual void Destroy() - { - m_pendingDestroy = true; - - GameObject tabGroup = m_tabButton?.transform.parent.gameObject; - - if (tabGroup) - GameObject.Destroy(tabGroup); - - int thisIndex = -1; - if (InspectorManager.Instance.m_currentInspectors.Contains(this)) - { - thisIndex = InspectorManager.Instance.m_currentInspectors.IndexOf(this); - InspectorManager.Instance.m_currentInspectors.Remove(this); - } - - if (ReferenceEquals(InspectorManager.Instance.m_activeInspector, this)) - { - InspectorManager.Instance.UnsetInspectorTab(); - - if (InspectorManager.Instance.m_currentInspectors.Count > 0) - { - var prevTab = InspectorManager.Instance.m_currentInspectors[thisIndex > 0 ? thisIndex - 1 : 0]; - InspectorManager.Instance.SetInspectorTab(prevTab); - } - } - } - - #region UI - - public abstract GameObject Content { get; set; } - public Button m_tabButton; - public Text m_tabText; - - public void AddInspectorTab(InspectorBase parent) - { - var tabContent = InspectorManager.m_tabBarContent; - - var tabGroupObj = UIFactory.CreateHorizontalGroup(tabContent, "TabObject", true, true, true, true); - UIFactory.SetLayoutElement(tabGroupObj, minWidth: 185, flexibleWidth: 0); - tabGroupObj.AddComponent(); - - m_tabButton = UIFactory.CreateButton(tabGroupObj, - "TabButton", - "", - () => { InspectorManager.Instance.SetInspectorTab(parent); }); - - UIFactory.SetLayoutElement(m_tabButton.gameObject, minWidth: 165, flexibleWidth: 0); - - m_tabText = m_tabButton.GetComponentInChildren(); - m_tabText.horizontalOverflow = HorizontalWrapMode.Overflow; - m_tabText.alignment = TextAnchor.MiddleLeft; - - var closeBtn = UIFactory.CreateButton(tabGroupObj, - "CloseButton", - "X", - parent.Destroy, - new Color(0.2f, 0.2f, 0.2f, 1)); - - UIFactory.SetLayoutElement(closeBtn.gameObject, minWidth: 20, flexibleWidth: 0); - - var closeBtnText = closeBtn.GetComponentInChildren(); - closeBtnText.color = new Color(1, 0, 0, 1); - } - - #endregion - } -} diff --git a/src/UI/Inspectors/InspectorManager.cs b/src/UI/Inspectors/InspectorManager.cs deleted file mode 100644 index 739a193..0000000 --- a/src/UI/Inspectors/InspectorManager.cs +++ /dev/null @@ -1,204 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI; -using UnityExplorer.UI.Main; -using UnityEngine; -using UnityEngine.SceneManagement; -using UnityEngine.UI; -using UnityExplorer.Core.Runtime; -using UnityExplorer.UI.Main.Home; -using UnityExplorer.UI.CacheObject; -using UnityExplorer.UI.Inspectors.GameObjects; -using UnityExplorer.UI.Inspectors.Reflection; - -namespace UnityExplorer.UI.Inspectors -{ - public class InspectorManager - { - public static InspectorManager Instance { get; private set; } - - public InspectorManager() - { - Instance = this; - - ConstructInspectorPane(); - } - - public InspectorBase m_activeInspector; - public readonly List m_currentInspectors = new List(); - - public void Update() - { - for (int i = 0; i < m_currentInspectors.Count; i++) - { - if (i >= m_currentInspectors.Count) - break; - - m_currentInspectors[i].Update(); - } - } - - public void Inspect(object obj, CacheObjectBase parentMember = null) - { - obj = ReflectionProvider.Instance.Cast(obj, ReflectionProvider.Instance.GetActualType(obj)); - - UnityEngine.Object unityObj = obj as UnityEngine.Object; - - if (obj.IsNullOrDestroyed(false)) - { - return; - } - - // check if currently inspecting this object - foreach (InspectorBase tab in m_currentInspectors) - { - if (RuntimeProvider.Instance.IsReferenceEqual(obj, tab.Target)) - { - SetInspectorTab(tab); - return; - } - } - - InspectorBase inspector; - if (obj is GameObject go) - inspector = new GameObjectInspector(go); - else - inspector = new InstanceInspector(obj); - - if (inspector is ReflectionInspector ri) - ri.ParentMember = parentMember; - - m_currentInspectors.Add(inspector); - SetInspectorTab(inspector); - } - - public void Inspect(Type type) - { - if (type == null) - { - ExplorerCore.LogWarning("The provided type was null!"); - return; - } - - foreach (var tab in m_currentInspectors.Where(x => x is StaticInspector)) - { - if (ReferenceEquals(tab.Target as Type, type)) - { - SetInspectorTab(tab); - return; - } - } - - var inspector = new StaticInspector(type); - - m_currentInspectors.Add(inspector); - SetInspectorTab(inspector); - } - - public void SetInspectorTab(InspectorBase inspector) - { - MainMenu.Instance.SetPage(HomePage.Instance); - - if (m_activeInspector == inspector) - return; - - UnsetInspectorTab(); - - m_activeInspector = inspector; - inspector.SetActive(); - - OnSetInspectorTab(inspector); - } - - public void UnsetInspectorTab() - { - if (m_activeInspector == null) - return; - - m_activeInspector.SetInactive(); - - OnUnsetInspectorTab(); - - m_activeInspector = null; - } - - public static GameObject m_tabBarContent; - public static GameObject m_inspectorContent; - - public void OnSetInspectorTab(InspectorBase inspector) - { - Color activeColor = new Color(0, 0.25f, 0, 1); - RuntimeProvider.Instance.SetColorBlock(inspector.m_tabButton, activeColor, activeColor); - } - - public void OnUnsetInspectorTab() - { - RuntimeProvider.Instance.SetColorBlock(m_activeInspector.m_tabButton, - new Color(0.2f, 0.2f, 0.2f, 1), new Color(0.1f, 0.3f, 0.1f, 1)); - } - - public void ConstructInspectorPane() - { - var mainObj = UIFactory.CreateVerticalGroup(HomePage.Instance.Content, - "InspectorManager_Root", - true, true, true, true, - 4, - new Vector4(4,4,4,4)); - - UIFactory.SetLayoutElement(mainObj, preferredHeight: 400, flexibleHeight: 9000, preferredWidth: 620, flexibleWidth: 9000); - - var topRowObj = UIFactory.CreateHorizontalGroup(mainObj, "TopRow", false, true, true, true, 15); - - var inspectorTitle = UIFactory.CreateLabel(topRowObj, "Title", "Inspector", TextAnchor.MiddleLeft, default, true, 25); - - UIFactory.SetLayoutElement(inspectorTitle.gameObject, minHeight: 30, flexibleHeight: 0, minWidth: 90, flexibleWidth: 20000); - - ConstructToolbar(topRowObj); - - // inspector tab bar - - m_tabBarContent = UIFactory.CreateGridGroup(mainObj, "TabHolder", new Vector2(185, 20), new Vector2(5, 2), new Color(0.1f, 0.1f, 0.1f, 1)); - - var gridGroup = m_tabBarContent.GetComponent(); - gridGroup.padding.top = 3; - gridGroup.padding.left = 3; - gridGroup.padding.right = 3; - gridGroup.padding.bottom = 3; - - // inspector content area - - m_inspectorContent = UIFactory.CreateVerticalGroup(mainObj, "InspectorContent", - true, true, true, true, - 0, - new Vector4(2,2,2,2), - new Color(0.1f, 0.1f, 0.1f)); - - UIFactory.SetLayoutElement(m_inspectorContent, preferredHeight: 900, flexibleHeight: 10000, preferredWidth: 600, flexibleWidth: 10000); - } - - private static void ConstructToolbar(GameObject topRowObj) - { - // invisible group - UIFactory.CreateHorizontalGroup(topRowObj, "Toolbar", false, false, true, true, 10, new Vector4(2, 2, 2, 2), new Color(1,1,1,0)); - - // inspect under mouse button - AddMouseInspectButton(topRowObj, "UI", InspectUnderMouse.MouseInspectMode.UI); - AddMouseInspectButton(topRowObj, "3D", InspectUnderMouse.MouseInspectMode.World); - } - - private static void AddMouseInspectButton(GameObject topRowObj, string suffix, InspectUnderMouse.MouseInspectMode mode) - { - string lbl = $"Mouse Inspect ({suffix})"; - - var inspectObj = UIFactory.CreateButton(topRowObj, - lbl, - lbl, - () => { InspectUnderMouse.StartInspect(mode); }, - new Color(0.2f, 0.2f, 0.2f)); - - UIFactory.SetLayoutElement(inspectObj.gameObject, minWidth: 150, flexibleWidth: 0); - } - } -} diff --git a/src/UI/Inspectors/Reflection/InstanceInspector.cs b/src/UI/Inspectors/Reflection/InstanceInspector.cs deleted file mode 100644 index 8806b4a..0000000 --- a/src/UI/Inspectors/Reflection/InstanceInspector.cs +++ /dev/null @@ -1,253 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core; -using UnityExplorer.Core.Config; -using UnityExplorer.Core.Runtime; - -namespace UnityExplorer.UI.Inspectors.Reflection -{ - public enum MemberScopes - { - All, - Instance, - Static - } - - public class InstanceInspector : ReflectionInspector - { - public override string TabLabel => $" [R] {base.TabLabel}"; - - internal MemberScopes m_scopeFilter; - internal Button m_lastActiveScopeButton; - - public InstanceInspector(object target) : base(target) { } - - internal void OnScopeFilterClicked(MemberScopes type, Button button) - { - if (m_lastActiveScopeButton) - RuntimeProvider.Instance.SetColorBlock(m_lastActiveScopeButton, new Color(0.2f, 0.2f, 0.2f)); - - m_scopeFilter = type; - m_lastActiveScopeButton = button; - - RuntimeProvider.Instance.SetColorBlock(m_lastActiveScopeButton, new Color(0.2f, 0.6f, 0.2f)); - - FilterMembers(null, true); - m_sliderScroller.m_slider.value = 1f; - } - - public void ConstructUnityInstanceHelpers() - { - if (!typeof(UnityEngine.Object).IsAssignableFrom(m_targetType)) - return; - - var rowObj = UIFactory.CreateHorizontalGroup(Content, "InstanceHelperRow", true, true, true, true, 5, new Vector4(2,2,2,2), - new Color(0.1f, 0.1f, 0.1f)); - UIFactory.SetLayoutElement(rowObj, minHeight: 25, flexibleWidth: 5000); - - if (typeof(Component).IsAssignableFrom(m_targetType)) - ConstructCompHelper(rowObj); - - ConstructUnityObjHelper(rowObj); - - if (m_targetType == typeof(Texture2D)) - ConstructTextureHelper(); - } - - internal void ConstructCompHelper(GameObject rowObj) - { - var gameObjectLabel = UIFactory.CreateLabel(rowObj, "GameObjectLabel", "GameObject:", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(gameObjectLabel.gameObject, minWidth: 90, minHeight: 25, flexibleWidth: 0); - - var comp = Target.Cast(typeof(Component)) as Component; - - var btn = UIFactory.CreateButton(rowObj, - "GameObjectButton", - comp.name, - () => { InspectorManager.Instance.Inspect(comp.gameObject); }, - new Color(0.2f, 0.5f, 0.2f)); - UIFactory.SetLayoutElement(btn.gameObject, minHeight: 25, minWidth: 200, flexibleWidth: 0); - } - - internal void ConstructUnityObjHelper(GameObject rowObj) - { - var label = UIFactory.CreateLabel(rowObj, "NameLabel", "Name:", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(label.gameObject, minWidth: 60, minHeight: 25, flexibleWidth: 0); - - var uObj = Target.Cast(typeof(UnityEngine.Object)) as UnityEngine.Object; - - var inputObj = UIFactory.CreateInputField(rowObj, "NameInput", "...", 14, 3, 1); - UIFactory.SetLayoutElement(inputObj, minHeight: 25, flexibleWidth: 2000); - var inputField = inputObj.GetComponent(); - inputField.readOnly = true; - inputField.text = uObj.name; - } - - internal bool showingTextureHelper; - internal bool constructedTextureViewer; - - internal GameObject m_textureViewerObj; - - internal void ConstructTextureHelper() - { - var rowObj = UIFactory.CreateHorizontalGroup(Content, "TextureHelper", true, false, true, true, 5, new Vector4(3,3,3,3), - new Color(0.1f, 0.1f, 0.1f)); - UIFactory.SetLayoutElement(rowObj, minHeight: 25, flexibleHeight: 0); - - var showBtn = UIFactory.CreateButton(rowObj, "ShowButton", "Show", null, new Color(0.2f, 0.6f, 0.2f)); - UIFactory.SetLayoutElement(showBtn.gameObject, minWidth: 50, flexibleWidth: 0); - - UIFactory.CreateLabel(rowObj, "TextureViewerLabel", "Texture Viewer", TextAnchor.MiddleLeft); - - var textureViewerObj = UIFactory.CreateScrollView(Content, "TextureViewerContent", out GameObject scrollContent, out _, new Color(0.1f, 0.1f, 0.1f)); - UIFactory.SetLayoutGroup(textureViewerObj, false, false, true, true); - UIFactory.SetLayoutElement(textureViewerObj, minHeight: 100, flexibleHeight: 9999, flexibleWidth: 9999); - - textureViewerObj.SetActive(false); - - m_textureViewerObj = textureViewerObj; - - var showText = showBtn.GetComponentInChildren(); - showBtn.onClick.AddListener(() => - { - showingTextureHelper = !showingTextureHelper; - - if (showingTextureHelper) - { - if (!constructedTextureViewer) - ConstructTextureViewerArea(scrollContent); - - showText.text = "Hide"; - ToggleTextureViewer(true); - } - else - { - showText.text = "Show"; - ToggleTextureViewer(false); - } - }); - } - - internal void ConstructTextureViewerArea(GameObject parent) - { - constructedTextureViewer = true; - - var tex = Target.Cast(typeof(Texture2D)) as Texture2D; - - if (!tex) - { - ExplorerCore.LogWarning("Could not cast the target instance to Texture2D! Maybe its null or destroyed?"); - return; - } - - // Save helper - - var saveRowObj = UIFactory.CreateHorizontalGroup(parent, "SaveRow", true, true, true, true, 2, new Vector4(2,2,2,2), - new Color(0.1f, 0.1f, 0.1f)); - - var saveBtn = UIFactory.CreateButton(saveRowObj, "SaveButton", "Save .PNG", null, new Color(0.2f, 0.2f, 0.2f)); - UIFactory.SetLayoutElement(saveBtn.gameObject, minHeight: 25, minWidth: 100, flexibleWidth: 0); - - var inputObj = UIFactory.CreateInputField(saveRowObj, "SaveInput", "..."); - UIFactory.SetLayoutElement(inputObj, minHeight: 25, minWidth: 100, flexibleWidth: 9999); - var inputField = inputObj.GetComponent(); - - var name = tex.name; - if (string.IsNullOrEmpty(name)) - name = "untitled"; - - inputField.text = Path.Combine(ConfigManager.Default_Output_Path.Value, $"{name}.png"); - - saveBtn.onClick.AddListener(() => - { - if (tex && !string.IsNullOrEmpty(inputField.text)) - { - var path = inputField.text; - if (!path.EndsWith(".png", StringComparison.InvariantCultureIgnoreCase)) - { - ExplorerCore.LogWarning("Desired save path must end with '.png'!"); - return; - } - - var dir = Path.GetDirectoryName(path); - if (!Directory.Exists(dir)) - Directory.CreateDirectory(dir); - - if (File.Exists(path)) - File.Delete(path); - - if (!TextureUtilProvider.IsReadable(tex)) - tex = TextureUtilProvider.ForceReadTexture(tex); - - byte[] data = TextureUtilProvider.Instance.EncodeToPNG(tex); - - File.WriteAllBytes(path, data); - } - }); - - // Actual texture viewer - - var imageObj = UIFactory.CreateUIObject("TextureViewerImage", parent); - var image = imageObj.AddComponent(); - var sprite = TextureUtilProvider.Instance.CreateSprite(tex); - image.sprite = sprite; - - var fitter = imageObj.AddComponent(); - fitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; - - var imageLayout = imageObj.AddComponent(); - imageLayout.preferredHeight = sprite.rect.height; - imageLayout.preferredWidth = sprite.rect.width; - } - - internal void ToggleTextureViewer(bool enabled) - { - m_textureViewerObj.SetActive(enabled); - - m_filterAreaObj.SetActive(!enabled); - m_memberListObj.SetActive(!enabled); - m_updateRowObj.SetActive(!enabled); - } - - public void ConstructInstanceFilters(GameObject parent) - { - var memberFilterRowObj = UIFactory.CreateHorizontalGroup(parent, "InstanceFilterRow", false, false, true, true, 5, default, - new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(memberFilterRowObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 5000); - - var memLabel = UIFactory.CreateLabel(memberFilterRowObj, "MemberLabel", "Filter scope:", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(memLabel.gameObject, minWidth: 100, minHeight: 25, flexibleWidth: 0); - - AddFilterButton(memberFilterRowObj, MemberScopes.All, true); - AddFilterButton(memberFilterRowObj, MemberScopes.Instance); - AddFilterButton(memberFilterRowObj, MemberScopes.Static); - } - - private void AddFilterButton(GameObject parent, MemberScopes type, bool setEnabled = false) - { - var btn = UIFactory.CreateButton(parent, - "ScopeFilterButton_" + type, - type.ToString(), - null, - new Color(0.2f, 0.2f, 0.2f)); - - UIFactory.SetLayoutElement(btn.gameObject, minHeight: 25, minWidth: 70); - - btn.onClick.AddListener(() => { OnScopeFilterClicked(type, btn); }); - - RuntimeProvider.Instance.SetColorBlock(btn, highlighted: new Color(0.3f, 0.7f, 0.3f)); - - if (setEnabled) - { - RuntimeProvider.Instance.SetColorBlock(btn, new Color(0.2f, 0.6f, 0.2f)); - m_scopeFilter = type; - m_lastActiveScopeButton = btn; - } - } - } -} diff --git a/src/UI/Inspectors/Reflection/ReflectionInspector.cs b/src/UI/Inspectors/Reflection/ReflectionInspector.cs deleted file mode 100644 index 0787477..0000000 --- a/src/UI/Inspectors/Reflection/ReflectionInspector.cs +++ /dev/null @@ -1,518 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core; -using UnityExplorer.Core.Config; -using UnityExplorer.Core.Runtime; -using UnityExplorer.UI.CacheObject; -using UnityExplorer.UI.Main; -using UnityExplorer.UI.Main.Home; -using UnityExplorer.UI.Utility; - -namespace UnityExplorer.UI.Inspectors.Reflection -{ - public class ReflectionInspector : InspectorBase - { - #region STATIC - - public static ReflectionInspector ActiveInstance { get; private set; } - - static ReflectionInspector() - { - PanelDragger.OnFinishResize += (RectTransform _) => OnContainerResized(); - SceneExplorer.OnToggleShow += OnContainerResized; - } - - private static void OnContainerResized(bool _ = false) - { - if (ActiveInstance == null) - return; - - ActiveInstance.m_widthUpdateWanted = true; - } - - // Blacklists - private static readonly HashSet bl_typeAndMember = new HashSet - { -#if CPP - // these cause a crash in IL2CPP - "Type.DeclaringMethod", - "Rigidbody2D.Cast", - "Collider2D.Cast", - "Collider2D.Raycast", - "Texture2D.SetPixelDataImpl", - "Camera.CalculateProjectionMatrixFromPhysicalProperties", -#endif - }; - private static readonly HashSet bl_memberNameStartsWith = new HashSet - { - // these are redundant - "get_", - "set_", - }; - - #endregion - - #region INSTANCE - - public override string TabLabel => m_targetTypeShortName; - - internal CacheObjectBase ParentMember { get; set; } - - internal readonly Type m_targetType; - internal readonly string m_targetTypeShortName; - - // all cached members of the target - internal CacheMember[] m_allMembers; - // filtered members based on current filters - internal readonly List m_membersFiltered = new List(); - // actual shortlist of displayed members - internal readonly CacheMember[] m_displayedMembers = new CacheMember[ConfigManager.Default_Page_Limit.Value]; - - internal bool m_autoUpdate; - - public ReflectionInspector(object target) : base(target) - { - if (this is StaticInspector) - m_targetType = target as Type; - else - m_targetType = ReflectionUtility.GetActualType(target); - - m_targetTypeShortName = SignatureHighlighter.ParseFullSyntax(m_targetType, false); - - ConstructUI(); - - CacheMembers(m_targetType); - - FilterMembers(); - } - - public override void SetActive() - { - base.SetActive(); - ActiveInstance = this; - } - - public override void SetInactive() - { - base.SetInactive(); - ActiveInstance = null; - } - - public override void Destroy() - { - base.Destroy(); - - if (this.Content) - GameObject.Destroy(this.Content); - } - - internal void OnPageTurned() - { - RefreshDisplay(); - } - - internal bool IsBlacklisted(string sig) => bl_typeAndMember.Any(it => sig.Contains(it)); - internal bool IsBlacklisted(MethodInfo method) => bl_memberNameStartsWith.Any(it => method.Name.StartsWith(it)); - - internal string GetSig(MemberInfo member) => $"{member.DeclaringType.Name}.{member.Name}"; - internal string AppendArgsToSig(ParameterInfo[] args) - { - string ret = " ("; - foreach (var param in args) - ret += $"{param.ParameterType.Name} {param.Name}, "; - ret += ")"; - return ret; - } - - public void CacheMembers(Type type) - { - var list = new List(); - var cachedSigs = new HashSet(); - - var types = ReflectionUtility.GetAllBaseTypes(type); - - var flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static; - if (this is InstanceInspector) - flags |= BindingFlags.Instance; - - foreach (var declaringType in types) - { - var target = Target; - target = target.Cast(declaringType); - - IEnumerable infos = declaringType.GetMethods(flags); - infos = infos.Concat(declaringType.GetProperties(flags)); - infos = infos.Concat(declaringType.GetFields(flags)); - - foreach (var member in infos) - { - try - { - var sig = GetSig(member); - - //ExplorerCore.Log($"Trying to cache member {sig}..."); - //ExplorerCore.Log(member.DeclaringType.FullName + "." + member.Name); - - var mi = member as MethodInfo; - var pi = member as PropertyInfo; - var fi = member as FieldInfo; - - if (IsBlacklisted(sig) || (mi != null && IsBlacklisted(mi))) - continue; - - var args = mi?.GetParameters() ?? pi?.GetIndexParameters(); - if (args != null) - { - if (!CacheMember.CanProcessArgs(args)) - continue; - - sig += AppendArgsToSig(args); - } - - if (cachedSigs.Contains(sig)) - continue; - - cachedSigs.Add(sig); - - if (mi != null) - list.Add(new CacheMethod(mi, target, m_scrollContent)); - else if (pi != null) - list.Add(new CacheProperty(pi, target, m_scrollContent)); - else - list.Add(new CacheField(fi, target, m_scrollContent)); - - list.Last().ParentInspector = this; - } - catch (Exception e) - { - ExplorerCore.LogWarning($"Exception caching member {member.DeclaringType.FullName}.{member.Name}!"); - ExplorerCore.Log(e.ToString()); - } - } - } - - var typeList = types.ToList(); - - var sorted = new List(); - sorted.AddRange(list.Where(it => it is CacheMethod) - .OrderBy(it => typeList.IndexOf(it.DeclaringType)) - .ThenBy(it => it.NameForFiltering)); - sorted.AddRange(list.Where(it => it is CacheProperty) - .OrderBy(it => typeList.IndexOf(it.DeclaringType)) - .ThenBy(it => it.NameForFiltering)); - sorted.AddRange(list.Where(it => it is CacheField) - .OrderBy(it => typeList.IndexOf(it.DeclaringType)) - .ThenBy(it => it.NameForFiltering)); - - m_allMembers = sorted.ToArray(); - } - - public override void Update() - { - base.Update(); - - if (m_autoUpdate) - { - foreach (var member in m_displayedMembers) - { - if (member == null) break; - member.UpdateValue(); - } - } - - if (m_widthUpdateWanted) - { - if (!m_widthUpdateWaiting) - m_widthUpdateWaiting = true; - else - { - UpdateWidths(); - m_widthUpdateWaiting = false; - m_widthUpdateWanted = false; - } - } - } - - internal void OnMemberFilterClicked(MemberTypes type, Button button) - { - if (m_lastActiveMemButton) - RuntimeProvider.Instance.SetColorBlock(m_lastActiveMemButton, new Color(0.2f, 0.2f, 0.2f)); - - m_memberFilter = type; - m_lastActiveMemButton = button; - - RuntimeProvider.Instance.SetColorBlock(m_lastActiveMemButton, new Color(0.2f, 0.6f, 0.2f)); - - FilterMembers(null, true); - m_sliderScroller.m_slider.value = 1f; - } - - public void FilterMembers(string nameFilter = null, bool force = false) - { - int lastCount = m_membersFiltered.Count; - m_membersFiltered.Clear(); - - nameFilter = nameFilter?.ToLower() ?? m_nameFilterText.text.ToLower(); - - foreach (var mem in m_allMembers) - { - // membertype filter - if (m_memberFilter != MemberTypes.All && mem.MemInfo.MemberType != m_memberFilter) - continue; - - if (this is InstanceInspector ii && ii.m_scopeFilter != MemberScopes.All) - { - if (mem.IsStatic && ii.m_scopeFilter != MemberScopes.Static) - continue; - else if (!mem.IsStatic && ii.m_scopeFilter != MemberScopes.Instance) - continue; - } - - // name filter - if (!string.IsNullOrEmpty(nameFilter) && !mem.NameForFiltering.Contains(nameFilter)) - continue; - - m_membersFiltered.Add(mem); - } - - if (force || lastCount != m_membersFiltered.Count) - RefreshDisplay(); - } - - public void RefreshDisplay() - { - var members = m_membersFiltered; - m_pageHandler.ListCount = members.Count; - - // disable current members - for (int i = 0; i < m_displayedMembers.Length; i++) - { - var mem = m_displayedMembers[i]; - if (mem != null) - mem.Disable(); - else - break; - } - - if (members.Count < 1) - return; - - foreach (var itemIndex in m_pageHandler) - { - if (itemIndex >= members.Count) - break; - - CacheMember member = members[itemIndex]; - m_displayedMembers[itemIndex - m_pageHandler.StartIndex] = member; - member.Enable(); - } - - m_widthUpdateWanted = true; - } - - internal void UpdateWidths() - { - float labelWidth = 125; - - foreach (var cache in m_displayedMembers) - { - if (cache == null) - break; - - var width = cache.GetMemberLabelWidth(m_scrollContentRect); - - if (width > labelWidth) - labelWidth = width; - } - - float valueWidth = m_scrollContentRect.rect.width - labelWidth - 20; - - foreach (var cache in m_displayedMembers) - { - if (cache == null) - break; - cache.SetWidths(labelWidth, valueWidth); - } - } - - - #endregion // end instance - - #region UI - - private GameObject m_content; - public override GameObject Content - { - get => m_content; - set => m_content = value; - } - - internal Text m_nameFilterText; - internal MemberTypes m_memberFilter; - internal Button m_lastActiveMemButton; - - internal PageHandler m_pageHandler; - internal SliderScrollbar m_sliderScroller; - internal GameObject m_scrollContent; - internal RectTransform m_scrollContentRect; - - internal bool m_widthUpdateWanted; - internal bool m_widthUpdateWaiting; - - internal GameObject m_filterAreaObj; - internal GameObject m_updateRowObj; - internal GameObject m_memberListObj; - - internal void ConstructUI() - { - var parent = InspectorManager.m_inspectorContent; - - this.Content = UIFactory.CreateVerticalGroup(parent, "ReflectionInspector", true, false, true, true, 5, new Vector4(4,4,4,4), - new Color(0.15f, 0.15f, 0.15f)); - - ConstructTopArea(); - - ConstructMemberList(); - } - - internal void ConstructTopArea() - { - var nameRowObj = UIFactory.CreateHorizontalGroup(Content, "NameRowObj", true, true, true, true, 2, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(nameRowObj, minHeight: 25, flexibleHeight: 0, minWidth: 200, flexibleWidth: 5000); - - var typeLabelText = UIFactory.CreateLabel(nameRowObj, "TypeLabel", "Type:", TextAnchor.MiddleLeft); - typeLabelText.horizontalOverflow = HorizontalWrapMode.Overflow; - UIFactory.SetLayoutElement(typeLabelText.gameObject, minWidth: 40, flexibleWidth: 0, minHeight: 25); - - var typeDisplay = UIFactory.CreateLabel(nameRowObj, "TypeDisplayText", SignatureHighlighter.ParseFullSyntax(m_targetType, true), - TextAnchor.MiddleLeft); - - UIFactory.SetLayoutElement(typeDisplay.gameObject, minHeight: 25, flexibleWidth: 5000); - - // instance helper tools - - if (this is InstanceInspector instanceInspector) - { - instanceInspector.ConstructUnityInstanceHelpers(); - } - - ConstructFilterArea(); - - ConstructUpdateRow(); - } - - internal void ConstructFilterArea() - { - // Filters - - m_filterAreaObj = UIFactory.CreateVerticalGroup(Content, "FilterGroup", true, true, true, true, 4, new Vector4(4,4,4,4), - new Color(0.1f, 0.1f, 0.1f)); - UIFactory.SetLayoutElement(m_filterAreaObj, minHeight: 60); - - // name filter - - var nameFilterRowObj = UIFactory.CreateHorizontalGroup(m_filterAreaObj, "NameFilterRow", false, false, true, true, 5, default, - new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(nameFilterRowObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 5000); - - var nameLabel = UIFactory.CreateLabel(nameFilterRowObj, "NameLabel", "Filter names:", TextAnchor.MiddleLeft, Color.grey); - UIFactory.SetLayoutElement(nameLabel.gameObject, minWidth: 100, minHeight: 25, flexibleWidth: 0); - - var nameInputObj = UIFactory.CreateInputField(nameFilterRowObj, "NameInput", "...", 14, (int)TextAnchor.MiddleLeft, (int)HorizontalWrapMode.Overflow); - UIFactory.SetLayoutElement(nameInputObj, flexibleWidth: 5000, minWidth: 100, minHeight: 25); - var nameInput = nameInputObj.GetComponent(); - nameInput.onValueChanged.AddListener((string val) => { FilterMembers(val); }); - m_nameFilterText = nameInput.textComponent; - - // membertype filter - - var memberFilterRowObj = UIFactory.CreateHorizontalGroup(m_filterAreaObj, "MemberFilter", false, false, true, true, 5, default, - new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(memberFilterRowObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 5000); - - var memLabel = UIFactory.CreateLabel(memberFilterRowObj, "MemberFilterLabel", "Filter members:", TextAnchor.MiddleLeft, Color.grey); - UIFactory.SetLayoutElement(memLabel.gameObject, minWidth: 100, minHeight: 25, flexibleWidth: 0); - - AddFilterButton(memberFilterRowObj, MemberTypes.All); - AddFilterButton(memberFilterRowObj, MemberTypes.Method); - AddFilterButton(memberFilterRowObj, MemberTypes.Property, true); - AddFilterButton(memberFilterRowObj, MemberTypes.Field); - - // Instance filters - - if (this is InstanceInspector instanceInspector) - { - instanceInspector.ConstructInstanceFilters(m_filterAreaObj); - } - } - - private void AddFilterButton(GameObject parent, MemberTypes type, bool setEnabled = false) - { - var btn = UIFactory.CreateButton(parent, - "FilterButton_" + type, - type.ToString(), - null, - new Color(0.2f, 0.2f, 0.2f)); - UIFactory.SetLayoutElement(btn.gameObject, minHeight: 25, minWidth: 70); - btn.onClick.AddListener(() => { OnMemberFilterClicked(type, btn); }); - - RuntimeProvider.Instance.SetColorBlock(btn, highlighted: new Color(0.3f, 0.7f, 0.3f)); - - if (setEnabled) - { - RuntimeProvider.Instance.SetColorBlock(btn, new Color(0.2f, 0.6f, 0.2f)); - m_memberFilter = type; - m_lastActiveMemButton = btn; - } - } - - internal void ConstructUpdateRow() - { - m_updateRowObj = UIFactory.CreateHorizontalGroup(Content, "UpdateRow", false, true, true, true, 10, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(m_updateRowObj, minHeight: 25); - - // update button - - var updateBtn = UIFactory.CreateButton(m_updateRowObj, "UpdateButton", "Update Values", null, new Color(0.2f, 0.2f, 0.2f)); - UIFactory.SetLayoutElement(updateBtn.gameObject, minWidth: 110, flexibleWidth: 0); - updateBtn.onClick.AddListener(() => - { - bool orig = m_autoUpdate; - m_autoUpdate = true; - Update(); - if (!orig) - m_autoUpdate = orig; - }); - - // auto update - - var autoUpdateObj = UIFactory.CreateToggle(m_updateRowObj, "UpdateToggle", out Toggle autoUpdateToggle, out Text autoUpdateText); - var autoUpdateLayout = autoUpdateObj.AddComponent(); - autoUpdateLayout.minWidth = 150; - autoUpdateLayout.minHeight = 25; - autoUpdateText.text = "Auto-update?"; - autoUpdateToggle.isOn = false; - autoUpdateToggle.onValueChanged.AddListener((bool val) => { m_autoUpdate = val; }); - } - - internal void ConstructMemberList() - { - m_memberListObj = UIFactory.CreateScrollView(Content, "MemberList", out m_scrollContent, out m_sliderScroller, new Color(0.05f, 0.05f, 0.05f)); - - m_scrollContentRect = m_scrollContent.GetComponent(); - - UIFactory.SetLayoutGroup(m_scrollContent, forceHeight: true, spacing: 3, padLeft: 0, padRight: 0); - - m_pageHandler = new PageHandler(m_sliderScroller); - m_pageHandler.ConstructUI(Content); - m_pageHandler.OnPageChanged += OnPageTurned; - } - } - - #endregion -} \ No newline at end of file diff --git a/src/UI/Inspectors/Reflection/StaticInspector.cs b/src/UI/Inspectors/Reflection/StaticInspector.cs deleted file mode 100644 index eeeb537..0000000 --- a/src/UI/Inspectors/Reflection/StaticInspector.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace UnityExplorer.UI.Inspectors.Reflection -{ - public class StaticInspector : ReflectionInspector - { - public override string TabLabel => $" [S] {base.TabLabel}"; - - public StaticInspector(Type type) : base(type) { } - } -} diff --git a/src/UI/InteractiveValues/InteractiveBool.cs b/src/UI/InteractiveValues/InteractiveBool.cs deleted file mode 100644 index 15970f5..0000000 --- a/src/UI/InteractiveValues/InteractiveBool.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI; -using UnityExplorer.UI.CacheObject; - -namespace UnityExplorer.UI.InteractiveValues -{ - public class InteractiveBool : InteractiveValue - { - public InteractiveBool(object value, Type valueType) : base(value, valueType) { } - - public override bool HasSubContent => false; - public override bool SubContentWanted => false; - public override bool WantInspectBtn => false; - - internal Toggle m_toggle; - internal Button m_applyBtn; - - public override void OnValueUpdated() - { - base.OnValueUpdated(); - } - - public override void RefreshUIForValue() - { - GetDefaultLabel(); - - if (Owner.HasEvaluated) - { - var val = (bool)Value; - - if (Owner.CanWrite) - { - if (!m_toggle.gameObject.activeSelf) - m_toggle.gameObject.SetActive(true); - - if (!m_applyBtn.gameObject.activeSelf) - m_applyBtn.gameObject.SetActive(true); - - if (val != m_toggle.isOn) - m_toggle.isOn = val; - } - - var color = val - ? "6bc981" // on - : "c96b6b"; // off - - m_baseLabel.text = $"{val}"; - } - else - { - m_baseLabel.text = DefaultLabel; - } - } - - public override void OnException(CacheMember member) - { - base.OnException(member); - - if (Owner.CanWrite) - { - if (m_toggle.gameObject.activeSelf) - m_toggle.gameObject.SetActive(false); - - if (m_applyBtn.gameObject.activeSelf) - m_applyBtn.gameObject.SetActive(false); - } - } - - internal void OnToggleValueChanged(bool val) - { - Value = val; - RefreshUIForValue(); - } - - public override void ConstructUI(GameObject parent, GameObject subGroup) - { - base.ConstructUI(parent, subGroup); - - var baseLayout = m_baseLabel.gameObject.GetComponent(); - baseLayout.flexibleWidth = 0; - baseLayout.minWidth = 50; - - if (Owner.CanWrite) - { - var toggleObj = UIFactory.CreateToggle(m_mainContent, "InteractiveBoolToggle", out m_toggle, out _, new Color(0.1f, 0.1f, 0.1f)); - UIFactory.SetLayoutElement(toggleObj, minWidth: 24); - m_toggle.onValueChanged.AddListener(OnToggleValueChanged); - - m_baseLabel.transform.SetAsLastSibling(); - - m_applyBtn = UIFactory.CreateButton(m_mainContent, - "ApplyButton", - "Apply", - () => { Owner.SetValue(); }, - new Color(0.2f, 0.2f, 0.2f)); - - UIFactory.SetLayoutElement(m_applyBtn.gameObject, minWidth: 50, minHeight: 25, flexibleWidth: 0); - - toggleObj.SetActive(false); - m_applyBtn.gameObject.SetActive(false); - } - } - } -} diff --git a/src/UI/InteractiveValues/InteractiveColor.cs b/src/UI/InteractiveValues/InteractiveColor.cs deleted file mode 100644 index 501d129..0000000 --- a/src/UI/InteractiveValues/InteractiveColor.cs +++ /dev/null @@ -1,168 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; - -namespace UnityExplorer.UI.InteractiveValues -{ - public class InteractiveColor : InteractiveValue - { - //~~~~~~~~~ Instance ~~~~~~~~~~ - - public InteractiveColor(object value, Type valueType) : base(value, valueType) { } - - public override bool HasSubContent => true; - public override bool SubContentWanted => true; - public override bool WantInspectBtn => true; - - public override void RefreshUIForValue() - { - base.RefreshUIForValue(); - - if (m_subContentConstructed) - RefreshUI(); - } - - private void RefreshUI() - { - var color = (Color)this.Value; - - m_inputs[0].text = color.r.ToString(); - m_inputs[1].text = color.g.ToString(); - m_inputs[2].text = color.b.ToString(); - m_inputs[3].text = color.a.ToString(); - - if (m_colorImage) - m_colorImage.color = color; - } - - internal override void OnToggleSubcontent(bool toggle) - { - base.OnToggleSubcontent(toggle); - - RefreshUI(); - } - - #region UI CONSTRUCTION - - private Image m_colorImage; - - private readonly InputField[] m_inputs = new InputField[4]; - private readonly Slider[] m_sliders = new Slider[4]; - - public override void ConstructUI(GameObject parent, GameObject subGroup) - { - base.ConstructUI(parent, subGroup); - - //// Limit the label width for colors, they're always about the same so make use of that space. - //UIFactory.SetLayoutElement(this.m_baseLabel.gameObject, flexibleWidth: 0, minWidth: 250); - } - - public override void ConstructSubcontent() - { - base.ConstructSubcontent(); - - var horiGroup = UIFactory.CreateHorizontalGroup(m_subContentParent, "ColorEditor", false, false, true, true, 5, - default, default, TextAnchor.MiddleLeft); - - var editorContainer = UIFactory.CreateVerticalGroup(horiGroup, "EditorContent", false, true, true, true, 2, new Vector4(4, 4, 4, 4), - new Color(0.08f, 0.08f, 0.08f)); - UIFactory.SetLayoutElement(editorContainer, minWidth: 300, flexibleWidth: 0); - - for (int i = 0; i < 4; i++) - AddEditorRow(i, editorContainer); - - if (Owner.CanWrite) - { - var applyBtn = UIFactory.CreateButton(editorContainer, "ApplyButton", "Apply", OnSetValue, new Color(0.2f, 0.2f, 0.2f)); - UIFactory.SetLayoutElement(applyBtn.gameObject, minWidth: 175, minHeight: 25, flexibleWidth: 0); - - void OnSetValue() - { - Owner.SetValue(); - RefreshUIForValue(); - } - } - - var imgHolder = UIFactory.CreateVerticalGroup(horiGroup, "ImgHolder", true, true, true, true, 0, new Vector4(1, 1, 1, 1), - new Color(0.08f, 0.08f, 0.08f)); - UIFactory.SetLayoutElement(imgHolder, minWidth: 128, minHeight: 128, flexibleWidth: 0, flexibleHeight: 0); - - var imgObj = UIFactory.CreateUIObject("ColorImageHelper", imgHolder, new Vector2(100, 25)); - m_colorImage = imgObj.AddComponent(); - m_colorImage.color = (Color)this.Value; - } - - private static readonly string[] s_fieldNames = new[] { "R", "G", "B", "A" }; - - internal void AddEditorRow(int index, GameObject groupObj) - { - var row = UIFactory.CreateHorizontalGroup(groupObj, "EditorRow_" + s_fieldNames[index], - false, true, true, true, 5, default, new Color(1, 1, 1, 0)); - - var label = UIFactory.CreateLabel(row, "RowLabel", $"{s_fieldNames[index]}:", TextAnchor.MiddleRight, Color.cyan); - UIFactory.SetLayoutElement(label.gameObject, minWidth: 50, flexibleWidth: 0, minHeight: 25); - - var inputFieldObj = UIFactory.CreateInputField(row, "InputField", "...", 14, 3, 1); - UIFactory.SetLayoutElement(inputFieldObj, minWidth: 120, minHeight: 25, flexibleWidth: 0); - - var inputField = inputFieldObj.GetComponent(); - m_inputs[index] = inputField; - inputField.characterValidation = InputField.CharacterValidation.Decimal; - - inputField.onValueChanged.AddListener((string value) => - { - float val = float.Parse(value); - SetValueToColor(val); - m_sliders[index].value = val; - }); - - var sliderObj = UIFactory.CreateSlider(row, "Slider", out Slider slider); - m_sliders[index] = slider; - UIFactory.SetLayoutElement(sliderObj, minWidth: 200, minHeight: 25, flexibleWidth: 0, flexibleHeight: 0); - slider.minValue = 0; - slider.maxValue = 1; - slider.value = GetValueFromColor(); - - slider.onValueChanged.AddListener((float value) => - { - inputField.text = value.ToString(); - SetValueToColor(value); - m_inputs[index].text = value.ToString(); - }); - - // methods for writing to the color for this field - - void SetValueToColor(float floatValue) - { - Color _color = (Color)Value; - switch (index) - { - case 0: _color.r = floatValue; break; - case 1: _color.g = floatValue; break; - case 2: _color.b = floatValue; break; - case 3: _color.a = floatValue; break; - } - Value = _color; - m_colorImage.color = _color; - } - - float GetValueFromColor() - { - Color _color = (Color)Value; - switch (index) - { - case 0: return _color.r; - case 1: return _color.g; - case 2: return _color.b; - case 3: return _color.a; - default: throw new NotImplementedException(); - } - } - } - - #endregion - } -} diff --git a/src/UI/InteractiveValues/InteractiveDictionary.cs b/src/UI/InteractiveValues/InteractiveDictionary.cs deleted file mode 100644 index e2a182c..0000000 --- a/src/UI/InteractiveValues/InteractiveDictionary.cs +++ /dev/null @@ -1,247 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Config; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI; -using System.Reflection; -using UnityExplorer.UI.CacheObject; -using UnityExplorer.Core; -using UnityExplorer.UI.Utility; -#if CPP -using AltIDictionary = Il2CppSystem.Collections.IDictionary; -#else -using AltIDictionary = System.Collections.IDictionary; -#endif - -namespace UnityExplorer.UI.InteractiveValues -{ - public class InteractiveDictionary : InteractiveValue - { - public InteractiveDictionary(object value, Type valueType) : base(value, valueType) - { - if (valueType.IsGenericType) - { - var gArgs = valueType.GetGenericArguments(); - m_typeOfKeys = gArgs[0]; - m_typeofValues = gArgs[1]; - } - else - { - m_typeOfKeys = typeof(object); - m_typeofValues = typeof(object); - } - } - - public override bool WantInspectBtn => false; - public override bool HasSubContent => true; - public override bool SubContentWanted - { - get - { - if (m_recacheWanted) - return true; - else return m_entries.Count > 0; - } - } - - internal IDictionary RefIDictionary; - internal AltIDictionary RefAltIDictionary; - internal Type m_typeOfKeys; - internal Type m_typeofValues; - - internal readonly List> m_entries - = new List>(); - - internal readonly KeyValuePair[] m_displayedEntries - = new KeyValuePair[ConfigManager.Default_Page_Limit.Value]; - - internal bool m_recacheWanted = true; - - public override void OnDestroy() - { - base.OnDestroy(); - } - - public override void OnValueUpdated() - { - RefIDictionary = Value as IDictionary; - - if (RefIDictionary == null) - { - try { RefAltIDictionary = Value.TryCast(); } - catch { } - } - - if (m_subContentParent.activeSelf) - { - GetCacheEntries(); - RefreshDisplay(); - } - else - m_recacheWanted = true; - - base.OnValueUpdated(); - } - - internal void OnPageTurned() - { - RefreshDisplay(); - } - - public override void RefreshUIForValue() - { - GetDefaultLabel(); - - if (Value != null) - { - string count = "?"; - if (m_recacheWanted && RefIDictionary != null) - count = RefIDictionary.Count.ToString(); - else if (!m_recacheWanted) - count = m_entries.Count.ToString(); - - m_baseLabel.text = $"[{count}] {m_richValueType}"; - } - else - { - m_baseLabel.text = DefaultLabel; - } - } - - public void GetCacheEntries() - { - if (m_entries.Any()) - { - // maybe improve this, probably could be more efficient i guess - - foreach (var pair in m_entries) - { - pair.Key.Destroy(); - pair.Value.Destroy(); - } - - m_entries.Clear(); - } - - if (RefIDictionary == null && Value != null) - RefIDictionary = RuntimeProvider.Instance.Reflection.EnumerateDictionary(Value, m_typeOfKeys, m_typeofValues); - - if (RefIDictionary != null) - { - int index = 0; - - foreach (var key in RefIDictionary.Keys) - { - var value = RefIDictionary[key]; - - var cacheKey = new CachePaired(index, this, this.RefIDictionary, PairTypes.Key, m_listContent); - cacheKey.CreateIValue(key, this.m_typeOfKeys); - cacheKey.Disable(); - - var cacheValue = new CachePaired(index, this, this.RefIDictionary, PairTypes.Value, m_listContent); - cacheValue.CreateIValue(value, this.m_typeofValues); - cacheValue.Disable(); - - //holder.SetActive(false); - - m_entries.Add(new KeyValuePair(cacheKey, cacheValue)); - - index++; - } - } - - RefreshDisplay(); - } - - public void RefreshDisplay() - { - var entries = m_entries; - m_pageHandler.ListCount = entries.Count; - - for (int i = 0; i < m_displayedEntries.Length; i++) - { - var entry = m_displayedEntries[i]; - if (entry.Key != null && entry.Value != null) - { - //m_rowHolders[i].SetActive(false); - entry.Key.Disable(); - entry.Value.Disable(); - } - else - break; - } - - if (entries.Count < 1) - return; - - foreach (var itemIndex in m_pageHandler) - { - if (itemIndex >= entries.Count) - break; - - var entry = entries[itemIndex]; - m_displayedEntries[itemIndex - m_pageHandler.StartIndex] = entry; - - //m_rowHolders[itemIndex].SetActive(true); - entry.Key.Enable(); - entry.Value.Enable(); - } - - //UpdateSubcontentHeight(); - } - - internal override void OnToggleSubcontent(bool active) - { - base.OnToggleSubcontent(active); - - if (active && m_recacheWanted) - { - m_recacheWanted = false; - GetCacheEntries(); - RefreshUIForValue(); - } - - RefreshDisplay(); - } - - internal GameObject m_listContent; - internal LayoutElement m_listLayout; - - internal PageHandler m_pageHandler; - - public override void ConstructUI(GameObject parent, GameObject subGroup) - { - base.ConstructUI(parent, subGroup); - } - - public override void ConstructSubcontent() - { - base.ConstructSubcontent(); - - m_pageHandler = new PageHandler(null); - m_pageHandler.ConstructUI(m_subContentParent); - m_pageHandler.OnPageChanged += OnPageTurned; - - m_listContent = UIFactory.CreateVerticalGroup(m_subContentParent, "DictionaryContent", true, true, true, true, 2, new Vector4(5,5,5,5), - new Color(0.08f, 0.08f, 0.08f)); - - var scrollRect = m_listContent.GetComponent(); - scrollRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 0); - - m_listLayout = Owner.m_mainContent.GetComponent(); - m_listLayout.minHeight = 25; - m_listLayout.flexibleHeight = 0; - - Owner.m_mainRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 25); - - var contentFitter = m_listContent.AddComponent(); - contentFitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained; - contentFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; - } - } -} diff --git a/src/UI/InteractiveValues/InteractiveEnum.cs b/src/UI/InteractiveValues/InteractiveEnum.cs deleted file mode 100644 index 5384013..0000000 --- a/src/UI/InteractiveValues/InteractiveEnum.cs +++ /dev/null @@ -1,164 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI; - -namespace UnityExplorer.UI.InteractiveValues -{ - public class InteractiveEnum : InteractiveValue - { - internal static Dictionary[]> s_enumNamesCache = new Dictionary[]>(); - - public InteractiveEnum(object value, Type valueType) : base(value, valueType) - { - GetNames(); - } - - public override bool HasSubContent => true; - public override bool SubContentWanted => Owner.CanWrite; - public override bool WantInspectBtn => false; - - internal KeyValuePair[] m_values = new KeyValuePair[0]; - - internal Type m_lastEnumType; - - internal void GetNames() - { - var type = Value?.GetType() ?? FallbackType; - - if (m_lastEnumType == type) - return; - - m_lastEnumType = type; - - if (m_subContentConstructed) - { - DestroySubContent(); - } - - if (!s_enumNamesCache.ContainsKey(type)) - { - // using GetValues not GetNames, to catch instances of weird enums (eg CameraClearFlags) - var values = Enum.GetValues(type); - - var list = new List>(); - var set = new HashSet(); - - foreach (var value in values) - { - var name = value.ToString(); - - if (set.Contains(name)) - continue; - - set.Add(name); - - var backingType = Enum.GetUnderlyingType(type); - int intValue; - try - { - // this approach is necessary, a simple '(int)value' is not sufficient. - - var unbox = Convert.ChangeType(value, backingType); - - intValue = (int)Convert.ChangeType(unbox, typeof(int)); - } - catch (Exception ex) - { - ExplorerCore.LogWarning("[InteractiveEnum] Could not Unbox underlying type " + backingType.Name + " from " + type.FullName); - ExplorerCore.Log(ex.ToString()); - continue; - } - - list.Add(new KeyValuePair(intValue, name)); - } - - s_enumNamesCache.Add(type, list.ToArray()); - } - - m_values = s_enumNamesCache[type]; - } - - public override void OnValueUpdated() - { - GetNames(); - - base.OnValueUpdated(); - } - - public override void RefreshUIForValue() - { - base.RefreshUIForValue(); - - if (m_subContentConstructed && !(this is InteractiveFlags)) - { - m_dropdownText.text = Value?.ToString() ?? ""; - } - } - - internal override void OnToggleSubcontent(bool toggle) - { - base.OnToggleSubcontent(toggle); - - RefreshUIForValue(); - } - - private void SetValueFromDropdown() - { - var type = Value?.GetType() ?? FallbackType; - var index = m_dropdown.value; - - var value = Enum.Parse(type, s_enumNamesCache[type][index].Value); - - if (value != null) - { - Value = value; - Owner.SetValue(); - RefreshUIForValue(); - } - } - - internal Dropdown m_dropdown; - internal Text m_dropdownText; - - public override void ConstructUI(GameObject parent, GameObject subGroup) - { - base.ConstructUI(parent, subGroup); - } - - public override void ConstructSubcontent() - { - base.ConstructSubcontent(); - - if (Owner.CanWrite) - { - var groupObj = UIFactory.CreateHorizontalGroup(m_subContentParent, "InteractiveEnumGroup", false, true, true, true, 5, - new Vector4(3,3,3,3),new Color(1, 1, 1, 0)); - - // apply button - - var apply = UIFactory.CreateButton(groupObj, "ApplyButton", "Apply", SetValueFromDropdown, new Color(0.3f, 0.3f, 0.3f)); - UIFactory.SetLayoutElement(apply.gameObject, minHeight: 25, minWidth: 50); - - // dropdown - - var dropdownObj = UIFactory.CreateDropdown(groupObj, out m_dropdown, "", 14, null); - UIFactory.SetLayoutElement(dropdownObj, minWidth: 150, minHeight: 25, flexibleWidth: 120); - - foreach (var kvp in m_values) - { - m_dropdown.options.Add(new Dropdown.OptionData - { - text = $"{kvp.Key}: {kvp.Value}" - }); - } - - m_dropdownText = m_dropdown.transform.Find("Label").GetComponent(); - } - } - } -} diff --git a/src/UI/InteractiveValues/InteractiveEnumerable.cs b/src/UI/InteractiveValues/InteractiveEnumerable.cs deleted file mode 100644 index 65731db..0000000 --- a/src/UI/InteractiveValues/InteractiveEnumerable.cs +++ /dev/null @@ -1,207 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core; -using UnityExplorer.Core.Config; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI; -using UnityExplorer.UI.CacheObject; -using UnityExplorer.UI.Utility; - -namespace UnityExplorer.UI.InteractiveValues -{ - public class InteractiveEnumerable : InteractiveValue - { - public InteractiveEnumerable(object value, Type valueType) : base(value, valueType) - { - if (valueType.IsGenericType) - m_baseEntryType = valueType.GetGenericArguments()[0]; - else - m_baseEntryType = typeof(object); - } - - public override bool WantInspectBtn => false; - public override bool HasSubContent => true; - public override bool SubContentWanted - { - get - { - if (m_recacheWanted) - return true; - else return m_entries.Count > 0; - } - } - - internal IEnumerable RefIEnumerable; - internal IList RefIList; - - internal readonly Type m_baseEntryType; - - internal readonly List m_entries = new List(); - internal readonly CacheEnumerated[] m_displayedEntries = new CacheEnumerated[ConfigManager.Default_Page_Limit.Value]; - internal bool m_recacheWanted = true; - - public override void OnValueUpdated() - { - RefIEnumerable = Value as IEnumerable; - RefIList = Value as IList; - - if (m_subContentParent.activeSelf) - { - GetCacheEntries(); - RefreshDisplay(); - } - else - m_recacheWanted = true; - - base.OnValueUpdated(); - } - - public override void OnException(CacheMember member) - { - base.OnException(member); - } - - private void OnPageTurned() - { - RefreshDisplay(); - } - - public override void RefreshUIForValue() - { - GetDefaultLabel(); - - if (Value != null) - { - string count = "?"; - if (m_recacheWanted && RefIList != null) - count = RefIList.Count.ToString(); - else if (!m_recacheWanted) - count = m_entries.Count.ToString(); - - m_baseLabel.text = $"[{count}] {m_richValueType}"; - } - else - { - m_baseLabel.text = DefaultLabel; - } - } - - public void GetCacheEntries() - { - if (m_entries.Any()) - { - // maybe improve this, probably could be more efficient i guess - - foreach (var entry in m_entries) - entry.Destroy(); - - m_entries.Clear(); - } - - if (RefIEnumerable == null && Value != null) - RefIEnumerable = RuntimeProvider.Instance.Reflection.EnumerateEnumerable(Value); - - if (RefIEnumerable != null) - { - int index = 0; - foreach (var entry in RefIEnumerable) - { - var cache = new CacheEnumerated(index, this, RefIList, this.m_listContent); - cache.CreateIValue(entry, m_baseEntryType); - m_entries.Add(cache); - - cache.Disable(); - - index++; - } - } - - RefreshDisplay(); - } - - public void RefreshDisplay() - { - var entries = m_entries; - m_pageHandler.ListCount = entries.Count; - - for (int i = 0; i < m_displayedEntries.Length; i++) - { - var entry = m_displayedEntries[i]; - if (entry != null) - entry.Disable(); - else - break; - } - - if (entries.Count < 1) - return; - - foreach (var itemIndex in m_pageHandler) - { - if (itemIndex >= entries.Count) - break; - - CacheEnumerated entry = entries[itemIndex]; - m_displayedEntries[itemIndex - m_pageHandler.StartIndex] = entry; - entry.Enable(); - } - - //UpdateSubcontentHeight(); - } - - internal override void OnToggleSubcontent(bool active) - { - base.OnToggleSubcontent(active); - - if (active && m_recacheWanted) - { - m_recacheWanted = false; - GetCacheEntries(); - RefreshUIForValue(); - } - - RefreshDisplay(); - } - - - internal GameObject m_listContent; - internal LayoutElement m_listLayout; - - internal PageHandler m_pageHandler; - - public override void ConstructUI(GameObject parent, GameObject subGroup) - { - base.ConstructUI(parent, subGroup); - } - - public override void ConstructSubcontent() - { - base.ConstructSubcontent(); - - m_pageHandler = new PageHandler(null); - m_pageHandler.ConstructUI(m_subContentParent); - m_pageHandler.OnPageChanged += OnPageTurned; - - m_listContent = UIFactory.CreateVerticalGroup(this.m_subContentParent, "EnumerableContent", true, true, true, true, 2, new Vector4(5,5,5,5), - new Color(0.08f, 0.08f, 0.08f)); - - var scrollRect = m_listContent.GetComponent(); - scrollRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 0); - - m_listLayout = Owner.m_mainContent.GetComponent(); - m_listLayout.minHeight = 25; - m_listLayout.flexibleHeight = 0; - Owner.m_mainRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 25); - - var contentFitter = m_listContent.AddComponent(); - contentFitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained; - contentFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; - } - } -} diff --git a/src/UI/InteractiveValues/InteractiveFlags.cs b/src/UI/InteractiveValues/InteractiveFlags.cs deleted file mode 100644 index 48b94dc..0000000 --- a/src/UI/InteractiveValues/InteractiveFlags.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI; - -namespace UnityExplorer.UI.InteractiveValues -{ - public class InteractiveFlags : InteractiveEnum - { - public InteractiveFlags(object value, Type valueType) : base(value, valueType) - { - m_toggles = new Toggle[m_values.Length]; - m_enabledFlags = new bool[m_values.Length]; - } - - public override bool HasSubContent => true; - public override bool SubContentWanted => Owner.CanWrite; - public override bool WantInspectBtn => false; - - internal bool[] m_enabledFlags; - internal Toggle[] m_toggles; - - public override void OnValueUpdated() - { - if (Owner.CanWrite) - { - var enabledNames = new List(); - - var enabled = Value?.ToString().Split(',').Select(it => it.Trim()); - if (enabled != null) - enabledNames.AddRange(enabled); - - for (int i = 0; i < m_values.Length; i++) - m_enabledFlags[i] = enabledNames.Contains(m_values[i].Value); - } - - base.OnValueUpdated(); - } - - public override void RefreshUIForValue() - { - GetDefaultLabel(); - m_baseLabel.text = DefaultLabel; - - base.RefreshUIForValue(); - - if (m_subContentConstructed) - { - for (int i = 0; i < m_values.Length; i++) - { - var toggle = m_toggles[i]; - if (toggle.isOn != m_enabledFlags[i]) - toggle.isOn = m_enabledFlags[i]; - } - } - } - - private void SetValueFromToggles() - { - string val = ""; - for (int i = 0; i < m_values.Length; i++) - { - if (m_enabledFlags[i]) - { - if (val != "") val += ", "; - val += m_values[i].Value; - } - } - var type = Value?.GetType() ?? FallbackType; - Value = Enum.Parse(type, val); - RefreshUIForValue(); - Owner.SetValue(); - } - - internal override void OnToggleSubcontent(bool toggle) - { - base.OnToggleSubcontent(toggle); - - RefreshUIForValue(); - } - - public override void ConstructUI(GameObject parent, GameObject subGroup) - { - base.ConstructUI(parent, subGroup); - } - - public override void ConstructSubcontent() - { - m_subContentConstructed = true; - - if (Owner.CanWrite) - { - var groupObj = UIFactory.CreateVerticalGroup(m_subContentParent, "InteractiveFlagsContent", false, true, true, true, 5, - new Vector4(3,3,3,3), new Color(1, 1, 1, 0)); - - // apply button - - var apply = UIFactory.CreateButton(groupObj, "ApplyButton", "Apply", SetValueFromToggles, new Color(0.3f, 0.3f, 0.3f)); - UIFactory.SetLayoutElement(apply.gameObject, minWidth: 50, minHeight: 25); - - // toggles - - for (int i = 0; i < m_values.Length; i++) - AddToggle(i, groupObj); - } - } - - internal void AddToggle(int index, GameObject groupObj) - { - var value = m_values[index]; - - var toggleObj = UIFactory.CreateToggle(groupObj, "FlagToggle", out Toggle toggle, out Text text, new Color(0.1f, 0.1f, 0.1f)); - UIFactory.SetLayoutElement(toggleObj, minWidth: 100, flexibleWidth: 2000, minHeight: 25); - - m_toggles[index] = toggle; - - toggle.onValueChanged.AddListener((bool val) => { m_enabledFlags[index] = val; }); - - text.text = $"{value.Key}: {value.Value}"; - } - } -} diff --git a/src/UI/InteractiveValues/InteractiveFloatStruct.cs b/src/UI/InteractiveValues/InteractiveFloatStruct.cs deleted file mode 100644 index 81a1bef..0000000 --- a/src/UI/InteractiveValues/InteractiveFloatStruct.cs +++ /dev/null @@ -1,201 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; -using System.Reflection; - -namespace UnityExplorer.UI.InteractiveValues -{ - // Class for supporting any "float struct" (ie Vector, Rect, etc). - // Supports any struct where all the public instance fields are floats (or types assignable to float) - - public class StructInfo - { - public string[] FieldNames { get; } - private readonly FieldInfo[] m_fields; - - public StructInfo(Type type) - { - m_fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public) - .Where(it => !it.IsLiteral) - .ToArray(); - - FieldNames = m_fields.Select(it => it.Name) - .ToArray(); - } - - public object SetValue(ref object instance, int fieldIndex, float val) - { - m_fields[fieldIndex].SetValue(instance, val); - return instance; - } - - public float GetValue(object instance, int fieldIndex) - => (float)m_fields[fieldIndex].GetValue(instance); - - public void RefreshUI(InputField[] inputs, object instance) - { - try - { - for (int i = 0; i < m_fields.Length; i++) - { - var field = m_fields[i]; - float val = (float)field.GetValue(instance); - inputs[i].text = val.ToString(); - } - } - catch (Exception ex) - { - ExplorerCore.Log(ex); - } - } - } - - public class InteractiveFloatStruct : InteractiveValue - { - private static readonly Dictionary _typeSupportCache = new Dictionary(); - public static bool IsTypeSupported(Type type) - { - if (!type.IsValueType) - return false; - - if (string.IsNullOrEmpty(type.AssemblyQualifiedName)) - return false; - - if (_typeSupportCache.TryGetValue(type.AssemblyQualifiedName, out bool ret)) - return ret; - - ret = true; - var fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); - foreach (var field in fields) - { - if (field.IsLiteral) - continue; - - if (!typeof(float).IsAssignableFrom(field.FieldType)) - { - ret = false; - break; - } - } - _typeSupportCache.Add(type.AssemblyQualifiedName, ret); - return ret; - } - - //~~~~~~~~~ Instance ~~~~~~~~~~ - - public InteractiveFloatStruct(object value, Type valueType) : base(value, valueType) { } - - public override bool HasSubContent => true; - public override bool SubContentWanted => true; - - public StructInfo StructInfo; - - public override void RefreshUIForValue() - { - InitializeStructInfo(); - - base.RefreshUIForValue(); - - if (m_subContentConstructed) - StructInfo.RefreshUI(m_inputs, this.Value); - } - - internal override void OnToggleSubcontent(bool toggle) - { - InitializeStructInfo(); - - base.OnToggleSubcontent(toggle); - - StructInfo.RefreshUI(m_inputs, this.Value); - } - - internal Type m_lastStructType; - - internal void InitializeStructInfo() - { - var type = Value?.GetType() ?? FallbackType; - - if (StructInfo != null && type == m_lastStructType) - return; - - if (StructInfo != null && m_subContentConstructed) - DestroySubContent(); - - m_lastStructType = type; - - StructInfo = new StructInfo(type); - - if (m_subContentParent.activeSelf) - ConstructSubcontent(); - } - - #region UI CONSTRUCTION - - internal InputField[] m_inputs; - - public override void ConstructUI(GameObject parent, GameObject subGroup) - { - base.ConstructUI(parent, subGroup); - } - - public override void ConstructSubcontent() - { - base.ConstructSubcontent(); - - if (StructInfo == null) - { - ExplorerCore.LogWarning("Setting up subcontent but structinfo is null"); - return; - } - - var editorContainer = UIFactory.CreateVerticalGroup(m_subContentParent, "EditorContent", false, true, true, true, 2, new Vector4(4, 4, 4, 4), - new Color(0.08f, 0.08f, 0.08f)); - - m_inputs = new InputField[StructInfo.FieldNames.Length]; - - for (int i = 0; i < StructInfo.FieldNames.Length; i++) - AddEditorRow(i, editorContainer); - - RefreshUIForValue(); - } - - internal void AddEditorRow(int index, GameObject groupObj) - { - try - { - var row = UIFactory.CreateHorizontalGroup(groupObj, "EditorRow", false, true, true, true, 5, default, new Color(1, 1, 1, 0)); - - string name = StructInfo.FieldNames[index]; - - var label = UIFactory.CreateLabel(row, "RowLabel", $"{name}:", TextAnchor.MiddleRight, Color.cyan); - UIFactory.SetLayoutElement(label.gameObject, minWidth: 30, flexibleWidth: 0, minHeight: 25); - - var inputFieldObj = UIFactory.CreateInputField(row, "InputField", "...", 14, 3, 1); - UIFactory.SetLayoutElement(inputFieldObj, minWidth: 120, minHeight: 25, flexibleWidth: 0); - - var inputField = inputFieldObj.GetComponent(); - m_inputs[index] = inputField; - - inputField.onValueChanged.AddListener((string val) => - { - try - { - float f = float.Parse(val); - Value = StructInfo.SetValue(ref this.Value, index, f); - Owner.SetValue(); - } - catch { } - }); - } - catch (Exception ex) - { - ExplorerCore.Log(ex); - } - } - - #endregion - } -} diff --git a/src/UI/InteractiveValues/InteractiveNumber.cs b/src/UI/InteractiveValues/InteractiveNumber.cs deleted file mode 100644 index 32b3d3e..0000000 --- a/src/UI/InteractiveValues/InteractiveNumber.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Reflection; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI; -using UnityExplorer.Core; -using UnityExplorer.UI.Utility; -using UnityExplorer.UI.CacheObject; - -namespace UnityExplorer.UI.InteractiveValues -{ - public class InteractiveNumber : InteractiveValue - { - public InteractiveNumber(object value, Type valueType) : base(value, valueType) { } - - public override bool HasSubContent => false; - public override bool SubContentWanted => false; - public override bool WantInspectBtn => false; - - public override void OnValueUpdated() - { - base.OnValueUpdated(); - } - - public override void OnException(CacheMember member) - { - base.OnException(member); - - if (m_valueInput.gameObject.activeSelf) - m_valueInput.gameObject.SetActive(false); - - if (Owner.CanWrite) - { - if (m_applyBtn.gameObject.activeSelf) - m_applyBtn.gameObject.SetActive(false); - } - } - - public override void RefreshUIForValue() - { - if (!Owner.HasEvaluated) - { - GetDefaultLabel(); - m_baseLabel.text = DefaultLabel; - return; - } - - m_baseLabel.text = SignatureHighlighter.ParseFullSyntax(FallbackType, false); - m_valueInput.text = Value.ToString(); - - var type = Value.GetType(); - if (type == typeof(float) - || type == typeof(double) - || type == typeof(decimal)) - { - m_valueInput.characterValidation = InputField.CharacterValidation.Decimal; - } - else - { - m_valueInput.characterValidation = InputField.CharacterValidation.Integer; - } - - if (Owner.CanWrite) - { - if (!m_applyBtn.gameObject.activeSelf) - m_applyBtn.gameObject.SetActive(true); - } - - if (!m_valueInput.gameObject.activeSelf) - m_valueInput.gameObject.SetActive(true); - } - - public MethodInfo ParseMethod => m_parseMethod ?? (m_parseMethod = Value.GetType().GetMethod("Parse", new Type[] { typeof(string) })); - private MethodInfo m_parseMethod; - - internal void OnApplyClicked() - { - try - { - Value = ParseMethod.Invoke(null, new object[] { m_valueInput.text }); - Owner.SetValue(); - RefreshUIForValue(); - } - catch (Exception e) - { - ExplorerCore.LogWarning("Could not parse input! " + ReflectionUtility.ReflectionExToString(e, true)); - } - } - - internal InputField m_valueInput; - internal Button m_applyBtn; - - public override void ConstructUI(GameObject parent, GameObject subGroup) - { - base.ConstructUI(parent, subGroup); - - var labelLayout = m_baseLabel.gameObject.GetComponent(); - labelLayout.minWidth = 50; - labelLayout.flexibleWidth = 0; - - var inputObj = UIFactory.CreateInputField(m_mainContent, "InteractiveNumberInput", "..."); - UIFactory.SetLayoutElement(inputObj, minWidth: 120, minHeight: 25, flexibleWidth: 0); - - m_valueInput = inputObj.GetComponent(); - m_valueInput.gameObject.SetActive(false); - - if (Owner.CanWrite) - { - m_applyBtn = UIFactory.CreateButton(m_mainContent, "ApplyButton", "Apply", OnApplyClicked, new Color(0.2f, 0.2f, 0.2f)); - UIFactory.SetLayoutElement(m_applyBtn.gameObject, minWidth: 50, minHeight: 25, flexibleWidth: 0); - } - } - } -} diff --git a/src/UI/InteractiveValues/InteractiveString.cs b/src/UI/InteractiveValues/InteractiveString.cs deleted file mode 100644 index c14d758..0000000 --- a/src/UI/InteractiveValues/InteractiveString.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Reflection; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI; -using UnityExplorer.UI.Utility; -using UnityExplorer.UI.CacheObject; -using UnityExplorer.Core.Runtime; - -namespace UnityExplorer.UI.InteractiveValues -{ - public class InteractiveString : InteractiveValue - { - public InteractiveString(object value, Type valueType) : base(value, valueType) { } - - public override bool HasSubContent => true; - public override bool SubContentWanted => true; - - public override bool WantInspectBtn => false; - - public override void OnValueUpdated() - { - if (!(Value is string) && Value != null) - Value = RuntimeProvider.Instance.Reflection.UnboxString(Value); - - base.OnValueUpdated(); - } - - public override void OnException(CacheMember member) - { - base.OnException(member); - - if (m_subContentConstructed && m_hiddenObj.gameObject.activeSelf) - m_hiddenObj.gameObject.SetActive(false); - - m_labelLayout.minWidth = 200; - m_labelLayout.flexibleWidth = 5000; - } - - public override void RefreshUIForValue() - { - GetDefaultLabel(false); - - if (!Owner.HasEvaluated) - { - m_baseLabel.text = DefaultLabel; - return; - } - - m_baseLabel.text = m_richValueType; - - if (m_subContentConstructed) - { - if (!m_hiddenObj.gameObject.activeSelf) - m_hiddenObj.gameObject.SetActive(true); - } - - if (!string.IsNullOrEmpty((string)Value)) - { - var toString = (string)Value; - if (toString.Length > 15000) - toString = toString.Substring(0, 15000); - - m_readonlyInput.text = toString; - - if (m_subContentConstructed) - { - m_valueInput.text = toString; - m_placeholderText.text = toString; - } - } - else - { - string s = Value == null - ? "null" - : "empty"; - - m_readonlyInput.text = $"{s}"; - - if (m_subContentConstructed) - { - m_valueInput.text = ""; - m_placeholderText.text = s; - } - } - - m_labelLayout.minWidth = 50; - m_labelLayout.flexibleWidth = 0; - } - - internal void SetValueFromInput() - { - Value = m_valueInput.text; - - if (!typeof(string).IsAssignableFrom(Owner.FallbackType)) - ReflectionProvider.Instance.BoxStringToType(ref Value, Owner.FallbackType); - - Owner.SetValue(); - - // revert back to string now - OnValueUpdated(); - - RefreshUIForValue(); - } - - // for the default label - internal LayoutElement m_labelLayout; - - //internal InputField m_readonlyInput; - internal Text m_readonlyInput; - - // for input - internal InputField m_valueInput; - internal GameObject m_hiddenObj; - internal Text m_placeholderText; - - public override void ConstructUI(GameObject parent, GameObject subGroup) - { - base.ConstructUI(parent, subGroup); - - GetDefaultLabel(false); - m_richValueType = SignatureHighlighter.ParseFullSyntax(FallbackType, false); - - m_labelLayout = m_baseLabel.gameObject.GetComponent(); - - m_readonlyInput = UIFactory.CreateLabel(m_mainContent, "ReadonlyLabel", "", TextAnchor.MiddleLeft); - m_readonlyInput.horizontalOverflow = HorizontalWrapMode.Overflow; - - var testFitter = m_readonlyInput.gameObject.AddComponent(); - testFitter.verticalFit = ContentSizeFitter.FitMode.MinSize; - - UIFactory.SetLayoutElement(m_readonlyInput.gameObject, minHeight: 25, preferredHeight: 25, flexibleHeight: 0); - } - - public override void ConstructSubcontent() - { - base.ConstructSubcontent(); - - var groupObj = UIFactory.CreateVerticalGroup(m_subContentParent, "SubContent", false, false, true, true, 4, new Vector4(3,3,3,3), - new Color(1, 1, 1, 0)); - - m_hiddenObj = UIFactory.CreateLabel(groupObj, "HiddenLabel", "", TextAnchor.MiddleLeft).gameObject; - m_hiddenObj.SetActive(false); - var hiddenText = m_hiddenObj.GetComponent(); - hiddenText.color = Color.clear; - hiddenText.fontSize = 14; - hiddenText.raycastTarget = false; - hiddenText.supportRichText = false; - var hiddenFitter = m_hiddenObj.AddComponent(); - hiddenFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; - UIFactory.SetLayoutElement(m_hiddenObj, minHeight: 25, flexibleHeight: 500, minWidth: 250, flexibleWidth: 9000); - UIFactory.SetLayoutGroup(m_hiddenObj, true, true, true, true); - - var inputObj = UIFactory.CreateInputField(m_hiddenObj, "StringInputField", "...", 14, 3); - UIFactory.SetLayoutElement(inputObj, minWidth: 120, minHeight: 25, flexibleWidth: 5000, flexibleHeight: 5000); - - m_valueInput = inputObj.GetComponent(); - m_valueInput.lineType = InputField.LineType.MultiLineNewline; - - m_placeholderText = m_valueInput.placeholder.GetComponent(); - - m_placeholderText.supportRichText = false; - m_valueInput.textComponent.supportRichText = false; - - m_valueInput.onValueChanged.AddListener((string val) => - { - hiddenText.text = val ?? ""; - LayoutRebuilder.ForceRebuildLayoutImmediate(Owner.m_mainRect); - }); - - if (Owner.CanWrite) - { - var apply = UIFactory.CreateButton(groupObj, "ApplyButton", "Apply", SetValueFromInput, new Color(0.2f, 0.2f, 0.2f)); - UIFactory.SetLayoutElement(apply.gameObject, minWidth: 50, minHeight: 25, flexibleWidth: 0); - } - else - { - m_valueInput.readOnly = true; - } - - RefreshUIForValue(); - } - } -} diff --git a/src/UI/InteractiveValues/InteractiveValue.cs b/src/UI/InteractiveValues/InteractiveValue.cs deleted file mode 100644 index 343a9b7..0000000 --- a/src/UI/InteractiveValues/InteractiveValue.cs +++ /dev/null @@ -1,352 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.UI; -using UnityExplorer.Core; -using UnityExplorer.Core.Unity; -using UnityExplorer.Core.Runtime; -using UnityExplorer.UI; -using UnityExplorer.UI.Utility; -using UnityExplorer.UI.CacheObject; -using UnityExplorer.UI.Main.Home; -using UnityExplorer.UI.Inspectors; - -namespace UnityExplorer.UI.InteractiveValues -{ - public class InteractiveValue - { - /// - /// Get the subclass which supports the provided . - /// - /// The which you want the Type for. - /// The best subclass of which supports the provided . - public static Type GetIValueForType(Type type) - { - // rather ugly but I couldn't think of a cleaner way that was worth it. - // switch-case doesn't really work here. - - // arbitrarily check some types, fastest methods first. - if (type == typeof(bool)) - return typeof(InteractiveBool); - // if type is primitive then it must be a number if its not a bool. Also check for decimal. - else if (type.IsPrimitive || type == typeof(decimal)) - return typeof(InteractiveNumber); - // check for strings - else if (type == typeof(string)) - return typeof(InteractiveString); - // check for enum/flags - else if (typeof(Enum).IsAssignableFrom(type)) - { - // NET 3.5 doesn't have "GetCustomAttribute", gotta use the multiple version. - if (type.GetCustomAttributes(typeof(FlagsAttribute), true) is object[] fa && fa.Any()) - return typeof(InteractiveFlags); - else - return typeof(InteractiveEnum); - } - // check for unity struct types - else if (typeof(Color).IsAssignableFrom(type)) - return typeof(InteractiveColor); - else if (InteractiveFloatStruct.IsTypeSupported(type)) - return typeof(InteractiveFloatStruct); - // check Transform, force InteractiveValue so they dont become InteractiveEnumerables. - else if (typeof(Transform).IsAssignableFrom(type)) - return typeof(InteractiveValue); - // check Dictionaries before Enumerables - else if (ReflectionUtility.IsDictionary(type)) - return typeof(InteractiveDictionary); - // finally check for Enumerables - else if (ReflectionUtility.IsEnumerable(type)) - return typeof(InteractiveEnumerable); - // fallback to default - else - return typeof(InteractiveValue); - } - - public static InteractiveValue Create(object value, Type fallbackType) - { - var type = ReflectionUtility.GetActualType(value) ?? fallbackType; - var iType = GetIValueForType(type); - - return (InteractiveValue)Activator.CreateInstance(iType, new object[] { value, type }); - } - - // ~~~~~~~~~ Instance ~~~~~~~~~ - - public InteractiveValue(object value, Type valueType) - { - this.Value = value; - this.FallbackType = valueType; - } - - public CacheObjectBase Owner; - - public object Value; - public readonly Type FallbackType; - - public virtual bool HasSubContent => false; - public virtual bool SubContentWanted => false; - public virtual bool WantInspectBtn => true; - - public string DefaultLabel => m_defaultLabel ?? GetDefaultLabel(); - internal string m_defaultLabel; - internal string m_richValueType; - - public bool m_UIConstructed; - - public virtual void OnDestroy() - { - if (this.m_mainContent) - { - m_mainContent.transform.SetParent(null, false); - m_mainContent.SetActive(false); - GameObject.Destroy(this.m_mainContent.gameObject); - } - - DestroySubContent(); - } - - public virtual void DestroySubContent() - { - if (this.m_subContentParent && HasSubContent) - { - for (int i = 0; i < this.m_subContentParent.transform.childCount; i++) - { - var child = m_subContentParent.transform.GetChild(i); - if (child) - GameObject.Destroy(child.gameObject); - } - } - - m_subContentConstructed = false; - } - - public virtual void OnValueUpdated() - { - if (!m_UIConstructed) - ConstructUI(m_mainContentParent, m_subContentParent); - - if (Owner is CacheMember ownerMember && !string.IsNullOrEmpty(ownerMember.ReflectionException)) - OnException(ownerMember); - else - RefreshUIForValue(); - } - - public virtual void OnException(CacheMember member) - { - if (m_UIConstructed) - m_baseLabel.text = "" + member.ReflectionException + ""; - - Value = null; - } - - public virtual void RefreshUIForValue() - { - GetDefaultLabel(); - m_baseLabel.text = DefaultLabel; - } - - public void RefreshElementsAfterUpdate() - { - if (WantInspectBtn) - { - bool shouldShowInspect = !Value.IsNullOrDestroyed(); - - if (m_inspectButton.activeSelf != shouldShowInspect) - m_inspectButton.SetActive(shouldShowInspect); - } - - bool subContentWanted = SubContentWanted; - if (Owner is CacheMember cm && (!cm.HasEvaluated || !string.IsNullOrEmpty(cm.ReflectionException))) - subContentWanted = false; - - if (HasSubContent) - { - if (m_subExpandBtn.gameObject.activeSelf != subContentWanted) - m_subExpandBtn.gameObject.SetActive(subContentWanted); - - if (!subContentWanted && m_subContentParent.activeSelf) - ToggleSubcontent(); - } - } - - public virtual void ConstructSubcontent() - { - m_subContentConstructed = true; - } - - public void ToggleSubcontent() - { - if (!this.m_subContentParent.activeSelf) - { - this.m_subContentParent.SetActive(true); - this.m_subContentParent.transform.SetAsLastSibling(); - m_subExpandBtn.GetComponentInChildren().text = "▼"; - } - else - { - this.m_subContentParent.SetActive(false); - m_subExpandBtn.GetComponentInChildren().text = "▲"; - } - - OnToggleSubcontent(m_subContentParent.activeSelf); - - RefreshElementsAfterUpdate(); - } - - internal virtual void OnToggleSubcontent(bool toggle) - { - if (!m_subContentConstructed) - ConstructSubcontent(); - } - - internal MethodInfo m_toStringMethod; - internal MethodInfo m_toStringFormatMethod; - internal bool m_gotToStringMethods; - - public string GetDefaultLabel(bool updateType = true) - { - var valueType = Value?.GetType() ?? this.FallbackType; - if (updateType) - m_richValueType = SignatureHighlighter.ParseFullSyntax(valueType, true); - - if (!Owner.HasEvaluated) - return m_defaultLabel = $"Not yet evaluated ({m_richValueType})"; - - if (Value.IsNullOrDestroyed()) - return m_defaultLabel = $"null ({m_richValueType})"; - - string label; - - // Two dirty fixes for TextAsset and EventSystem, which can have very long ToString results. - if (Value is TextAsset textAsset) - { - label = textAsset.text; - - if (label.Length > 10) - label = $"{label.Substring(0, 10)}..."; - - label = $"\"{label}\" {textAsset.name} ({m_richValueType})"; - } - else if (Value is EventSystem) - { - label = m_richValueType; - } - else // For everything else... - { - if (!m_gotToStringMethods) - { - m_gotToStringMethods = true; - - m_toStringMethod = valueType.GetMethod("ToString", new Type[0]); - m_toStringFormatMethod = valueType.GetMethod("ToString", new Type[] { typeof(string) }); - - // test format method actually works - try - { - m_toStringFormatMethod.Invoke(Value, new object[] { "F3" }); - } - catch - { - m_toStringFormatMethod = null; - } - } - - string toString; - if (m_toStringFormatMethod != null) - toString = (string)m_toStringFormatMethod.Invoke(Value, new object[] { "F3" }); - else - toString = (string)m_toStringMethod.Invoke(Value, new object[0]); - - toString = toString ?? ""; - - string typeName = valueType.FullName; - if (typeName.StartsWith("Il2CppSystem.")) - typeName = typeName.Substring(6, typeName.Length - 6); - - toString = ReflectionProvider.Instance.ProcessTypeNameInString(valueType, toString, ref typeName); - - // If the ToString is just the type name, use our syntax highlighted type name instead. - if (toString == typeName) - { - label = m_richValueType; - } - else // Otherwise, parse the result and put our highlighted name in. - { - if (toString.Length > 200) - toString = toString.Substring(0, 200) + "..."; - - label = toString; - - var unityType = $"({valueType.FullName})"; - if (Value is UnityEngine.Object && label.Contains(unityType)) - label = label.Replace(unityType, $"({m_richValueType})"); - else - label += $" ({m_richValueType})"; - } - } - - return m_defaultLabel = label; - } - - #region UI CONSTRUCTION - - internal GameObject m_mainContentParent; - internal GameObject m_subContentParent; - - internal GameObject m_mainContent; - internal GameObject m_inspectButton; - internal Text m_baseLabel; - - internal Button m_subExpandBtn; - internal bool m_subContentConstructed; - - public virtual void ConstructUI(GameObject parent, GameObject subGroup) - { - m_UIConstructed = true; - - m_mainContent = UIFactory.CreateHorizontalGroup(parent, $"InteractiveValue_{this.GetType().Name}", false, false, true, true, 4, default, - new Color(1, 1, 1, 0), TextAnchor.UpperLeft); - - var mainRect = m_mainContent.GetComponent(); - mainRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 25); - - UIFactory.SetLayoutElement(m_mainContent, flexibleWidth: 9000, minWidth: 175, minHeight: 25, flexibleHeight: 0); - - // subcontent expand button - if (HasSubContent) - { - m_subExpandBtn = UIFactory.CreateButton(m_mainContent, "ExpandSubcontentButton", "▲", ToggleSubcontent, new Color(0.3f, 0.3f, 0.3f)); - UIFactory.SetLayoutElement(m_subExpandBtn.gameObject, minHeight: 25, minWidth: 25, flexibleWidth: 0, flexibleHeight: 0); - } - - // inspect button - - var inspectBtn = UIFactory.CreateButton(m_mainContent, - "InspectButton", - "Inspect", - () => - { - if (!Value.IsNullOrDestroyed(false)) - InspectorManager.Instance.Inspect(this.Value, this.Owner); - }, - new Color(0.3f, 0.3f, 0.3f, 0.2f)); - - m_inspectButton = inspectBtn.gameObject; - UIFactory.SetLayoutElement(m_inspectButton, minWidth: 60, minHeight: 25, flexibleWidth: 0, flexibleHeight: 0); - - m_inspectButton.SetActive(false); - - // value label - - m_baseLabel = UIFactory.CreateLabel(m_mainContent, "ValueLabel", "", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(m_baseLabel.gameObject, flexibleWidth: 9000, minHeight: 25); - - m_subContentParent = subGroup; - } - -#endregion - } -} diff --git a/src/UI/Main/BaseMenuPage.cs b/src/UI/Main/BaseMenuPage.cs deleted file mode 100644 index 6ae78bb..0000000 --- a/src/UI/Main/BaseMenuPage.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; -using UnityEngine.UI; - -namespace UnityExplorer.UI.Main -{ - public enum MenuPages - { - Home, - Search, - CSConsole, - Options - } - - public abstract class BaseMenuPage - { - public abstract string Name { get; } - public abstract MenuPages Type { get; } - public bool WasDisabled { get; internal set; } - - public GameObject Content; - public Button RefNavbarButton { get; set; } - - public bool Enabled - { - get => Content?.activeSelf ?? false; - set => Content?.SetActive(true); - } - - public abstract bool Init(); - public abstract void Update(); - } -} diff --git a/src/UI/Main/CSConsole/AutoCompleter.cs b/src/UI/Main/CSConsole/AutoCompleter.cs deleted file mode 100644 index 281ff12..0000000 --- a/src/UI/Main/CSConsole/AutoCompleter.cs +++ /dev/null @@ -1,302 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.UI; -using UnityExplorer.Core.CSharp; -using UnityExplorer.Core.Input; -using UnityExplorer.Core.Runtime; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI; -using UnityExplorer.UI.Main; - -namespace UnityExplorer.UI.Main.CSConsole -{ - public class AutoCompleter - { - public static AutoCompleter Instance; - - public const int MAX_LABELS = 500; - private const int UPDATES_PER_BATCH = 100; - - public static GameObject m_mainObj; - - private static readonly List m_suggestionButtons = new List(); - private static readonly List m_suggestionTexts = new List(); - private static readonly List m_hiddenSuggestionTexts = new List(); - - private static bool m_suggestionsDirty; - private static Suggestion[] m_suggestions = new Suggestion[0]; - private static int m_lastBatchIndex; - - private static string m_prevInput = "NULL"; - private static int m_lastCaretPos; - - public static void Init() - { - ConstructUI(); - - m_mainObj.SetActive(false); - } - - public static void Update() - { - if (!m_mainObj) - return; - - if (!CSharpConsole.EnableAutocompletes) - { - if (m_mainObj.activeSelf) - m_mainObj.SetActive(false); - - return; - } - - RefreshButtons(); - - UpdatePosition(); - } - - public static void SetSuggestions(Suggestion[] suggestions) - { - m_suggestions = suggestions; - - m_suggestionsDirty = true; - m_lastBatchIndex = 0; - } - - private static void RefreshButtons() - { - if (!m_suggestionsDirty) - { - return; - } - - if (m_suggestions.Length < 1) - { - if (m_mainObj.activeSelf) - { - m_mainObj?.SetActive(false); - } - return; - } - - if (!m_mainObj.activeSelf) - { - m_mainObj.SetActive(true); - } - - if (m_suggestions.Length < 1 || m_lastBatchIndex >= MAX_LABELS) - { - m_suggestionsDirty = false; - return; - } - - int end = m_lastBatchIndex + UPDATES_PER_BATCH; - for (int i = m_lastBatchIndex; i < end && i < MAX_LABELS; i++) - { - if (i >= m_suggestions.Length) - { - if (m_suggestionButtons[i].activeSelf) - { - m_suggestionButtons[i].SetActive(false); - } - } - else - { - if (!m_suggestionButtons[i].activeSelf) - { - m_suggestionButtons[i].SetActive(true); - } - - var suggestion = m_suggestions[i]; - var label = m_suggestionTexts[i]; - var hiddenLabel = m_hiddenSuggestionTexts[i]; - - label.text = suggestion.Full; - hiddenLabel.text = suggestion.Addition; - - label.color = suggestion.TextColor; - } - - m_lastBatchIndex = i; - } - - m_lastBatchIndex++; - } - - private static void UpdatePosition() - { - try - { - var editor = CSharpConsole.Instance; - - if (!editor.InputField.isFocused) - return; - - var textGen = editor.InputText.cachedTextGenerator; - int caretPos = editor.m_lastCaretPos; - - if (caretPos == m_lastCaretPos) - return; - - m_lastCaretPos = caretPos; - - if (caretPos >= 1) - caretPos--; - - var pos = textGen.characters[caretPos].cursorPos; - - pos = editor.InputField.transform.TransformPoint(pos); - - m_mainObj.transform.position = new Vector3(pos.x + 10, pos.y - 20, 0); - } - catch //(Exception e) - { - //ExplorerCore.Log(e.ToString()); - } - } - - private static readonly char[] splitChars = new[] { '{', '}', ',', ';', '<', '>', '(', ')', '[', ']', '=', '|', '&', '?' }; - - public static void CheckAutocomplete() - { - var m_codeEditor = CSharpConsole.Instance; - string input = m_codeEditor.InputField.text; - int caretIndex = m_codeEditor.InputField.caretPosition; - - if (!string.IsNullOrEmpty(input)) - { - try - { - int start = caretIndex <= 0 ? 0 : input.LastIndexOfAny(splitChars, caretIndex - 1) + 1; - input = input.Substring(start, caretIndex - start).Trim(); - } - catch (ArgumentException) { } - } - - if (!string.IsNullOrEmpty(input) && input != m_prevInput) - { - GetAutocompletes(input); - } - else - { - ClearAutocompletes(); - } - - m_prevInput = input; - } - - public static void ClearAutocompletes() - { - if (CSharpConsole.AutoCompletes.Any()) - { - CSharpConsole.AutoCompletes.Clear(); - } - } - - public static void GetAutocompletes(string input) - { - try - { - // Credit ManylMarco - CSharpConsole.AutoCompletes.Clear(); - string[] completions = CSharpConsole.Instance.Evaluator.GetCompletions(input, out string prefix); - if (completions != null) - { - if (prefix == null) - { - prefix = input; - } - - CSharpConsole.AutoCompletes.AddRange(completions - .Where(x => !string.IsNullOrEmpty(x)) - .Select(x => new Suggestion(x, prefix, Suggestion.Contexts.Other)) - ); - } - - string trimmed = input.Trim(); - if (trimmed.StartsWith("using")) - { - trimmed = trimmed.Remove(0, 5).Trim(); - } - - IEnumerable namespaces = Suggestion.Namespaces - .Where(x => x.StartsWith(trimmed) && x.Length > trimmed.Length) - .Select(x => new Suggestion( - x.Substring(trimmed.Length), - x.Substring(0, trimmed.Length), - Suggestion.Contexts.Namespace)); - - CSharpConsole.AutoCompletes.AddRange(namespaces); - - IEnumerable keywords = Suggestion.Keywords - .Where(x => x.StartsWith(trimmed) && x.Length > trimmed.Length) - .Select(x => new Suggestion( - x.Substring(trimmed.Length), - x.Substring(0, trimmed.Length), - Suggestion.Contexts.Keyword)); - - CSharpConsole.AutoCompletes.AddRange(keywords); - } - catch (Exception ex) - { - ExplorerCore.Log("Autocomplete error:\r\n" + ex.ToString()); - ClearAutocompletes(); - } - } - - #region UI Construction - - private static void ConstructUI() - { - var parent = UIManager.CanvasRoot; - - var obj = UIFactory.CreateScrollView(parent, "AutoCompleterScrollView", out GameObject content, out _, new Color(0.1f, 0.1f, 0.1f, 0.95f)); - - m_mainObj = obj; - - var mainRect = obj.GetComponent(); - //m_thisRect = mainRect; - mainRect.pivot = new Vector2(0f, 1f); - mainRect.anchorMin = new Vector2(0.45f, 0.45f); - mainRect.anchorMax = new Vector2(0.65f, 0.6f); - mainRect.offsetMin = Vector2.zero; - mainRect.offsetMax = Vector2.zero; - - var mainGroup = content.GetComponent(); - mainGroup.SetChildControlHeight(false); - mainGroup.SetChildControlWidth(true); - mainGroup.childForceExpandHeight = false; - mainGroup.childForceExpandWidth = true; - - for (int i = 0; i < MAX_LABELS; i++) - { - var btn = UIFactory.CreateButton(content, "AutoCompleteButton", "", null); - RuntimeProvider.Instance.SetColorBlock(btn, new Color(0, 0, 0, 0), highlighted: new Color(0.2f, 0.2f, 0.2f, 1.0f)); - - var nav = btn.navigation; - nav.mode = Navigation.Mode.Vertical; - btn.navigation = nav; - - UIFactory.SetLayoutElement(btn.gameObject, minHeight: 20); - - var text = btn.GetComponentInChildren(); - text.alignment = TextAnchor.MiddleLeft; - text.color = Color.white; - - var hiddenChild = UIFactory.CreateUIObject("HiddenText", btn.gameObject); - hiddenChild.SetActive(false); - var hiddenText = hiddenChild.AddComponent(); - m_hiddenSuggestionTexts.Add(hiddenText); - btn.onClick.AddListener(() => { CSharpConsole.Instance.UseAutocomplete(hiddenText.text); }); - - m_suggestionButtons.Add(btn.gameObject); - m_suggestionTexts.Add(text); - } - } - - #endregion - } -} diff --git a/src/UI/Main/CSConsole/CSLexerHighlighter.cs b/src/UI/Main/CSConsole/CSLexerHighlighter.cs deleted file mode 100644 index 10654bd..0000000 --- a/src/UI/Main/CSConsole/CSLexerHighlighter.cs +++ /dev/null @@ -1,290 +0,0 @@ -using System.Collections.Generic; -using System.Text; -using UnityEngine; -using UnityExplorer.UI.Main.CSConsole.Lexer; - -namespace UnityExplorer.UI.Main.CSConsole -{ - public struct LexerMatchInfo - { - public int startIndex; - public int endIndex; - public string htmlColor; - } - - public enum DelimiterType - { - Start, - End, - }; - - public class CSLexerHighlighter - { - private string inputString; - private readonly Matcher[] matchers; - private readonly HashSet startDelimiters; - private readonly HashSet endDelimiters; - private int currentIndex; - private int currentLookaheadIndex; - - public char Current { get; private set; } - public char Previous { get; private set; } - - public bool EndOfStream => currentLookaheadIndex >= inputString.Length; - - public static char indentOpen = '{'; - public static char indentClose = '}'; - private static StringBuilder indentBuilder = new StringBuilder(); - - public static char[] delimiters = new[] - { - '[', ']', '(', ')', '{', '}', ';', ':', ',', '.' - }; - - public static CommentMatch commentMatcher = new CommentMatch(); - public static SymbolMatch symbolMatcher = new SymbolMatch(); - public static NumberMatch numberMatcher = new NumberMatch(); - public static StringMatch stringMatcher = new StringMatch(); - public static KeywordMatch validKeywordMatcher = new KeywordMatch(); - - // ~~~~~~~ ctor ~~~~~~~ - - public CSLexerHighlighter() - { - startDelimiters = new HashSet(delimiters); - endDelimiters = new HashSet(delimiters); - - this.matchers = new Matcher[] - { - commentMatcher, - symbolMatcher, - numberMatcher, - stringMatcher, - validKeywordMatcher, - }; - - foreach (Matcher lexer in matchers) - { - foreach (char c in lexer.StartChars) - { - if (!startDelimiters.Contains(c)) - startDelimiters.Add(c); - } - - foreach (char c in lexer.EndChars) - { - if (!endDelimiters.Contains(c)) - endDelimiters.Add(c); - } - } - } - - // ~~~~~~~ Lex Matching ~~~~~~~ - - public IEnumerable GetMatches(string input) - { - if (input == null || matchers == null || matchers.Length == 0) - { - yield break; - } - - inputString = input; - Current = ' '; - Previous = ' '; - currentIndex = 0; - currentLookaheadIndex = 0; - - while (!EndOfStream) - { - bool didMatchLexer = false; - - ReadWhiteSpace(); - - foreach (Matcher matcher in matchers) - { - int startIndex = currentIndex; - - bool isMatched = matcher.IsMatch(this); - - if (isMatched) - { - int endIndex = currentIndex; - - didMatchLexer = true; - - yield return new LexerMatchInfo - { - startIndex = startIndex, - endIndex = endIndex, - htmlColor = matcher.HexColor, - }; - - break; - } - } - - if (!didMatchLexer) - { - ReadNext(); - Commit(); - } - } - } - - // ~~~~~~~ Indent ~~~~~~~ - - public static string GetIndentForInput(string input, int indent, out int caretPosition) - { - indentBuilder = new StringBuilder(); - - indent += 1; - - bool stringState = false; - - for (int i = 0; i < input.Length; i++) - { - if (input[i] == '"') - { - stringState = !stringState; - } - - if (input[i] == '\n') - { - indentBuilder.Append('\n'); - for (int j = 0; j < indent; j++) - { - indentBuilder.Append("\t"); - } - } - else if (input[i] == '\t') - { - continue; - } - else if (!stringState && input[i] == indentOpen) - { - indentBuilder.Append(indentOpen); - indent++; - } - else if (!stringState && input[i] == indentClose) - { - indentBuilder.Append(indentClose); - indent--; - } - else - { - indentBuilder.Append(input[i]); - } - } - - string formattedSection = indentBuilder.ToString(); - - caretPosition = formattedSection.Length - 1; - - for (int i = formattedSection.Length - 1; i >= 0; i--) - { - if (formattedSection[i] == '\n') - { - continue; - } - - caretPosition = i; - break; - } - - return formattedSection; - } - - public static int GetIndentLevel(string inputString, int startIndex, int endIndex) - { - int indent = 0; - - for (int i = startIndex; i < endIndex; i++) - { - if (inputString[i] == '\t') - { - indent++; - } - - // Check for end line or other characters - if (inputString[i] == '\n' || inputString[i] != ' ') - { - break; - } - } - - return indent; - } - - // Lexer reading - - public char ReadNext() - { - if (EndOfStream) - { - return '\0'; - } - - Previous = Current; - - Current = inputString[currentLookaheadIndex]; - currentLookaheadIndex++; - - return Current; - } - - public void Rollback(int amount = -1) - { - if (amount == -1) - { - currentLookaheadIndex = currentIndex; - } - else - { - if (currentLookaheadIndex > currentIndex) - { - currentLookaheadIndex -= amount; - } - } - - int previousIndex = currentLookaheadIndex - 1; - - if (previousIndex >= inputString.Length) - { - Previous = inputString[inputString.Length - 1]; - } - else if (previousIndex >= 0) - { - Previous = inputString[previousIndex]; - } - else - { - Previous = ' '; - } - } - - public void Commit() - { - currentIndex = currentLookaheadIndex; - } - - public bool IsSpecialSymbol(char character, DelimiterType position = DelimiterType.Start) - { - if (position == DelimiterType.Start) - { - return startDelimiters.Contains(character); - } - - return endDelimiters.Contains(character); - } - - private void ReadWhiteSpace() - { - while (char.IsWhiteSpace(ReadNext()) == true) - { - Commit(); - } - - Rollback(); - } - } -} \ No newline at end of file diff --git a/src/UI/Main/CSConsole/CSharpConsole.cs b/src/UI/Main/CSConsole/CSharpConsole.cs deleted file mode 100644 index 9a13ba5..0000000 --- a/src/UI/Main/CSConsole/CSharpConsole.cs +++ /dev/null @@ -1,590 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text; -using UnityExplorer.Core.CSharp; -using System.Linq; -using UnityExplorer.Core.Input; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.UI; -using UnityExplorer.UI.Main.CSConsole; -using UnityExplorer.Core; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI.Utility; - -namespace UnityExplorer.UI.Main.CSConsole -{ - public class CSharpConsole : BaseMenuPage - { - public override string Name => "C# Console"; - public override MenuPages Type => MenuPages.CSConsole; - - public static CSharpConsole Instance { get; private set; } - - public ScriptEvaluator Evaluator; - internal StringBuilder m_evalLogBuilder; - - public static List UsingDirectives; - - public static readonly string[] DefaultUsing = new string[] - { - "System", - "System.Linq", - "System.Collections", - "System.Collections.Generic", - "System.Reflection", - "UnityEngine", -#if CPP - "UnhollowerBaseLib", - "UnhollowerRuntimeLib", -#endif - }; - - public override bool Init() - { - Instance = this; - - try - { - InitConsole(); - - AutoCompleter.Init(); - - ResetConsole(false); - // Make sure compiler is supported on this platform - Evaluator.Compile("new object();"); - - return true; - } - catch (Exception e) - { - string info = "The C# Console has been disabled because"; - if (e is NotSupportedException && e.TargetSite?.Name == "DefineDynamicAssembly") - info += " Reflection.Emit is not supported."; - else - info += $" of an unknown error.\r\n({e.ReflectionExToString()})"; - - ExplorerCore.LogWarning(info); - - this.RefNavbarButton.GetComponentInChildren().text += " (disabled)"; - - return false; - } - } - - public void ResetConsole(bool log = true) - { - if (Evaluator != null) - Evaluator.Dispose(); - - m_evalLogBuilder = new StringBuilder(); - - Evaluator = new ScriptEvaluator(new StringWriter(m_evalLogBuilder)) { InteractiveBaseClass = typeof(ScriptInteraction) }; - - UsingDirectives = new List(); - - foreach (string use in DefaultUsing) - AddUsing(use); - - if (log) - ExplorerCore.Log($"C# Console reset. Using directives:\r\n{Evaluator.GetUsing()}"); - } - - public override void Update() - { - UpdateConsole(); - - AutoCompleter.Update(); - } - - public void AddUsing(string asm) - { - if (!UsingDirectives.Contains(asm)) - { - Evaluate($"using {asm};", true); - UsingDirectives.Add(asm); - } - } - - public void Evaluate(string code, bool supressLog = false) - { - try - { - Evaluator.Run(code); - - string output = ScriptEvaluator._textWriter.ToString(); - var outputSplit = output.Split('\n'); - if (outputSplit.Length >= 2) - output = outputSplit[outputSplit.Length - 2]; - m_evalLogBuilder.Clear(); - - if (ScriptEvaluator._reportPrinter.ErrorsCount > 0) - throw new FormatException($"Unable to compile the code. Evaluator's last output was:\r\n{output}"); - - if (!supressLog) - ExplorerCore.Log("Code executed successfully."); - } - catch (FormatException fex) - { - if (!supressLog) - ExplorerCore.LogWarning(fex.Message); - } - catch (Exception ex) - { - if (!supressLog) - ExplorerCore.LogWarning(ex); - } - } - - // ================================================================================================= - - // UI stuff - - public InputField InputField { get; internal set; } - public Text InputText { get; internal set; } - public int CurrentIndent { get; private set; } - - public static bool EnableCtrlRShortcut { get; set; } = true; - public static bool EnableAutoIndent { get; set; } = true; - public static bool EnableAutocompletes { get; set; } = true; - public static List AutoCompletes = new List(); - - public string HighlightedText => inputHighlightText.text; - private Text inputHighlightText; - - private CSLexerHighlighter highlightLexer; - - internal int m_lastCaretPos; - internal int m_fixCaretPos; - internal bool m_fixwanted; - internal float m_lastSelectAlpha; - - private static readonly KeyCode[] onFocusKeys = - { - KeyCode.Return, KeyCode.Backspace, KeyCode.UpArrow, - KeyCode.DownArrow, KeyCode.LeftArrow, KeyCode.RightArrow - }; - - internal const string STARTUP_TEXT = @"Welcome to the UnityExplorer C# Console. - -The following helper methods are available: - -* Log(""message"") logs a message to the debug console - -* StartCoroutine(IEnumerator routine) start the IEnumerator as a UnityEngine.Coroutine - -* CurrentTarget() returns the currently inspected target on the Home page - -* AllTargets() returns an object[] array containing all inspected instances - -* Inspect(someObject) to inspect an instance, eg. Inspect(Camera.main); - -* Inspect(typeof(SomeClass)) to inspect a Class with static reflection - -* AddUsing(""SomeNamespace"") adds a using directive to the C# console - -* GetUsing() logs the current using directives to the debug console - -* Reset() resets all using directives and variables -"; - - public void InitConsole() - { - highlightLexer = new CSLexerHighlighter(); - - ConstructUI(); - - InputField.onValueChanged.AddListener((string s) => { OnInputChanged(s); }); - } - - internal static bool IsUserCopyPasting() - { - return (InputManager.GetKey(KeyCode.LeftControl) || InputManager.GetKey(KeyCode.RightControl)) - && InputManager.GetKeyDown(KeyCode.V); - } - - public void UpdateConsole() - { - if (s_copyPasteBuffer != null) - { - if (!IsUserCopyPasting()) - { - OnInputChanged(s_copyPasteBuffer); - - s_copyPasteBuffer = null; - } - } - - if (EnableCtrlRShortcut) - { - if ((InputManager.GetKey(KeyCode.LeftControl) || InputManager.GetKey(KeyCode.RightControl)) - && InputManager.GetKeyDown(KeyCode.R)) - { - var text = InputField.text.Trim(); - if (!string.IsNullOrEmpty(text)) - { - Evaluate(text); - return; - } - } - } - - if (EnableAutoIndent && InputManager.GetKeyDown(KeyCode.Return)) - AutoIndentCaret(); - - if (EnableAutocompletes && InputField.isFocused) - { - if (InputManager.GetMouseButton(0) || onFocusKeys.Any(it => InputManager.GetKeyDown(it))) - UpdateAutocompletes(); - } - - if (m_fixCaretPos > 0) - { - if (!m_fixwanted) - { - EventSystem.current.SetSelectedGameObject(InputField.gameObject, null); - m_fixwanted = true; - } - else - { - InputField.caretPosition = m_fixCaretPos; - InputField.selectionFocusPosition = m_fixCaretPos; - - m_fixwanted = false; - m_fixCaretPos = -1; - - var color = InputField.selectionColor; - color.a = m_lastSelectAlpha; - InputField.selectionColor = color; - } - } - else if (InputField.caretPosition > 0) - { - m_lastCaretPos = InputField.caretPosition; - } - } - - internal void UpdateAutocompletes() - { - AutoCompleter.CheckAutocomplete(); - AutoCompleter.SetSuggestions(AutoCompletes.ToArray()); - } - - public void UseAutocomplete(string suggestion) - { - string input = InputField.text; - input = input.Insert(m_lastCaretPos, suggestion); - InputField.text = input; - - m_fixCaretPos = m_lastCaretPos += suggestion.Length; - - var color = InputField.selectionColor; - m_lastSelectAlpha = color.a; - color.a = 0f; - InputField.selectionColor = color; - - AutoCompleter.ClearAutocompletes(); - } - - internal static string s_copyPasteBuffer; - - public void OnInputChanged(string newText, bool forceUpdate = false) - { - if (IsUserCopyPasting()) - { - //Console.WriteLine("Copy+Paste detected!"); - s_copyPasteBuffer = newText; - return; - } - - if (EnableAutoIndent) - UpdateIndent(newText); - - if (!forceUpdate && string.IsNullOrEmpty(newText)) - inputHighlightText.text = string.Empty; - else - inputHighlightText.text = SyntaxHighlightContent(newText); - - if (EnableAutocompletes) - UpdateAutocompletes(); - } - - private void UpdateIndent(string newText) - { - int caret = InputField.caretPosition; - - int len = newText.Length; - if (caret < 0 || caret >= len) - { - while (caret >= 0 && caret >= len) - caret--; - - if (caret < 0) - return; - } - - CurrentIndent = 0; - - bool stringState = false; - - for (int i = 0; i < caret && i < newText.Length; i++) - { - char character = newText[i]; - - if (character == '"') - stringState = !stringState; - else if (!stringState && character == CSLexerHighlighter.indentOpen) - CurrentIndent++; - else if (!stringState && character == CSLexerHighlighter.indentClose) - CurrentIndent--; - } - - if (CurrentIndent < 0) - CurrentIndent = 0; - } - - private const string CLOSE_COLOR_TAG = ""; - - private string SyntaxHighlightContent(string inputText) - { - int offset = 0; - - //Console.WriteLine("Highlighting input text:\r\n" + inputText); - - string ret = ""; - - foreach (var match in highlightLexer.GetMatches(inputText)) - { - for (int i = offset; i < match.startIndex; i++) - ret += inputText[i]; - - ret += $"{match.htmlColor}"; - - for (int i = match.startIndex; i < match.endIndex; i++) - ret += inputText[i]; - - ret += CLOSE_COLOR_TAG; - - offset = match.endIndex; - } - - for (int i = offset; i < inputText.Length; i++) - ret += inputText[i]; - - return ret; - } - - private void AutoIndentCaret() - { - if (CurrentIndent > 0) - { - string indent = GetAutoIndentTab(CurrentIndent); - - if (indent.Length > 0) - { - int caretPos = InputField.caretPosition; - - string indentMinusOne = indent.Substring(0, indent.Length - 1); - - // get last index of { - // chuck it on the next line if its not already - string text = InputField.text; - string sub = InputField.text.Substring(0, InputField.caretPosition); - int lastIndex = sub.LastIndexOf("{"); - int offset = lastIndex - 1; - if (offset >= 0 && text[offset] != '\n' && text[offset] != '\t') - { - string open = "\n" + indentMinusOne; - - InputField.text = text.Insert(offset + 1, open); - - caretPos += open.Length; - } - - // check if should add auto-close } - int numOpen = InputField.text.Where(x => x == CSLexerHighlighter.indentOpen).Count(); - int numClose = InputField.text.Where(x => x == CSLexerHighlighter.indentClose).Count(); - - if (numOpen > numClose) - { - // add auto-indent closing - indentMinusOne = $"\n{indentMinusOne}}}"; - InputField.text = InputField.text.Insert(caretPos, indentMinusOne); - } - - // insert the actual auto indent now - InputField.text = InputField.text.Insert(caretPos, indent); - - //InputField.stringPosition = caretPos + indent.Length; - InputField.caretPosition = caretPos + indent.Length; - } - } - - // Update line column and indent positions - UpdateIndent(InputField.text); - - InputText.text = InputField.text; - //inputText.SetText(InputField.text, true); - InputText.Rebuild(CanvasUpdate.Prelayout); - InputField.ForceLabelUpdate(); - InputField.Rebuild(CanvasUpdate.Prelayout); - - OnInputChanged(InputText.text, true); - } - - private string GetAutoIndentTab(int amount) - { - string tab = string.Empty; - - for (int i = 0; i < amount; i++) - { - tab += "\t"; - } - - return tab; - } - - // ========== UI CONSTRUCTION =========== // - - public void ConstructUI() - { - Content = UIFactory.CreateVerticalGroup(MainMenu.Instance.PageViewport, "CSharpConsole", true, true, true, true); - UIFactory.SetLayoutElement(Content, preferredHeight: 500, flexibleHeight: 9000); - - #region TOP BAR - - // Main group object - - var topBarObj = UIFactory.CreateHorizontalGroup(Content, "TopBar", true, true, true, true, 10, new Vector4(8, 8, 30, 30), - default, TextAnchor.LowerCenter); - UIFactory.SetLayoutElement(topBarObj, minHeight: 50, flexibleHeight: 0); - - // Top label - - var topBarLabel = UIFactory.CreateLabel(topBarObj, "TopLabel", "C# Console", TextAnchor.MiddleLeft, default, true, 25); - UIFactory.SetLayoutElement(topBarLabel.gameObject, preferredWidth: 150, flexibleWidth: 5000); - - // Enable Ctrl+R toggle - - var ctrlRToggleObj = UIFactory.CreateToggle(topBarObj, "CtrlRToggle", out Toggle ctrlRToggle, out Text ctrlRToggleText); - ctrlRToggle.onValueChanged.AddListener((bool val) => { EnableCtrlRShortcut = val; }); - - ctrlRToggleText.text = "Run on Ctrl+R"; - ctrlRToggleText.alignment = TextAnchor.UpperLeft; - UIFactory.SetLayoutElement(ctrlRToggleObj, minWidth: 140, flexibleWidth: 0, minHeight: 25); - - // Enable Suggestions toggle - - var suggestToggleObj = UIFactory.CreateToggle(topBarObj, "SuggestionToggle", out Toggle suggestToggle, out Text suggestToggleText); - suggestToggle.onValueChanged.AddListener((bool val) => - { - EnableAutocompletes = val; - AutoCompleter.Update(); - }); - - suggestToggleText.text = "Suggestions"; - suggestToggleText.alignment = TextAnchor.UpperLeft; - - UIFactory.SetLayoutElement(suggestToggleObj, minWidth: 120, flexibleWidth: 0, minHeight: 25); - - // Enable Auto-indent toggle - - var autoIndentToggleObj = UIFactory.CreateToggle(topBarObj, "IndentToggle", out Toggle autoIndentToggle, out Text autoIndentToggleText); - autoIndentToggle.onValueChanged.AddListener((bool val) => EnableAutoIndent = val); - - autoIndentToggleText.text = "Auto-indent on Enter"; - autoIndentToggleText.alignment = TextAnchor.UpperLeft; - - UIFactory.SetLayoutElement(autoIndentToggleObj, minWidth: 180, flexibleWidth: 0, minHeight: 25); - - #endregion - - #region CONSOLE INPUT - - int fontSize = 16; - - var inputObj = UIFactory.CreateSrollInputField(Content, "ConsoleInput", STARTUP_TEXT, out InputFieldScroller consoleScroll, fontSize); - - var inputField = consoleScroll.inputField; - - var mainTextObj = inputField.textComponent.gameObject; - var mainTextInput = inputField.textComponent; - mainTextInput.supportRichText = false; - mainTextInput.color = new Color(1, 1, 1, 0.5f); - - var placeHolderText = inputField.placeholder.GetComponent(); - placeHolderText.fontSize = fontSize; - - var highlightTextObj = UIFactory.CreateUIObject("HighlightText", mainTextObj.gameObject); - var highlightTextRect = highlightTextObj.GetComponent(); - highlightTextRect.pivot = new Vector2(0, 1); - highlightTextRect.anchorMin = Vector2.zero; - highlightTextRect.anchorMax = Vector2.one; - highlightTextRect.offsetMin = new Vector2(20, 0); - highlightTextRect.offsetMax = new Vector2(14, 0); - - var highlightTextInput = highlightTextObj.AddComponent(); - highlightTextInput.supportRichText = true; - highlightTextInput.fontSize = fontSize; - - #endregion - - #region COMPILE BUTTON BAR - - var horozGroupObj = UIFactory.CreateHorizontalGroup(Content, "BigButtons", true, true, true, true, 0, new Vector4(2,2,2,2), - new Color(1, 1, 1, 0)); - - var resetButton = UIFactory.CreateButton(horozGroupObj, "ResetButton", "Reset", () => ResetConsole(), "666666".ToColor()); - var resetBtnText = resetButton.GetComponentInChildren(); - resetBtnText.fontSize = 18; - UIFactory.SetLayoutElement(resetButton.gameObject, preferredWidth: 80, flexibleWidth: 0, minHeight: 45, flexibleHeight: 0); - - var compileButton = UIFactory.CreateButton(horozGroupObj, "CompileButton", "Compile", CompileCallback, - new Color(14f / 255f, 80f / 255f, 14f / 255f)); - var btnText = compileButton.GetComponentInChildren(); - btnText.fontSize = 18; - UIFactory.SetLayoutElement(compileButton.gameObject, preferredWidth: 80, flexibleWidth: 0, minHeight: 45, flexibleHeight: 0); - - void CompileCallback() - { - if (!string.IsNullOrEmpty(inputField.text)) - Evaluate(inputField.text.Trim()); - else - ExplorerCore.Log("Cannot evaluate empty input!"); - } - - #endregion - - //mainTextInput.supportRichText = false; - - mainTextInput.font = UIManager.ConsoleFont; - placeHolderText.font = UIManager.ConsoleFont; - highlightTextInput.font = UIManager.ConsoleFont; - - // reset this after formatting finalized - highlightTextRect.anchorMin = Vector2.zero; - highlightTextRect.anchorMax = Vector2.one; - highlightTextRect.offsetMin = Vector2.zero; - highlightTextRect.offsetMax = Vector2.zero; - - // assign references - - this.InputField = inputField; - - this.InputText = mainTextInput; - this.inputHighlightText = highlightTextInput; - } - - - - // ================================================================================================ - - private class VoidType - { - public static readonly VoidType Value = new VoidType(); - private VoidType() { } - } - } -} diff --git a/src/UI/Main/CSConsole/Lexer/CommentMatch.cs b/src/UI/Main/CSConsole/Lexer/CommentMatch.cs deleted file mode 100644 index 35fac37..0000000 --- a/src/UI/Main/CSConsole/Lexer/CommentMatch.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace UnityExplorer.UI.Main.CSConsole.Lexer -{ - public class CommentMatch : Matcher - { - public string lineCommentStart = @"//"; - public string blockCommentStart = @"/*"; - public string blockCommentEnd = @"*/"; - - public override Color HighlightColor => new Color(0.34f, 0.65f, 0.29f, 1.0f); - public override IEnumerable StartChars => new char[] { lineCommentStart[0], blockCommentStart[0] }; - public override IEnumerable EndChars => new char[] { blockCommentEnd[0] }; - public override bool IsImplicitMatch(CSLexerHighlighter lexer) => IsMatch(lexer, lineCommentStart) || IsMatch(lexer, blockCommentStart); - - private bool IsMatch(CSLexerHighlighter lexer, string commentType) - { - if (!string.IsNullOrEmpty(commentType)) - { - lexer.Rollback(); - - bool match = true; - for (int i = 0; i < commentType.Length; i++) - { - if (commentType[i] != lexer.ReadNext()) - { - match = false; - break; - } - } - - if (match) - { - // Read until end of line or file - while (!IsEndLineOrEndFile(lexer, lexer.ReadNext())) { } - - return true; - } - } - return false; - } - - private bool IsEndLineOrEndFile(CSLexerHighlighter lexer, char character) => lexer.EndOfStream || character == '\n' || character == '\r'; - } -} diff --git a/src/UI/Main/CSConsole/Lexer/KeywordMatch.cs b/src/UI/Main/CSConsole/Lexer/KeywordMatch.cs deleted file mode 100644 index 08b9c0f..0000000 --- a/src/UI/Main/CSConsole/Lexer/KeywordMatch.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace UnityExplorer.UI.Main.CSConsole.Lexer -{ - // I use two different KeywordMatch instances (valid and invalid). - // This class just contains common implementations. - public class KeywordMatch : Matcher - { - public string[] Keywords = new[] {"add", "as", "ascending", "await", "bool", "break", "by", "byte", -"case", "catch", "char", "checked", "const", "continue", "decimal", "default", "descending", "do", "dynamic", -"else", "equals", "false", "finally", "float", "for", "foreach", "from", "global", "goto", "group", -"if", "in", "int", "into", "is", "join", "let", "lock", "long", "new", "null", "object", "on", "orderby", "out", -"ref", "remove", "return", "sbyte", "select", "short", "sizeof", "stackalloc", "string", -"switch", "throw", "true", "try", "typeof", "uint", "ulong", "ushort", "var", "where", "while", "yield", -"abstract", "async", "base", "class", "delegate", "enum", "explicit", "extern", "fixed", "get", -"implicit", "interface", "internal", "namespace", "operator", "override", "params", "private", "protected", "public", -"using", "partial", "readonly", "sealed", "set", "static", "struct", "this", "unchecked", "unsafe", "value", "virtual", "volatile", "void" }; - - public override Color HighlightColor => highlightColor; - public Color highlightColor = new Color(0.33f, 0.61f, 0.83f, 1.0f); - - private readonly HashSet shortlist = new HashSet(); - private readonly Stack removeList = new Stack(); - - public override bool IsImplicitMatch(CSLexerHighlighter lexer) - { - if (!char.IsWhiteSpace(lexer.Previous) && - !lexer.IsSpecialSymbol(lexer.Previous, DelimiterType.End)) - { - return false; - } - - shortlist.Clear(); - - int currentIndex = 0; - char currentChar = lexer.ReadNext(); - - for (int i = 0; i < Keywords.Length; i++) - { - if (Keywords[i][0] == currentChar) - { - shortlist.Add(Keywords[i]); - } - } - - if (shortlist.Count == 0) - { - return false; - } - - do - { - if (lexer.EndOfStream) - { - RemoveLongStrings(currentIndex + 1); - break; - } - - currentChar = lexer.ReadNext(); - currentIndex++; - - if (char.IsWhiteSpace(currentChar) || - lexer.IsSpecialSymbol(currentChar, DelimiterType.Start)) - { - RemoveLongStrings(currentIndex); - lexer.Rollback(1); - break; - } - - foreach (string keyword in shortlist) - { - if (currentIndex >= keyword.Length || keyword[currentIndex] != currentChar) - { - removeList.Push(keyword); - } - } - - while (removeList.Count > 0) - { - shortlist.Remove(removeList.Pop()); - } - } - while (shortlist.Count > 0); - - return shortlist.Count > 0; - } - - private void RemoveLongStrings(int length) - { - foreach (string keyword in shortlist) - { - if (keyword.Length > length) - { - removeList.Push(keyword); - } - } - - while (removeList.Count > 0) - { - shortlist.Remove(removeList.Pop()); - } - } - } -} diff --git a/src/UI/Main/CSConsole/Lexer/Matcher.cs b/src/UI/Main/CSConsole/Lexer/Matcher.cs deleted file mode 100644 index 0b5b53f..0000000 --- a/src/UI/Main/CSConsole/Lexer/Matcher.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using System.Linq; -using UnityExplorer.Core.Unity; - -namespace UnityExplorer.UI.Main.CSConsole.Lexer -{ - public abstract class Matcher - { - public abstract Color HighlightColor { get; } - - public string HexColor => htmlColor ?? (htmlColor = ""); - private string htmlColor; - - public virtual IEnumerable StartChars => Enumerable.Empty(); - public virtual IEnumerable EndChars => Enumerable.Empty(); - - public abstract bool IsImplicitMatch(CSLexerHighlighter lexer); - - public bool IsMatch(CSLexerHighlighter lexer) - { - if (IsImplicitMatch(lexer)) - { - lexer.Commit(); - return true; - } - - lexer.Rollback(); - return false; - } - } -} diff --git a/src/UI/Main/CSConsole/Lexer/NumberMatch.cs b/src/UI/Main/CSConsole/Lexer/NumberMatch.cs deleted file mode 100644 index 75b352d..0000000 --- a/src/UI/Main/CSConsole/Lexer/NumberMatch.cs +++ /dev/null @@ -1,39 +0,0 @@ -using UnityEngine; - -namespace UnityExplorer.UI.Main.CSConsole.Lexer -{ - public class NumberMatch : Matcher - { - public override Color HighlightColor => new Color(0.58f, 0.33f, 0.33f, 1.0f); - - public override bool IsImplicitMatch(CSLexerHighlighter lexer) - { - if (!char.IsWhiteSpace(lexer.Previous) && - !lexer.IsSpecialSymbol(lexer.Previous, DelimiterType.End)) - { - return false; - } - - bool matchedNumber = false; - - while (!lexer.EndOfStream) - { - if (IsNumberOrDecimalPoint(lexer.ReadNext())) - { - matchedNumber = true; - lexer.Commit(); - } - else - { - lexer.Rollback(); - break; - } - } - - return matchedNumber; - } - - private bool IsNumberOrDecimalPoint(char character) => char.IsNumber(character) || character == '.'; - } - -} diff --git a/src/UI/Main/CSConsole/Lexer/StringMatch.cs b/src/UI/Main/CSConsole/Lexer/StringMatch.cs deleted file mode 100644 index 8712ea3..0000000 --- a/src/UI/Main/CSConsole/Lexer/StringMatch.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace UnityExplorer.UI.Main.CSConsole.Lexer -{ - public class StringMatch : Matcher - { - public override Color HighlightColor => new Color(0.79f, 0.52f, 0.32f, 1.0f); - - public override IEnumerable StartChars => new[] { '"' }; - public override IEnumerable EndChars => new[] { '"' }; - - public override bool IsImplicitMatch(CSLexerHighlighter lexer) - { - if (lexer.ReadNext() == '"') - { - while (!IsClosingQuoteOrEndFile(lexer, lexer.ReadNext())) { } - - return true; - } - return false; - } - - private bool IsClosingQuoteOrEndFile(CSLexerHighlighter lexer, char character) => lexer.EndOfStream || character == '"'; - } -} diff --git a/src/UI/Main/CSConsole/Lexer/SymbolMatch.cs b/src/UI/Main/CSConsole/Lexer/SymbolMatch.cs deleted file mode 100644 index 9ba817b..0000000 --- a/src/UI/Main/CSConsole/Lexer/SymbolMatch.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using UnityEngine; - -namespace UnityExplorer.UI.Main.CSConsole.Lexer -{ - public class SymbolMatch : Matcher - { - public override Color HighlightColor => new Color(0.58f, 0.47f, 0.37f, 1.0f); - - private readonly string[] symbols = new[] - { - "[", "]", "(", ")", ".", "?", ":", "+", "-", "*", "/", "%", "&", "|", "^", "~", "=", "<", ">", - "++", "--", "&&", "||", "<<", ">>", "==", "!=", "<=", ">=", "+=", "-=", "*=", "/=", "%=", "&=", - "|=", "^=", "<<=", ">>=", "->", "??", "=>", - }; - - private static readonly List shortlist = new List(); - private static readonly Stack removeList = new Stack(); - - public override IEnumerable StartChars => symbols.Select(s => s[0]); - public override IEnumerable EndChars => symbols.Select(s => s[0]); - - public override bool IsImplicitMatch(CSLexerHighlighter lexer) - { - if (lexer == null) - return false; - - if (!char.IsWhiteSpace(lexer.Previous) && - !char.IsLetter(lexer.Previous) && - !char.IsDigit(lexer.Previous) && - !lexer.IsSpecialSymbol(lexer.Previous, DelimiterType.End)) - { - return false; - } - - shortlist.Clear(); - - int currentIndex = 0; - char currentChar = lexer.ReadNext(); - - for (int i = symbols.Length - 1; i >= 0; i--) - { - if (symbols[i][0] == currentChar) - shortlist.Add(symbols[i]); - } - - if (shortlist.Count == 0) - return false; - - do - { - if (lexer.EndOfStream) - { - RemoveLongStrings(currentIndex + 1); - break; - } - - currentChar = lexer.ReadNext(); - currentIndex++; - - if (char.IsWhiteSpace(currentChar) || - char.IsLetter(currentChar) || - char.IsDigit(currentChar) || - lexer.IsSpecialSymbol(currentChar, DelimiterType.Start)) - { - RemoveLongStrings(currentIndex); - lexer.Rollback(1); - break; - } - - foreach (string symbol in shortlist) - { - if (currentIndex >= symbol.Length || symbol[currentIndex] != currentChar) - { - removeList.Push(symbol); - } - } - - while (removeList.Count > 0) - { - shortlist.Remove(removeList.Pop()); - } - } - while (shortlist.Count > 0); - - return shortlist.Count > 0; - } - - private void RemoveLongStrings(int length) - { - foreach (string keyword in shortlist) - { - if (keyword.Length > length) - { - removeList.Push(keyword); - } - } - - while (removeList.Count > 0) - { - shortlist.Remove(removeList.Pop()); - } - } - } -} diff --git a/src/UI/Main/DebugConsole.cs b/src/UI/Main/DebugConsole.cs deleted file mode 100644 index 3b0c92d..0000000 --- a/src/UI/Main/DebugConsole.cs +++ /dev/null @@ -1,238 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Config; -using System.IO; -using System.Linq; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI.Utility; - -namespace UnityExplorer.UI.Main -{ - public class DebugConsole - { - public static DebugConsole Instance { get; private set; } - - public static bool LogUnity { get; set; } - //public static bool SaveToDisk { get; set; } = ModConfig.Instance.Save_Logs_To_Disk; - - internal static StreamWriter s_streamWriter; - - public static readonly List AllMessages = new List(); - public static readonly List MessageHolders = new List(); - - // logs that occured before the actual UI was ready. - // these ones include the hex color codes. - internal static readonly List s_preInitMessages = new List(); - - private InputField m_textInput; - internal const int MAX_TEXT_LEN = 10000; - - public DebugConsole(GameObject parent) - { - Instance = this; - LogUnity = ConfigManager.Log_Unity_Debug.Value; - - ConstructUI(parent); - - if (!ConfigManager.Last_DebugConsole_State.Value) - ToggleShow(); - - // append messages that logged before we were set up - string preAppend = ""; - for (int i = s_preInitMessages.Count - 1; i >= 0; i--) - { - var msg = s_preInitMessages[i]; - if (preAppend != "") - preAppend += "\r\n"; - preAppend += msg; - } - m_textInput.text = preAppend; - - // set up IO - - var path = Path.Combine(ExplorerCore.Loader.ExplorerFolder, "Logs"); - - if (!Directory.Exists(path)) - Directory.CreateDirectory(path); - - // clean old log(s) - var files = Directory.GetFiles(path); - if (files.Length >= 10) - { - var sorted = files.ToList(); - // sort by 'datetime.ToString("u")' will put the oldest ones first - sorted.Sort(); - for (int i = 0; i < files.Length - 9; i++) - File.Delete(files[i]); - } - - var fileName = "UnityExplorer " + DateTime.Now.ToString("u") + ".txt"; - fileName = RemoveInvalidFilenameChars(fileName); - - var stream = File.Create(path + @"\" + fileName); - s_streamWriter = new StreamWriter(stream) - { - AutoFlush = true - }; - - foreach (var msg in AllMessages) - s_streamWriter.WriteLine(msg); - } - - public static bool Hiding; - - private GameObject m_logAreaObj; - private Text m_hideBtnText; - private LayoutElement m_mainLayout; - - public static Action OnToggleShow; - - public void ToggleShow() - { - if (m_logAreaObj.activeSelf) - { - Hiding = true; - m_logAreaObj.SetActive(false); - m_hideBtnText.text = "Show"; - m_mainLayout.minHeight = 30; - } - else - { - Hiding = false; - m_logAreaObj.SetActive(true); - m_hideBtnText.text = "Hide"; - m_mainLayout.minHeight = 190; - } - - OnToggleShow?.Invoke(!Hiding); - } - - public static string RemoveInvalidFilenameChars(string s) - { - var invalid = Path.GetInvalidFileNameChars(); - foreach (var c in invalid) - { - s = s.Replace(c.ToString(), ""); - } - return s; - } - - public static void Log(string message) - { - Log(message, null); - } - - public static void Log(string message, Color color) - { - Log(message, color.ToHex()); - } - - public static void Log(string message, string hexColor) - { - message = $"{AllMessages.Count}: {message}"; - - AllMessages.Add(message); - s_streamWriter?.WriteLine(message); - - if (hexColor != null) - message = $"{message}"; - - if (Instance?.m_textInput) - { - var input = Instance.m_textInput; - var wanted = $"{message}\n{input.text}"; - - if (wanted.Length > MAX_TEXT_LEN) - wanted = wanted.Substring(0, MAX_TEXT_LEN); - - input.text = wanted; - } - else - s_preInitMessages.Add(message); - } - - public void ConstructUI(GameObject parent) - { - var mainObj = UIFactory.CreateVerticalGroup(parent, "DebugConsole", true, true, true, true, 0, default, new Color(0.1f, 0.1f, 0.1f, 1.0f)); - var mainImage = mainObj.GetComponent(); - mainImage.maskable = true; - var mask = mainObj.AddComponent(); - mask.showMaskGraphic = true; - - m_mainLayout = mainObj.AddComponent(); - m_mainLayout.minHeight = 190; - m_mainLayout.flexibleHeight = 0; - - #region LOG AREA - m_logAreaObj = UIFactory.CreateHorizontalGroup(mainObj, "LogArea", true, true, true, true); - UIFactory.SetLayoutElement(m_logAreaObj, preferredHeight: 190, flexibleHeight: 0); - - var inputScrollerObj = UIFactory.CreateSrollInputField(m_logAreaObj, - "DebugConsoleOutput", - "", - out InputFieldScroller inputScroll, - 14, - new Color(0.05f, 0.05f, 0.05f)); - - inputScroll.inputField.textComponent.font = UIManager.ConsoleFont; - inputScroll.inputField.readOnly = true; - - m_textInput = inputScroll.inputField; - #endregion - - #region BOTTOM BAR - - var bottomBarObj = UIFactory.CreateHorizontalGroup(mainObj, "BottomBar", false, true, true, true, 10, new Vector4(2,2,10,10), - default, TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(bottomBarObj, minHeight: 30, flexibleHeight: 0); - - // Debug Console label - - var bottomLabel = UIFactory.CreateLabel(bottomBarObj, "DebugConsoleLabel", "Debug Console", TextAnchor.MiddleLeft); - bottomLabel.fontStyle = FontStyle.Bold; - UIFactory.SetLayoutElement(bottomLabel.gameObject, minWidth: 100, flexibleWidth: 0); - - // Hide button - - var hideButton = UIFactory.CreateButton(bottomBarObj, "HideButton", "Hide", ToggleShow); - UIFactory.SetLayoutElement(hideButton.gameObject, minWidth: 80, flexibleWidth: 0); - m_hideBtnText = hideButton.GetComponentInChildren(); - - // Clear button - - var clearButton = UIFactory.CreateButton(bottomBarObj, "ClearButton", "Clear", () => - { - m_textInput.text = ""; - AllMessages.Clear(); - }); - UIFactory.SetLayoutElement(clearButton.gameObject, minWidth: 80, flexibleWidth: 0); - - // Unity log toggle - - var unityToggleObj = UIFactory.CreateToggle(bottomBarObj, "UnityLogToggle", out Toggle unityToggle, out Text unityToggleText); - - unityToggle.onValueChanged.AddListener((bool val) => - { - LogUnity = val; - ConfigManager.Log_Unity_Debug.Value = val; - }); - - ConfigManager.Log_Unity_Debug.OnValueChanged += (bool val) => { unityToggle.isOn = val; }; - - unityToggle.isOn = LogUnity; - unityToggleText.text = "Log Unity Debug?"; - unityToggleText.alignment = TextAnchor.MiddleLeft; - - UIFactory.SetLayoutElement(unityToggleObj, minWidth: 170, flexibleWidth: 0); - - var unityToggleRect = unityToggleObj.transform.Find("Background").GetComponent(); - var pos = unityToggleRect.localPosition; - pos.y = -4; - unityToggleRect.localPosition = pos; - - #endregion - } - } -} diff --git a/src/UI/Main/Home/HomePage.cs b/src/UI/Main/Home/HomePage.cs deleted file mode 100644 index 91a0eeb..0000000 --- a/src/UI/Main/Home/HomePage.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.UI.Inspectors; - -namespace UnityExplorer.UI.Main.Home -{ - public class HomePage : BaseMenuPage - { - public override string Name => "Home"; - - public static HomePage Instance { get; internal set; } - - public override MenuPages Type => MenuPages.Home; - - public override bool Init() - { - Instance = this; - - ConstructMenu(); - - new SceneExplorer(); - - new InspectorManager(); - - SceneExplorer.Instance.Init(); - - return true; - } - - public override void Update() - { - SceneExplorer.Instance.Update(); - InspectorManager.Instance.Update(); - } - - private void ConstructMenu() - { - GameObject parent = MainMenu.Instance.PageViewport; - - Content = UIFactory.CreateHorizontalGroup(parent, "HomePage", true, true, true, true, 3, new Vector4(1,1,1,1)).gameObject; - } - } -} diff --git a/src/UI/Main/Home/SceneExplorer.cs b/src/UI/Main/Home/SceneExplorer.cs deleted file mode 100644 index ee6a5f6..0000000 --- a/src/UI/Main/Home/SceneExplorer.cs +++ /dev/null @@ -1,553 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityExplorer.UI; -using UnityExplorer.UI.Main; -using UnityEngine; -using UnityEngine.SceneManagement; -using UnityEngine.UI; -using UnityExplorer.Core.Runtime; -using UnityExplorer.UI.Main.Home; -using UnityExplorer.Core.Config; -using UnityExplorer.UI.Utility; -using UnityExplorer.UI.Main.Search; -using System.IO; -using UnityExplorer.Core; -using UnityExplorer.UI.Inspectors; - -namespace UnityExplorer.UI.Main.Home -{ - public class SceneExplorer - { - public static SceneExplorer Instance; - - internal static Action OnToggleShow; - - public SceneExplorer() - { - Instance = this; - - ConstructScenePane(); - } - - internal bool Hiding; - - private const float UPDATE_INTERVAL = 1f; - private float m_timeOfLastSceneUpdate; - - // private int m_currentSceneHandle = -1; - public static Scene DontDestroyScene => DontDestroyObject.scene; - internal Scene m_currentScene; - internal Scene[] m_currentScenes = new Scene[0]; - - internal GameObject[] m_allObjects = new GameObject[0]; - - internal GameObject m_selectedSceneObject; - internal int m_lastCount; - - private Dropdown m_sceneDropdown; - private Text m_sceneDropdownText; - private Text m_scenePathText; - private GameObject m_mainInspectBtn; - private GameObject m_backButtonObj; - - public PageHandler m_pageHandler; - private GameObject m_pageContent; - private readonly List m_shortListTexts = new List(); - private readonly List m_shortListToggles = new List(); - - internal readonly List m_shortList = new List(); - - private Text m_hideText; - private GameObject m_sceneDropdownObj; - private GameObject m_scenePathGroupObj; - private GameObject m_mainContent; - - internal static GameObject DontDestroyObject - { - get - { - if (!s_dontDestroyObject) - { - s_dontDestroyObject = new GameObject("DontDestroyMe"); - GameObject.DontDestroyOnLoad(s_dontDestroyObject); - } - return s_dontDestroyObject; - } - } - internal static GameObject s_dontDestroyObject; - - public void Init() - { - RefreshSceneSelector(); - - if (!ConfigManager.Last_SceneExplorer_State.Value) - ToggleShow(); - } - - public void ToggleShow() - { - if (!Hiding) - { - Hiding = true; - - m_hideText.text = "►"; - m_mainContent.SetActive(false); - m_pageHandler.Hide(); - } - else - { - Hiding = false; - - m_hideText.text = "◄"; - m_mainContent.SetActive(true); - m_pageHandler.Show(); - - Update(); - } - - InvokeOnToggleShow(); - } - - public void Update() - { - if (Hiding || Time.realtimeSinceStartup - m_timeOfLastSceneUpdate < UPDATE_INTERVAL) - return; - - RefreshSceneSelector(); - - if (!m_selectedSceneObject) - { - if (m_currentScene != default) - { - var rootObjects = RuntimeProvider.Instance.GetRootGameObjects(m_currentScene); - SetSceneObjectList(rootObjects); - } - } - else - { - RefreshSelectedSceneObject(); - } - } - - private void RefreshSceneSelector() - { - var newNames = new List(); - var newScenes = new List(); - - if (m_currentScenes == null) - m_currentScenes = new Scene[0]; - - bool anyChange = SceneManager.sceneCount != m_currentScenes.Length - 1; - - for (int i = 0; i < SceneManager.sceneCount; i++) - { - Scene scene = SceneManager.GetSceneAt(i); - - if (scene == default) - continue; - - int handle = RuntimeProvider.Instance.GetSceneHandle(scene); - - if (!anyChange && !m_currentScenes.Any(it => handle == RuntimeProvider.Instance.GetSceneHandle(it))) - anyChange = true; - - newScenes.Add(scene); - newNames.Add(scene.name); - } - - if (anyChange) - { - newNames.Add("DontDestroyOnLoad"); - newScenes.Add(DontDestroyScene); - m_currentScenes = newScenes.ToArray(); - - OnActiveScenesChanged(newNames); - - SetTargetScene(newScenes[0]); - - SearchPage.Instance.OnSceneChange(); - } - } - - public void SetTargetScene(int index) - => SetTargetScene(m_currentScenes[index]); - - public void SetTargetScene(Scene scene) - { - if (scene == default) - return; - - m_currentScene = scene; - var rootObjs = RuntimeProvider.Instance.GetRootGameObjects(scene); - SetSceneObjectList(rootObjs); - - m_selectedSceneObject = null; - - OnSceneSelected(); - } - - public void SetSceneObjectParent() - { - if (!m_selectedSceneObject || !m_selectedSceneObject.transform.parent?.gameObject) - { - m_selectedSceneObject = null; - SetTargetScene(m_currentScene); - } - else - { - SetTargetObject(m_selectedSceneObject.transform.parent.gameObject); - } - } - - public void SetTargetObject(GameObject obj) - { - if (!obj) - return; - - OnGameObjectSelected(obj); - - m_selectedSceneObject = obj; - - RefreshSelectedSceneObject(); - } - - private void RefreshSelectedSceneObject() - { - GameObject[] list = new GameObject[m_selectedSceneObject.transform.childCount]; - for (int i = 0; i < m_selectedSceneObject.transform.childCount; i++) - { - list[i] = m_selectedSceneObject.transform.GetChild(i).gameObject; - } - - SetSceneObjectList(list); - } - - private void SetSceneObjectList(GameObject[] objects) - { - m_allObjects = objects; - RefreshSceneObjectList(); - } - - internal void RefreshSceneObjectList() - { - m_timeOfLastSceneUpdate = Time.realtimeSinceStartup; - - RefreshSceneObjectList(m_allObjects, out int newCount); - - m_lastCount = newCount; - } - - internal static void InspectSelectedGameObject() - { - InspectorManager.Instance.Inspect(Instance.m_selectedSceneObject); - } - - internal static void InvokeOnToggleShow() - { - OnToggleShow?.Invoke(!Instance.Hiding); - } - - public void OnActiveScenesChanged(List newNames) - { - m_sceneDropdown.options.Clear(); - - foreach (string scene in newNames) - { - m_sceneDropdown.options.Add(new Dropdown.OptionData { text = scene }); - } - - m_sceneDropdown.OnCancel(null); - m_sceneDropdownText.text = newNames[0]; - } - - private void SceneListObjectClicked(int index) - { - if (index >= m_shortList.Count || !m_shortList[index]) - { - return; - } - - var obj = m_shortList[index]; - if (obj.transform.childCount > 0) - SetTargetObject(obj); - else - InspectorManager.Instance.Inspect(obj); - } - - internal void RefreshSceneObjectList(GameObject[] allObjects, out int newCount) - { - var objects = allObjects; - m_pageHandler.ListCount = objects.Length; - - //int startIndex = m_sceneListPageHandler.StartIndex; - - newCount = 0; - - foreach (var itemIndex in m_pageHandler) - { - newCount++; - - // normalized index starting from 0 - var i = itemIndex - m_pageHandler.StartIndex; - - if (itemIndex >= objects.Length) - { - if (i > SceneExplorer.Instance.m_lastCount || i >= m_shortListTexts.Count) - break; - - GameObject label = m_shortListTexts[i].transform.parent.parent.gameObject; - if (label.activeSelf) - label.SetActive(false); - } - else - { - GameObject obj = objects[itemIndex]; - - if (!obj) - continue; - - if (i >= m_shortList.Count) - { - m_shortList.Add(obj); - AddObjectListButton(); - } - else - { - m_shortList[i] = obj; - } - - var text = m_shortListTexts[i]; - - var name = obj.name; - - if (obj.transform.childCount > 0) - name = $"[{obj.transform.childCount}] {name}"; - - text.text = name; - text.color = obj.activeSelf ? Color.green : Color.red; - - var tog = m_shortListToggles[i]; - tog.isOn = obj.activeSelf; - - var label = text.transform.parent.parent.gameObject; - if (!label.activeSelf) - { - label.SetActive(true); - } - } - } - } - - private void OnSceneListPageTurn() - { - RefreshSceneObjectList(); - } - - private void OnToggleClicked(int index, bool val) - { - if (index >= m_shortList.Count || !m_shortList[index]) - return; - - var obj = m_shortList[index]; - obj.SetActive(val); - } - - internal void OnGameObjectSelected(GameObject obj) - { - m_scenePathText.text = obj.name; - if (!m_backButtonObj.activeSelf) - { - m_backButtonObj.SetActive(true); - m_mainInspectBtn.SetActive(true); - } - } - - internal void OnSceneSelected() - { - if (m_backButtonObj.activeSelf) - { - m_backButtonObj.SetActive(false); - m_mainInspectBtn.SetActive(false); - } - - m_scenePathText.text = "Scene root:"; - //m_scenePathText.ForceMeshUpdate(); - } - - #region UI CONSTRUCTION - - public void ConstructScenePane() - { - var coreGroup = UIFactory.CreateHorizontalGroup(HomePage.Instance.Content, "SceneExplorer", true, true, true, true, 4, new Vector4(2, 2, 2, 2), - new Color(0.05f, 0.05f, 0.05f)); - - // hide button - - var hideButton = UIFactory.CreateButton(coreGroup, "HideButton", "◄", ToggleShow, new Color(0.15f, 0.15f, 0.15f)); - hideButton.GetComponentInChildren().fontSize = 13; - m_hideText = hideButton.GetComponentInChildren(); - UIFactory.SetLayoutElement(hideButton.gameObject, minWidth: 20, minHeight: 20, flexibleWidth: 0, flexibleHeight: 9999); - - m_mainContent = UIFactory.CreateVerticalGroup(coreGroup, "SceneGroup", true, false, true, true, 0, default, - new Color(72f / 255f, 72f / 255f, 72f / 255f)); - UIFactory.SetLayoutElement(m_mainContent, minWidth: 350, flexibleWidth: 0); - - UIFactory.SetLayoutGroup(m_mainContent, true, true, true, true, spacing: 4, padTop: 8, 4, 4, 4); - - var titleObj = UIFactory.CreateLabel(m_mainContent, "SceneExplorerTitle", "Scene Explorer", TextAnchor.UpperLeft, default, true, 20).gameObject; - UIFactory.SetLayoutElement(titleObj, minHeight: 30, flexibleHeight: 0); - - m_sceneDropdownObj = UIFactory.CreateDropdown(m_mainContent, out m_sceneDropdown, "", 14, null); - UIFactory.SetLayoutElement(m_sceneDropdownObj, minHeight: 40, minWidth: 320, flexibleWidth: 0, flexibleHeight: 0); - - m_sceneDropdownText = m_sceneDropdown.transform.Find("Label").GetComponent(); - m_sceneDropdown.onValueChanged.AddListener((int val) => { SetTargetScene(val); }); - - m_scenePathGroupObj = UIFactory.CreateHorizontalGroup(m_mainContent, "ScenePathGroup", true, true, true, true, 5, default, new Color(1, 1, 1, 0f)); - UIFactory.SetLayoutElement(m_scenePathGroupObj, minHeight: 20, minWidth: 335); - - var backBtnObj = UIFactory.CreateButton(m_scenePathGroupObj, - "BackButton", - "◄", - () => { SetSceneObjectParent(); }, - new Color(0.12f, 0.12f, 0.12f)); - - m_backButtonObj = backBtnObj.gameObject; - - UIFactory.SetLayoutElement(m_backButtonObj, minWidth: 40, flexibleWidth: 0); - - GameObject scenePathLabel = UIFactory.CreateHorizontalGroup(m_scenePathGroupObj, "ScenePathLabel", false, false, false, false); - Image image = scenePathLabel.GetComponent(); - image.color = Color.white; - scenePathLabel.AddComponent().showMaskGraphic = false; - - UIFactory.SetLayoutElement(scenePathLabel, minWidth: 210, minHeight: 20, flexibleWidth: 120); - - m_scenePathText = UIFactory.CreateLabel(scenePathLabel, "ScenePathLabelText", "Scene root:", TextAnchor.MiddleLeft, default, true, 15); - m_scenePathText.horizontalOverflow = HorizontalWrapMode.Overflow; - - UIFactory.SetLayoutElement(m_scenePathText.gameObject, minWidth: 210, flexibleWidth: 120, minHeight: 20); - - var mainInspectButton = UIFactory.CreateButton(m_scenePathGroupObj, - "MainInspectButton", - "Inspect", - () => { InspectSelectedGameObject(); }, - new Color(0.12f, 0.12f, 0.12f)); - - m_mainInspectBtn = mainInspectButton.gameObject; - UIFactory.SetLayoutElement(m_mainInspectBtn, minWidth: 65); - - var scrollObj = UIFactory.CreateScrollView(m_mainContent, "SceneExplorerScrollView", - out m_pageContent, out SliderScrollbar scroller, new Color(0.1f, 0.1f, 0.1f)); - - m_pageHandler = new PageHandler(scroller); - m_pageHandler.ConstructUI(m_mainContent); - m_pageHandler.OnPageChanged += OnSceneListPageTurn; - - // Scene Loader - try - { - Type sceneUtil = ReflectionUtility.GetTypeByName("UnityEngine.SceneManagement.SceneUtility"); - if (sceneUtil == null) - throw new Exception("This version of Unity does not ship with the 'SceneUtility' class, or it was not unstripped."); - var method = sceneUtil.GetMethod("GetScenePathByBuildIndex", ReflectionUtility.AllFlags); - - var title2 = UIFactory.CreateLabel(m_mainContent, "SceneLoaderLabel", "Scene Loader", TextAnchor.MiddleLeft, Color.white, true, 20); - UIFactory.SetLayoutElement(title2.gameObject, minHeight: 30, flexibleHeight: 0); - - var allSceneDropObj = UIFactory.CreateDropdown(m_mainContent, out Dropdown allSceneDrop, "", 14, null); - UIFactory.SetLayoutElement(allSceneDropObj, minHeight: 40, minWidth: 320, flexibleWidth: 0, flexibleHeight: 0); - - int sceneCount = SceneManager.sceneCountInBuildSettings; - for (int i = 0; i < sceneCount; i++) - { - var scenePath = (string)method.Invoke(null, new object[] { i }); - allSceneDrop.options.Add(new Dropdown.OptionData(Path.GetFileNameWithoutExtension(scenePath))); - } - allSceneDrop.value = 1; - allSceneDrop.value = 0; - - var buttonRow = UIFactory.CreateHorizontalGroup(m_mainContent, "LoadButtons", true, true, true, true, 4); - - var loadButton = UIFactory.CreateButton(buttonRow, "LoadSceneButton", "Load (Single)", () => - { - try - { - SceneManager.LoadScene(allSceneDrop.options[allSceneDrop.value].text); - } - catch (Exception ex) - { - ExplorerCore.LogWarning($"Unable to load the Scene! {ex.ReflectionExToString()}"); - } - }, new Color(0.1f, 0.3f, 0.3f)); - UIFactory.SetLayoutElement(loadButton.gameObject, minHeight: 40, minWidth: 150); - - var loadAdditiveButton = UIFactory.CreateButton(buttonRow, "LoadSceneButton", "Load (Additive)", () => - { - try - { - SceneManager.LoadScene(allSceneDrop.options[allSceneDrop.value].text, LoadSceneMode.Additive); - } - catch (Exception ex) - { - ExplorerCore.LogWarning($"Unable to load the Scene! {ex.ReflectionExToString()}"); - } - }, new Color(0.1f, 0.3f, 0.3f)); - UIFactory.SetLayoutElement(loadAdditiveButton.gameObject, minHeight: 40, minWidth: 150); - } - catch (Exception ex) - { - ExplorerCore.LogWarning($"Could not create the Scene Loader helper! {ex.ReflectionExToString()}"); - } - } - - private void AddObjectListButton() - { - int thisIndex = m_shortListTexts.Count(); - - GameObject btnGroupObj = UIFactory.CreateHorizontalGroup(m_pageContent, "SceneObjectButton", true, false, true, true, - 0, default, new Color(0.1f, 0.1f, 0.1f)); - - UIFactory.SetLayoutElement(btnGroupObj, flexibleWidth: 320, minHeight: 25); - - btnGroupObj.AddComponent(); - - var toggleObj = UIFactory.CreateToggle(btnGroupObj, "ObjectToggleButton", out Toggle toggle, out Text toggleText, new Color(0.1f, 0.1f, 0.1f)); - var toggleLayout = toggleObj.AddComponent(); - toggleLayout.minHeight = 25; - toggleLayout.minWidth = 25; - toggleText.text = ""; - toggle.isOn = false; - m_shortListToggles.Add(toggle); - toggle.onValueChanged.AddListener((bool val) => { OnToggleClicked(thisIndex, val); }); - - var mainButton = UIFactory.CreateButton(btnGroupObj, - "MainButton", - "", - () => { SceneListObjectClicked(thisIndex); }); - - RuntimeProvider.Instance.SetColorBlock(mainButton, new Color(0.1f, 0.1f, 0.1f), - new Color(0.2f, 0.2f, 0.2f), new Color(0.05f, 0.05f, 0.05f)); - - UIFactory.SetLayoutElement(mainButton.gameObject, minHeight: 25, minWidth: 230); - - Text mainText = mainButton.GetComponentInChildren(); - mainText.alignment = TextAnchor.MiddleLeft; - mainText.horizontalOverflow = HorizontalWrapMode.Overflow; - m_shortListTexts.Add(mainText); - - var inspectButton = UIFactory.CreateButton(btnGroupObj, - "InspectButton", - "Inspect", - () => { InspectorManager.Instance.Inspect(m_shortList[thisIndex]); }); - - RuntimeProvider.Instance.SetColorBlock(inspectButton, new Color(0.15f, 0.15f, 0.15f), - new Color(0.2f, 0.2f, 0.2f), new Color(0.1f, 0.1f, 0.1f)); - - UIFactory.SetLayoutElement(inspectButton.gameObject, minWidth: 60, minHeight: 25); - } - - #endregion - } -} diff --git a/src/UI/Main/MainMenu.cs b/src/UI/Main/MainMenu.cs deleted file mode 100644 index cac610b..0000000 --- a/src/UI/Main/MainMenu.cs +++ /dev/null @@ -1,229 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityExplorer.Core.CSharp; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Config; -using UnityExplorer.Core.Unity; -using UnityExplorer.UI.Main; -using UnityExplorer.UI.Main.Home; -using UnityExplorer.UI.Main.Search; -using UnityExplorer.UI.Main.CSConsole; -using UnityExplorer.UI.Main.Options; -using UnityExplorer.Core.Runtime; - -namespace UnityExplorer.UI.Main -{ - public class MainMenu - { - public static MainMenu Instance { get; set; } - - public PanelDragger Dragger { get; private set; } - - public GameObject MainPanel { get; private set; } - public GameObject PageViewport { get; private set; } - - public readonly List Pages = new List(); - private BaseMenuPage m_activePage; - - public static Action OnActiveTabChanged; - - // Navbar buttons - private Button m_lastNavButtonPressed; - private readonly Color m_navButtonNormal = new Color(0.3f, 0.3f, 0.3f, 1); - private readonly Color m_navButtonHighlight = new Color(0.3f, 0.6f, 0.3f); - private readonly Color m_navButtonSelected = new Color(0.2f, 0.5f, 0.2f, 1); - - internal Vector3 initPos; - internal bool pageLayoutInit; - internal int layoutInitIndex; - - public static void Create() - { - if (Instance != null) - { - ExplorerCore.LogWarning("An instance of MainMenu already exists, cannot create another!"); - return; - } - - Instance = new MainMenu(); - Instance.Init(); - } - - private void Init() - { - Pages.Add(new HomePage()); - Pages.Add(new SearchPage()); - Pages.Add(new CSharpConsole()); - Pages.Add(new OptionsPage()); - - ConstructMenu(); - - for (int i = 0; i < Pages.Count; i++) - { - var page = Pages[i]; - - if (!page.Init()) - { - page.WasDisabled = true; - // page init failed. - Pages.RemoveAt(i); - i--; - - if (page.RefNavbarButton) - page.RefNavbarButton.interactable = false; - - if (page.Content) - GameObject.Destroy(page.Content); - } - } - - // hide menu until each page has init layout (bit of a hack) - initPos = MainPanel.transform.position; - MainPanel.transform.position = new Vector3(9999, 9999); - } - - public void Update() - { - if (!pageLayoutInit) - { - if (layoutInitIndex < Pages.Count) - { - SetPage(Pages[layoutInitIndex]); - layoutInitIndex++; - } - else - { - pageLayoutInit = true; - MainPanel.transform.position = initPos; - - SetPage(ConfigManager.Default_Tab.Value); - } - return; - } - - m_activePage?.Update(); - } - - public void SetPage(MenuPages page) - { - var pageObj = Pages.Find(it => it.Type == page); - if (pageObj == null || pageObj.WasDisabled) - return; - SetPage(pageObj); - } - - public void SetPage(BaseMenuPage page) - { - if (page == null || m_activePage == page || page.WasDisabled) - return; - - m_activePage?.Content?.SetActive(false); - - // unique case for console page, at the moment this will just go here - if (m_activePage is CSharpConsole) - AutoCompleter.m_mainObj?.SetActive(false); - - m_activePage = page; - - m_activePage.Content?.SetActive(true); - - Button button = page.RefNavbarButton; - SetButtonActiveColors(button); - - if (m_lastNavButtonPressed && m_lastNavButtonPressed != button) - SetButtonInactiveColors(m_lastNavButtonPressed); - - m_lastNavButtonPressed = button; - - OnActiveTabChanged?.Invoke(m_activePage.Type); - } - - internal void SetButtonActiveColors(Button button) - { - RuntimeProvider.Instance.SetColorBlock(button, m_navButtonSelected); - } - - internal void SetButtonInactiveColors(Button button) - { - RuntimeProvider.Instance.SetColorBlock(button, m_navButtonNormal); - } - - #region UI Construction - - private void ConstructMenu() - { - MainPanel = UIFactory.CreatePanel("MainMenu", out GameObject content, - ConfigManager.Last_Window_Anchors.Value, ConfigManager.Last_Window_Position.Value); - - ConstructTitleBar(content); - - ConstructNavbar(content); - - PageViewport = UIFactory.CreateHorizontalGroup(content, "MainViewPort", true, true, true, true); - - new DebugConsole(content); - } - - private void ConstructTitleBar(GameObject content) - { - // Core title bar holder - - GameObject titleBar = UIFactory.CreateHorizontalGroup(content, "MainTitleBar", true, true, true, true, 0, new Vector4(3,3,15,3)); - UIFactory.SetLayoutElement(titleBar, minWidth: 25, flexibleHeight: 0); - - // Main title label - - var text = UIFactory.CreateLabel(titleBar, "TitleLabel", $"UnityExplorer v{ExplorerCore.VERSION}", TextAnchor.MiddleLeft, - default, true, 15); - UIFactory.SetLayoutElement(text.gameObject, flexibleWidth: 5000); - - // Add PanelDragger using the label object - - Dragger = new PanelDragger(titleBar.GetComponent(), MainPanel.GetComponent()); - - // Hide button - - var hideButton = UIFactory.CreateButton(titleBar, - "HideButton", - $"Hide ({ConfigManager.Main_Menu_Toggle.Value})", - () => { UIManager.ShowMenu = false; }); - - RuntimeProvider.Instance.SetColorBlock(hideButton, new Color(65f / 255f, 23f / 255f, 23f / 255f), - new Color(35f / 255f, 10f / 255f, 10f / 255f), new Color(156f / 255f, 0f, 0f)); - - UIFactory.SetLayoutElement(hideButton.gameObject, minWidth: 90, flexibleWidth: 0); - - Text hideText = hideButton.GetComponentInChildren(); - hideText.color = Color.white; - hideText.resizeTextForBestFit = true; - hideText.resizeTextMinSize = 8; - hideText.resizeTextMaxSize = 14; - - ConfigManager.Main_Menu_Toggle.OnValueChanged += (KeyCode val) => - { - hideText.text = $"Hide ({val})"; - }; - } - - private void ConstructNavbar(GameObject content) - { - GameObject navbarObj = UIFactory.CreateHorizontalGroup(content, "MainNavBar", true, true, true, true, 5); - UIFactory.SetLayoutElement(navbarObj, minHeight: 25, flexibleHeight: 0); - - foreach (var page in Pages) - { - Button btn = UIFactory.CreateButton(navbarObj, - $"Button_{page.Name}", - page.Name, - () => { SetPage(page); }); - - RuntimeProvider.Instance.SetColorBlock(btn, m_navButtonNormal, m_navButtonHighlight, m_navButtonSelected); - - page.RefNavbarButton = btn; - } - } - - #endregion - } -} diff --git a/src/UI/Main/Options/OptionsPage.cs b/src/UI/Main/Options/OptionsPage.cs deleted file mode 100644 index 973685b..0000000 --- a/src/UI/Main/Options/OptionsPage.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using UnityEngine.UI; -using UnityExplorer.Core.Config; -using UnityExplorer.UI.CacheObject; -using UnityExplorer.UI.Utility; - -namespace UnityExplorer.UI.Main.Options -{ - public class OptionsPage : BaseMenuPage - { - public override string Name => "Options"; - public override MenuPages Type => MenuPages.Options; - - internal static readonly List _cachedConfigEntries = new List(); - - public override bool Init() - { - ConstructUI(); - - return true; - } - - public override void Update() - { - // Not needed - } - - #region UI CONSTRUCTION - - internal GameObject m_contentObj; - - internal void ConstructUI() - { - GameObject parent = MainMenu.Instance.PageViewport; - - Content = UIFactory.CreateVerticalGroup(parent, "OptionsPage", false, true, true, true, 5, new Vector4(4,4,4,4), - new Color(0.15f, 0.15f, 0.15f)); - UIFactory.SetLayoutElement(Content, minHeight: 340, flexibleHeight: 9999); - - // ~~~~~ Title ~~~~~ - - var titleLabel = UIFactory.CreateLabel(Content, "Title", "Options", TextAnchor.UpperLeft, default, true, 25); - UIFactory.SetLayoutElement(titleLabel.gameObject, minHeight: 30, flexibleHeight: 0, flexibleWidth: 9999); - - // Save button - - var btn = UIFactory.CreateButton(Content, - "SaveButton", - "Save Config File", - () => { ConfigManager.Handler.SaveConfig(); }, - new Color(0.25f, 0.6f, 0.25f)); - UIFactory.SetLayoutElement(btn.gameObject, minWidth: 200, flexibleWidth: 0, minHeight: 30, flexibleHeight: 0); - - // ~~~~~ Actual options ~~~~~ - - UIFactory.CreateScrollView(Content, "ConfigList", out m_contentObj, out _, new Color(0.05f, 0.05f, 0.05f)); - UIFactory.SetLayoutGroup(m_contentObj, forceHeight: true, spacing: 3, padLeft: 3, padRight: 3); - - _cachedConfigEntries.AddRange(ConfigManager.ConfigElements.Values - .Where(it => !it.IsInternal) - .Select(it => new CacheConfigEntry(it, m_contentObj))); - - foreach (var entry in _cachedConfigEntries) - entry.Enable(); - } - - - #endregion - } -} diff --git a/src/UI/Main/Search/SearchPage.cs b/src/UI/Main/Search/SearchPage.cs deleted file mode 100644 index 25f43d6..0000000 --- a/src/UI/Main/Search/SearchPage.cs +++ /dev/null @@ -1,460 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using UnityEngine.SceneManagement; -using UnityEngine.UI; -using System.Reflection; -using UnityExplorer.Core.Runtime; -using UnityExplorer.Core; -using UnityExplorer.UI.Utility; -using UnityExplorer.Core.Search; -using UnityExplorer.UI.Main.Home; -using UnityExplorer.UI.Inspectors; - -namespace UnityExplorer.UI.Main.Search -{ - public class SearchPage : BaseMenuPage - { - public override string Name => "Search"; - public override MenuPages Type => MenuPages.Search; - - public static SearchPage Instance; - - internal SearchContext m_context; - private SceneFilter m_sceneFilter; - private ChildFilter m_childFilter; - - // ui elements - - private Text m_resultCountText; - - private InputField m_customTypeInput; - - private InputField m_nameInput; - - private Button m_selectedContextButton; - private readonly Dictionary m_contextButtons = new Dictionary(); - - internal Dropdown m_sceneDropdown; - private int m_lastSceneCount = -1; - - private GameObject m_extraFilterRow; - - // Results - - internal object[] m_results; - internal readonly List m_resultShortList = new List(); - - private int m_lastCount; - public PageHandler m_resultListPageHandler; - private GameObject m_resultListContent; - private readonly List m_resultListTexts = new List(); - - public SearchPage() - { - Instance = this; - } - - public override bool Init() - { - ConstructUI(); - - return true; - } - - public void OnSceneChange() - { - m_results = new object[0]; - RefreshResultList(); - } - - public override void Update() - { - if (HaveScenesChanged()) - { - RefreshSceneDropdown(); - } - - if (m_customTypeInput.isFocused && m_context != SearchContext.Custom) - { - OnContextButtonClicked(SearchContext.Custom); - } - } - - // Updating result list content - - private void RefreshResultList() - { - if (m_resultListPageHandler == null || m_results == null) - return; - - m_resultListPageHandler.ListCount = m_results.Length; - - int newCount = 0; - - foreach (var itemIndex in m_resultListPageHandler) - { - newCount++; - - // normalized index starting from 0 - var i = itemIndex - m_resultListPageHandler.StartIndex; - - if (itemIndex >= m_results.Length) - { - if (i > m_lastCount || i >= m_resultListTexts.Count) - break; - - GameObject label = m_resultListTexts[i].transform.parent.parent.gameObject; - if (label.activeSelf) - label.SetActive(false); - } - else - { - var obj = m_results[itemIndex]; - var unityObj = obj as UnityEngine.Object; - - if (obj == null || (unityObj != null && !unityObj)) - continue; - - if (i >= m_resultShortList.Count) - { - m_resultShortList.Add(obj); - AddResultButton(); - } - else - { - m_resultShortList[i] = obj; - } - - var text = m_resultListTexts[i]; - - if (m_context != SearchContext.StaticClass) - { - var name = SignatureHighlighter.ParseFullSyntax(ReflectionUtility.GetActualType(obj), true); - - if (unityObj && m_context != SearchContext.Singleton) - { - if (unityObj && !string.IsNullOrEmpty(unityObj.name)) - name += $": {unityObj.name}"; - else - name += ": untitled"; - } - - text.text = name; - } - else - { - var type = obj as Type; - text.text = SignatureHighlighter.ParseFullSyntax(type, true); - } - - var label = text.transform.parent.parent.gameObject; - if (!label.activeSelf) - label.SetActive(true); - } - } - - m_lastCount = newCount; - } - - // scene dropdown update - - internal bool HaveScenesChanged() - { - if (m_lastSceneCount != SceneManager.sceneCount) - return true; - - for (int i = 0; i < SceneManager.sceneCount; i++) - { - int dropdownIndex = i + 3; - if (dropdownIndex >= m_sceneDropdown.options.Count - || m_sceneDropdown.options[dropdownIndex].text != SceneManager.GetSceneAt(i).name) - return true; - } - - return false; - } - - internal void RefreshSceneDropdown() - { - m_sceneDropdown.OnCancel(null); - - m_sceneDropdown.options.Clear(); - - m_sceneDropdown.options.Add(new Dropdown.OptionData - { - text = "Any" - }); - - m_sceneDropdown.options.Add(new Dropdown.OptionData - { - text = "None (Asset / Resource)" - }); - m_sceneDropdown.options.Add(new Dropdown.OptionData - { - text = "DontDestroyOnLoad" - }); - - m_lastSceneCount = 0; - for (int i = 0; i < SceneManager.sceneCount; i++) - { - m_lastSceneCount++; - - var scene = SceneManager.GetSceneAt(i).name; - m_sceneDropdown.options.Add(new Dropdown.OptionData - { - text = scene - }); - } - - m_sceneDropdown.itemText.text = "Any"; - m_sceneFilter = SceneFilter.Any; - } - - // ~~~~~ UI Callbacks ~~~~~ - - internal void OnSearchClicked() - { - m_resultListPageHandler.CurrentPage = 0; - - if (m_context == SearchContext.StaticClass) - m_results = SearchProvider.StaticClassSearch(m_nameInput.text); - else if (m_context == SearchContext.Singleton) - m_results = SearchProvider.SingletonSearch(m_nameInput.text); - else - m_results = SearchProvider.UnityObjectSearch(m_nameInput.text, m_customTypeInput.text, m_context, m_childFilter, m_sceneFilter); - - if (m_results == null) - m_results = new object[0]; - - RefreshResultList(); - - if (m_results.Length > 0) - m_resultCountText.text = $"{m_results.Length} Results"; - else - m_resultCountText.text = "No results..."; - } - - private void OnResultPageTurn() - { - RefreshResultList(); - } - - internal void OnResultClicked(int index) - { - if (m_context == SearchContext.StaticClass) - InspectorManager.Instance.Inspect((Type)m_resultShortList[index]); - else - InspectorManager.Instance.Inspect(m_resultShortList[index]); - } - - internal void OnContextButtonClicked(SearchContext context) - { - if (m_selectedContextButton && m_context == context) - return; - - if (m_selectedContextButton) - UIFactory.SetDefaultSelectableColors(m_selectedContextButton); - - var button = m_contextButtons[context]; - - m_selectedContextButton = button; - - RuntimeProvider.Instance.SetColorBlock(m_selectedContextButton, - new Color(0.35f, 0.7f, 0.35f), new Color(0.35f, 0.7f, 0.35f)); - - m_context = context; - - // if extra filters are valid - if (context == SearchContext.Component - || context == SearchContext.GameObject - || context == SearchContext.Custom) - { - m_extraFilterRow?.SetActive(true); - } - else - { - m_extraFilterRow?.SetActive(false); - } - } - - #region UI CONSTRUCTION - - internal void ConstructUI() - { - GameObject parent = MainMenu.Instance.PageViewport; - - Content = UIFactory.CreateVerticalGroup(parent, "SearchPage", true, true, true, true, 5, new Vector4(4,4,4,4)); - - ConstructTopArea(); - - ConstructResultsArea(); - } - - internal void ConstructTopArea() - { - var topAreaObj = UIFactory.CreateVerticalGroup(Content, "TitleArea", true, false, true, true, 5, new Vector4(5,5,5,5), - new Color(0.15f, 0.15f, 0.15f)); - - var titleLabel = UIFactory.CreateLabel(topAreaObj, "SearchTitle", "Search", TextAnchor.UpperLeft, Color.white, true, 25); - UIFactory.SetLayoutElement(titleLabel.gameObject, minHeight: 30, flexibleHeight: 0); - - // top area options - - var optionsGroupObj = UIFactory.CreateVerticalGroup(topAreaObj, "OptionsArea", true, false, true, true, 10, new Vector4(4,4,4,4), - new Color(0.1f, 0.1f, 0.1f)); - UIFactory.SetLayoutElement(optionsGroupObj, minWidth: 500, minHeight: 70, flexibleHeight: 100); - - // search context row - - var contextRowObj = UIFactory.CreateHorizontalGroup(optionsGroupObj, "ContextFilters", false, false, true, true, 3, default, - new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(contextRowObj, minHeight: 25); - - var contextLabelObj = UIFactory.CreateLabel(contextRowObj, "ContextLabel", "Searching for:", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(contextLabelObj.gameObject, minWidth: 125, minHeight: 25); - - // context buttons - - AddContextButton(contextRowObj, "UnityEngine.Object", SearchContext.UnityObject, 140); - AddContextButton(contextRowObj, "GameObject", SearchContext.GameObject); - AddContextButton(contextRowObj, "Component", SearchContext.Component); - AddContextButton(contextRowObj, "Custom...", SearchContext.Custom); - - // custom type input - - var customTypeObj = UIFactory.CreateInputField(contextRowObj, "CustomTypeInput", "eg. UnityEngine.Texture2D, etc..."); - UIFactory.SetLayoutElement(customTypeObj, minWidth: 250, flexibleWidth: 2000, minHeight: 25, flexibleHeight: 0); - m_customTypeInput = customTypeObj.GetComponent(); - - // static class and singleton buttons - - var secondRow = UIFactory.CreateHorizontalGroup(optionsGroupObj, "SecondRow", false, false, true, true, 3, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(secondRow, minHeight: 25); - - var spacer = UIFactory.CreateUIObject("spacer", secondRow); - UIFactory.SetLayoutElement(spacer, minWidth: 25, minHeight: 25); - - AddContextButton(secondRow, "Static Class", SearchContext.StaticClass); - AddContextButton(secondRow, "Singleton", SearchContext.Singleton); - - // search input - - var nameRowObj = UIFactory.CreateHorizontalGroup(optionsGroupObj, "SearchInput", true, false, true, true, 0, default, new Color(1, 1, 1, 0)); - UIFactory.SetLayoutElement(nameRowObj, minHeight: 25, flexibleHeight: 0, flexibleWidth: 5000); - - var nameLabel = UIFactory.CreateLabel(nameRowObj, "NameLabel", "Name contains:", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(nameLabel.gameObject, minWidth: 125, minHeight: 25); - - var nameInputObj = UIFactory.CreateInputField(nameRowObj, "NameInputField", "..."); - m_nameInput = nameInputObj.GetComponent(); - UIFactory.SetLayoutElement(nameInputObj, minWidth: 150, flexibleWidth: 5000, minHeight: 25); - - // extra filter row - - m_extraFilterRow = UIFactory.CreateHorizontalGroup(optionsGroupObj, "ExtraFilterRow", false, true, true, true, 0, default, new Color(1, 1, 1, 0)); - m_extraFilterRow.SetActive(false); - UIFactory.SetLayoutElement(m_extraFilterRow, minHeight: 25, minWidth: 125, flexibleHeight: 0, flexibleWidth: 150); - - // scene filter - - var sceneLabelObj = UIFactory.CreateLabel(m_extraFilterRow, "SceneFilterLabel", "Scene filter:", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(sceneLabelObj.gameObject, minWidth: 125, minHeight: 25); - - var sceneDropObj = UIFactory.CreateDropdown(m_extraFilterRow, - out m_sceneDropdown, - "Any", - 12, - (int value) => { m_sceneFilter = (SceneFilter)value; } - ); - - UIFactory.SetLayoutElement(sceneDropObj, minWidth: 220, minHeight: 25); - - // invisible space - - var invis = UIFactory.CreateUIObject("spacer", m_extraFilterRow); - UIFactory.SetLayoutElement(invis, minWidth: 25, flexibleWidth: 0); - - // children filter - - var childLabelObj = UIFactory.CreateLabel(m_extraFilterRow, "ChildFilterLabel", "Child filter:", TextAnchor.MiddleLeft); - UIFactory.SetLayoutElement(childLabelObj.gameObject, minWidth: 100, minHeight: 25); - - var childDropObj = UIFactory.CreateDropdown(m_extraFilterRow, - out Dropdown childDrop, - "Any", - 12, - (int value) => { m_childFilter = (ChildFilter)value; }, - new[] { "Any", "Root Objects Only", "Children Only" }); - - UIFactory.SetLayoutElement(childDropObj, minWidth: 180, minHeight: 25); - - // search button - - var searchBtnObj = UIFactory.CreateButton(topAreaObj, "SearchButton", "Search", OnSearchClicked); - UIFactory.SetLayoutElement(searchBtnObj.gameObject, minHeight: 30, flexibleHeight: 0); - } - - internal void AddContextButton(GameObject parent, string label, SearchContext context, float width = 110) - { - var btn = UIFactory.CreateButton(parent, $"Context_{context}", label, () => { OnContextButtonClicked(context); }); - UIFactory.SetLayoutElement(btn.gameObject, minHeight: 25, minWidth: (int)width); - - m_contextButtons.Add(context, btn); - - // if first button - if (!m_selectedContextButton) - OnContextButtonClicked(context); - } - - internal void ConstructResultsArea() - { - // Result group holder (NOT actual result list content) - - var resultGroupObj = UIFactory.CreateVerticalGroup(Content, "SearchResults", true, false, true, true, 5, new Vector4(5,5,5,5), - new Color(1, 1, 1, 0)); - - m_resultCountText = UIFactory.CreateLabel(resultGroupObj, "ResultsLabel", "No results...", TextAnchor.MiddleCenter); - - GameObject scrollObj = UIFactory.CreateScrollView(resultGroupObj, - "ResultsScrollView", - out m_resultListContent, - out SliderScrollbar scroller, - new Color(0.07f, 0.07f, 0.07f, 1)); - - m_resultListPageHandler = new PageHandler(scroller); - m_resultListPageHandler.ConstructUI(resultGroupObj); - m_resultListPageHandler.OnPageChanged += OnResultPageTurn; - - UIFactory.SetLayoutGroup(m_resultListContent, forceHeight: false, childControlHeight: true, spacing: 2); - } - - internal void AddResultButton() - { - int thisIndex = m_resultListTexts.Count(); - - GameObject btnGroupObj = UIFactory.CreateHorizontalGroup(m_resultListContent, "ResultButtonGroup", - true, false, true, true, 0, new Vector4(1,1,1,1), new Color(0.1f, 0.1f, 0.1f)); - UIFactory.SetLayoutElement(btnGroupObj, flexibleWidth: 320, minHeight: 25, flexibleHeight: 0); - btnGroupObj.AddComponent(); - - var mainButton = UIFactory.CreateButton(btnGroupObj, - "ResultButton", - "", - () => { OnResultClicked(thisIndex); }); - - RuntimeProvider.Instance.SetColorBlock(mainButton, new Color(0.1f, 0.1f, 0.1f), - new Color(0.2f, 0.2f, 0.2f), new Color(0.05f, 0.05f, 0.05f)); - - UIFactory.SetLayoutElement(mainButton.gameObject, minHeight: 25, flexibleHeight: 0, minWidth: 320, flexibleWidth: 0); - - Text text = mainButton.GetComponentInChildren(); - text.alignment = TextAnchor.MiddleLeft; - text.horizontalOverflow = HorizontalWrapMode.Overflow; - m_resultListTexts.Add(text); - } - - #endregion - } -} diff --git a/src/UI/Model/UIBehaviourModel.cs b/src/UI/Model/UIBehaviourModel.cs new file mode 100644 index 0000000..21a812b --- /dev/null +++ b/src/UI/Model/UIBehaviourModel.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; + +namespace UnityExplorer.UI.Models +{ + public abstract class UIBehaviourModel : UIModel + { + private static readonly List Instances = new List(); + + public static void UpdateInstances() + { + if (!Instances.Any()) + return; + + for (int i = Instances.Count - 1; i >= 0; i--) + { + var instance = Instances[i]; + if (!instance.UIRoot) + Instances.RemoveAt(i); + else if (instance.NeedsUpdate && instance.Visible) + instance.Update(); + } + } + + /// + /// Default false, if true then Update should be implemented. + /// + public virtual bool NeedsUpdate => false; + + public UIBehaviourModel() + { + Instances.Add(this); + } + + /// + /// Default empty method, override and implement if NeedsUpdateTick is true. + /// + public virtual void Update() + { + } + + public override void Destroy() + { + if (Instances.Contains(this)) + Instances.Remove(this); + + base.Destroy(); + } + } +} diff --git a/src/UI/Model/UIModel.cs b/src/UI/Model/UIModel.cs new file mode 100644 index 0000000..fab696f --- /dev/null +++ b/src/UI/Model/UIModel.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; + +namespace UnityExplorer.UI.Models +{ + public abstract class UIModel + { + public abstract GameObject UIRoot { get; } + + public bool Visible + { + get => UIRoot?.activeInHierarchy ?? false; + set => UIRoot?.SetActive(value); + } + + public abstract void ConstructUI(GameObject parent); + + public virtual void Destroy() + { + if (UIRoot) + GameObject.Destroy(UIRoot); + } + } +} diff --git a/src/UI/Panels/SceneExplorer.cs b/src/UI/Panels/SceneExplorer.cs new file mode 100644 index 0000000..9dcc6ef --- /dev/null +++ b/src/UI/Panels/SceneExplorer.cs @@ -0,0 +1,181 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.UI; +using UnityExplorer.Core; +using UnityExplorer.UI.Models; +using UnityExplorer.UI.Utility; +using UnityExplorer.UI.Widgets; + +namespace UnityExplorer.UI.Panels +{ + public class SceneExplorer : UIBehaviourModel + { + public override GameObject UIRoot => uiRoot; + private GameObject uiRoot; + + public override bool NeedsUpdate => true; + + public TransformTree Tree; + private float timeOfLastUpdate = -1f; + + private Dropdown sceneDropdown; + private readonly Dictionary sceneToDropdownOption = new Dictionary(); + + public SceneExplorer() + { + SceneHandler.OnInspectedSceneChanged += SceneHandler_OnInspectedSceneChanged; + SceneHandler.OnLoadedScenesChanged += SceneHandler_OnLoadedScenesChanged; + } + + private IEnumerable GetRootEntries() => SceneHandler.CurrentRootObjects; + + public override void Update() + { + if (Time.realtimeSinceStartup - timeOfLastUpdate < 1f) + return; + timeOfLastUpdate = Time.realtimeSinceStartup; + + Tree.infiniteScroll.ExternallySetting = true; + SceneHandler.Update(); + Tree.RefreshData(true); + } + + private void OnDropdownChanged(int value) + { + if (value < 0 || SceneHandler.LoadedScenes.Count <= value) + return; + + SceneHandler.SelectedScene = SceneHandler.LoadedScenes[value]; + SceneHandler.Update(); + Tree.RefreshData(true); + } + + private void SceneHandler_OnInspectedSceneChanged(Scene scene) + { + if (!sceneToDropdownOption.ContainsKey(scene.handle)) + PopulateSceneDropdown(); + + if (sceneToDropdownOption.ContainsKey(scene.handle)) + { + int idx = sceneDropdown.value = sceneDropdown.options.IndexOf(sceneToDropdownOption[scene.handle]); + if (sceneDropdown.value != idx) + sceneDropdown.value = idx; + } + } + + private void SceneHandler_OnLoadedScenesChanged(ReadOnlyCollection loadedScenes) + { + PopulateSceneDropdown(); + } + + private void PopulateSceneDropdown() + { + sceneToDropdownOption.Clear(); + sceneDropdown.options.Clear(); + + foreach (var scene in SceneHandler.LoadedScenes) + { + string name = scene.name?.Trim(); + + if (!scene.IsValid()) + name = "HideAndDontSave"; + else if (string.IsNullOrEmpty(name)) + name = ""; + + sceneDropdown.options.Add(new Dropdown.OptionData(name)); + sceneToDropdownOption.Add(scene.handle, sceneDropdown.options.Last()); + } + } + + private void OnFilterInput(string input) + { + Tree.CurrentFilter = input; + Tree.RefreshData(true); + } + + private void SceneExplorer_OnFinishResize(RectTransform obj) + { + int curIdx = Tree.infiniteScroll.currentItemCount; + // Set it to 0 (its going to jump to top anyway) + Tree.infiniteScroll.currentItemCount = 0; + // Need to do complete rebuild so that anchors and offsets can recalculated. + Tree.infiniteScroll.ReloadData(); + // Try jump back to previous idx + RuntimeProvider.Instance.StartCoroutine(DelayedJump(curIdx)); + } + + private IEnumerator DelayedJump(int idx) + { + yield return null; + Tree.infiniteScroll.JumpToIndex(0); + yield return null; + Tree.infiniteScroll.JumpToIndex(idx); + } + + public override void ConstructUI(GameObject parent) + { + var panel = UIFactory.CreatePanel("SceneExplorer", out GameObject panelContent); + uiRoot = panel; + var panelRect = panel.GetComponent(); + panelRect.anchorMin = Vector3.zero; + panelRect.anchorMax = new Vector2(0, 1); + panelRect.sizeDelta = new Vector2(300f, panelRect.sizeDelta.y); + panelRect.anchoredPosition = new Vector2(160, 0); + panelRect.offsetMin = new Vector2(panelRect.offsetMin.x, 10); // bottom + panelRect.offsetMax = new Vector2(panelRect.offsetMax.x, -10); // top + panelRect.pivot = new Vector2(0.5f, 0.5f); + UIFactory.SetLayoutGroup(panel, true, true, true, true, 0,0,0,0,0, TextAnchor.UpperLeft); + UIFactory.SetLayoutGroup(panelContent, true, true, true, true, 2, 2, 2, 2, 2, TextAnchor.UpperLeft); + + Tree = panel.AddComponent(); + Tree.GetRootEntriesMethod = GetRootEntries; + + // Title bar + + var titleBar = UIFactory.CreateLabel(panelContent, "TitleBar", "Scene Explorer", TextAnchor.MiddleLeft); + UIFactory.SetLayoutElement(titleBar.gameObject, minHeight: 25, flexibleHeight: 0); + + new PanelDragger(titleBar.GetComponent(), panelRect) + .OnFinishResize += SceneExplorer_OnFinishResize; + + // Tool bar + + var toolbar = UIFactory.CreateVerticalGroup(panelContent, "Toolbar", true, true, true, true, 2, new Vector4(2, 2, 2, 2), + new Color(0.15f, 0.15f, 0.15f)); + //UIFactory.SetLayoutElement(toolbar, minHeight: 25, flexibleHeight: 0); + + //Scene selector dropdown + var dropdownObj = UIFactory.CreateDropdown(toolbar, out sceneDropdown, "", 13, OnDropdownChanged); + UIFactory.SetLayoutElement(dropdownObj, minHeight: 25, flexibleHeight: 0); + + SceneHandler.Update(); + PopulateSceneDropdown(); + sceneDropdown.itemText.text = sceneToDropdownOption.First().Value.text; + + //Filter input field + var inputFieldObj = UIFactory.CreateInputField(toolbar, "FilterInput", "Search...", out InputField inputField, 13); + UIFactory.SetLayoutElement(inputFieldObj, minHeight: 25); + inputField.onValueChanged.AddListener(OnFilterInput); + + // Transform Tree + + var infiniteScroll = UIFactory.CreateInfiniteScroll(panelContent, "TransformTree", out GameObject scrollContent, + new Color(0.15f, 0.15f, 0.15f)); + UIFactory.SetLayoutElement(infiniteScroll.gameObject, flexibleHeight: 9999); + UIFactory.SetLayoutElement(scrollContent, flexibleHeight: 9999); + + // Prototype tree cell + var prototype = Tree.CreatePrototypeCell(scrollContent, Tree); + infiniteScroll.PrototypeCell = prototype.GetComponent(); + + // Setup references + Tree.infiniteScroll = infiniteScroll; + } + } +} diff --git a/src/UI/UIFactory.cs b/src/UI/UIFactory.cs index 18da679..5095288 100644 --- a/src/UI/UIFactory.cs +++ b/src/UI/UIFactory.cs @@ -5,6 +5,8 @@ using UnityEngine.UI; using UnityExplorer.Core.Config; using UnityExplorer.Core.Runtime; using UnityExplorer.UI.Utility; +using UnityExplorer.UI.Widgets; +using UnityExplorer.UI.Widgets.InfiniteScroll; namespace UnityExplorer.UI { @@ -64,7 +66,7 @@ namespace UnityExplorer.UI /// Get and/or Add a LayoutElement component to the GameObject, and set any of the values on it. /// public static LayoutElement SetLayoutElement(GameObject gameObject, int? minWidth = null, int? minHeight = null, - int? flexibleWidth = null, int? flexibleHeight = null, int? preferredWidth = null, int? preferredHeight = null, + int? flexibleWidth = null, int? flexibleHeight = null, int? preferredWidth = null, int? preferredHeight = null, bool? ignoreLayout = null) { var layout = gameObject.GetComponent(); @@ -99,15 +101,15 @@ namespace UnityExplorer.UI /// Get and/or Add a HorizontalOrVerticalLayoutGroup (must pick one) to the GameObject, and set the values on it. /// public static T SetLayoutGroup(GameObject gameObject, bool? forceWidth = null, bool? forceHeight = null, - bool? childControlWidth = null, bool? childControlHeight = null, int? spacing = null, int? padTop = null, - int? padBottom = null, int? padLeft = null, int? padRight = null, TextAnchor? childAlignment = null) + bool? childControlWidth = null, bool? childControlHeight = null, int? spacing = null, int? padTop = null, + int? padBottom = null, int? padLeft = null, int? padRight = null, TextAnchor? childAlignment = null) where T : HorizontalOrVerticalLayoutGroup { var group = gameObject.GetComponent(); if (!group) group = gameObject.AddComponent(); - return SetLayoutGroup(group, forceWidth, forceHeight, childControlWidth, childControlHeight, spacing, padTop, + return SetLayoutGroup(group, forceWidth, forceHeight, childControlWidth, childControlHeight, spacing, padTop, padBottom, padLeft, padRight, childAlignment); } @@ -116,7 +118,7 @@ namespace UnityExplorer.UI /// public static T SetLayoutGroup(T group, bool? forceWidth = null, bool? forceHeight = null, bool? childControlWidth = null, bool? childControlHeight = null, int? spacing = null, int? padTop = null, - int? padBottom = null, int? padLeft = null, int? padRight = null, TextAnchor? childAlignment = null) + int? padBottom = null, int? padLeft = null, int? padRight = null, TextAnchor? childAlignment = null) where T : HorizontalOrVerticalLayoutGroup { if (forceWidth != null) @@ -146,7 +148,8 @@ namespace UnityExplorer.UI /// /// Create a Panel on the UI Canvas. /// - public static GameObject CreatePanel(string name, out GameObject contentHolder, string anchors = null, string position = null) + public static GameObject CreatePanel(string name, out GameObject contentHolder, Color? bgColor = null, + string anchors = null, string position = null) { var panelObj = CreateUIObject(name, UIManager.CanvasRoot); var rect = panelObj.GetComponent(); @@ -171,7 +174,10 @@ namespace UnityExplorer.UI Image bgImage = contentHolder.AddComponent(); bgImage.type = Image.Type.Filled; - bgImage.color = new Color(0.1f, 0.1f, 0.1f); + if (bgColor == null) + bgImage.color = new Color(0.1f, 0.1f, 0.1f); + else + bgImage.color = (Color)bgColor; SetLayoutGroup(contentHolder, true, true, true, true, 3, 3, 3, 3, 3); @@ -279,7 +285,7 @@ namespace UnityExplorer.UI Image image = buttonObj.AddComponent(); image.type = Image.Type.Sliced; - image.color = new Color(1, 1, 1, 0.75f); + image.color = new Color(1, 1, 1, 1); var button = buttonObj.AddComponent