diff --git a/src/CacheObject/CacheMemberFactory.cs b/src/CacheObject/CacheMemberFactory.cs index 924e24e..0c34bf4 100644 --- a/src/CacheObject/CacheMemberFactory.cs +++ b/src/CacheObject/CacheMemberFactory.cs @@ -14,7 +14,7 @@ namespace UnityExplorer.CacheObject { public static class CacheMemberFactory { - public static List GetCacheMembers(object inspectorTarget, Type type, ReflectionInspector inspector) + public static List GetCacheMembers(Type type, ReflectionInspector inspector) { //var list = new List(); HashSet cachedSigs = new(); @@ -49,10 +49,6 @@ namespace UnityExplorer.CacheObject foreach (var declaringType in types) { - var target = inspectorTarget; - if (!inspector.StaticOnly) - target = target.TryCast(declaringType); - foreach (var prop in declaringType.GetProperties(flags)) if (prop.DeclaringType == declaringType) TryCacheMember(prop, props, cachedSigs, declaringType, inspector); @@ -79,13 +75,9 @@ namespace UnityExplorer.CacheObject return sorted; } - static void TryCacheMember( - MemberInfo member, - IList list, - HashSet cachedSigs, - Type declaringType, - ReflectionInspector inspector, - bool ignorePropertyMethodInfos = true) + static void TryCacheMember(MemberInfo member, List list, HashSet cachedSigs, + Type declaringType, ReflectionInspector inspector, bool ignorePropertyMethodInfos = true) + where T : CacheMember { try { @@ -94,7 +86,9 @@ namespace UnityExplorer.CacheObject string sig = member switch { + // method or constructor MethodBase mb => mb.FullDescription(), + // property or field PropertyInfo or FieldInfo => $"{member.DeclaringType.FullDescription()}.{member.Name}", _ => throw new NotImplementedException(), }; @@ -164,32 +158,13 @@ namespace UnityExplorer.CacheObject cached.SetFallbackType(returnType); cached.SetInspectorOwner(inspector, member); - list.Add(cached); + list.Add((T)cached); } catch (Exception e) { ExplorerCore.LogWarning($"Exception caching member {member.DeclaringType.FullName}.{member.Name}!"); - ExplorerCore.Log(e.ToString()); + ExplorerCore.Log(e); } } - - //internal static string GetSig(MemberInfo member) => $"{member.DeclaringType.Name}.{member.Name}"; - // - //internal static string GetArgumentString(ParameterInfo[] args) - //{ - // var sb = new StringBuilder(); - // sb.Append(' '); - // sb.Append('('); - // foreach (var param in args) - // { - // sb.Append(param.ParameterType.Name); - // sb.Append(' '); - // sb.Append(param.Name); - // sb.Append(','); - // sb.Append(' '); - // } - // sb.Append(')'); - // return sb.ToString(); - //} } } diff --git a/src/ExplorerCore.cs b/src/ExplorerCore.cs index 7757679..7da4e30 100644 --- a/src/ExplorerCore.cs +++ b/src/ExplorerCore.cs @@ -1,10 +1,12 @@ -using System.IO; +using System; +using System.IO; using UnityEngine; using UnityExplorer.Config; using UnityExplorer.ObjectExplorer; using UnityExplorer.Runtime; using UnityExplorer.UI; using UnityExplorer.UI.Panels; +using UniverseLib; using UniverseLib.Input; namespace UnityExplorer @@ -26,23 +28,20 @@ namespace UnityExplorer public static void Init(IExplorerLoader loader) { if (Loader != null) - { - LogWarning("UnityExplorer is already loaded!"); - return; - } + throw new Exception("UnityExplorer is already loaded."); + Loader = loader; Log($"{NAME} {VERSION} initializing..."); - if (!Directory.Exists(Loader.ExplorerFolder)) - Directory.CreateDirectory(Loader.ExplorerFolder); - + Directory.CreateDirectory(Loader.ExplorerFolder); ConfigManager.Init(Loader.ConfigHandler); + UERuntimeHelper.Init(); ExplorerBehaviour.Setup(); UnityCrashPrevention.Init(); - UniverseLib.Universe.Init(ConfigManager.Startup_Delay_Time.Value, LateInit, Log, new() + Universe.Init(ConfigManager.Startup_Delay_Time.Value, LateInit, Log, new() { Disable_EventSystem_Override = ConfigManager.Disable_EventSystem_Override.Value, Force_Unlock_Mouse = ConfigManager.Force_Unlock_Mouse.Value, @@ -53,7 +52,7 @@ namespace UnityExplorer // Do a delayed setup so that objects aren't destroyed instantly. // This can happen for a multitude of reasons. // Default delay is 1 second which is usually enough. - private static void LateInit() + static void LateInit() { Log($"Setting up late core features..."); @@ -63,21 +62,18 @@ namespace UnityExplorer UIManager.InitUI(); - Log($"{NAME} {VERSION} initialized for {UniverseLib.Universe.Context}."); + Log($"{NAME} {VERSION} ({Universe.Context}) initialized."); //InspectorManager.Inspect(typeof(Tests.TestClass)); } - /// - /// Should be called once per frame. - /// - public static void Update() + internal static void Update() { - UIManager.Update(); - // check master toggle if (InputManager.GetKeyDown(ConfigManager.Master_Toggle.Value)) UIManager.ShowMenu = !UIManager.ShowMenu; + + UIManager.Update(); } #region LOGGING diff --git a/src/Inspectors/ReflectionInspector.cs b/src/Inspectors/ReflectionInspector.cs index 615abdc..9fb1749 100644 --- a/src/Inspectors/ReflectionInspector.cs +++ b/src/Inspectors/ReflectionInspector.cs @@ -164,7 +164,7 @@ namespace UnityExplorer.Inspectors // Get cache members - this.members = CacheMemberFactory.GetCacheMembers(Target, TargetType, this); + this.members = CacheMemberFactory.GetCacheMembers(TargetType, this); // reset filters diff --git a/src/Tests/TestClass.cs b/src/Tests/TestClass.cs index 51d69ce..e0dc1b6 100644 --- a/src/Tests/TestClass.cs +++ b/src/Tests/TestClass.cs @@ -24,6 +24,8 @@ namespace UnityExplorer.Tests #endif } + #region MONO + public static object LiterallyAnything = null; // Test enumerables @@ -90,12 +92,12 @@ namespace UnityExplorer.Tests ExplorerCore.Log($"Test3 {typeof(T).FullName}"); } - public static void TestArgumentParse(string _string, - int integer, - Color color, - CameraClearFlags flags, - Vector3 vector, - Quaternion quaternion, + public static void TestArgumentParse(string _string, + int integer, + Color color, + CameraClearFlags flags, + Vector3 vector, + Quaternion quaternion, object obj, Type type, GameObject go) @@ -145,6 +147,8 @@ namespace UnityExplorer.Tests ExplorerCore.Log("Finished TestClass Init_Mono"); } + #endregion + #if CPP public static Il2CppSystem.Collections.Generic.Dictionary IL2CPP_Dict; public static Il2CppSystem.Collections.Generic.HashSet IL2CPP_HashSet; @@ -156,7 +160,7 @@ namespace UnityExplorer.Tests public static Il2CppSystem.Collections.IDictionary IL2CPP_IDict; public static Il2CppSystem.Collections.IList IL2CPP_IList; public static Dictionary IL2CPP_BoxedDict; - + public static Il2CppSystem.Object IL2CPP_BoxedInt; public static Il2CppSystem.Int32 IL2CPP_Int; public static Il2CppSystem.Decimal IL2CPP_Decimal; @@ -185,31 +189,31 @@ namespace UnityExplorer.Tests IL2CPP_HashTable.Add("key1", "value1"); IL2CPP_HashTable.Add("key2", "value2"); IL2CPP_HashTable.Add("key3", "value3"); - + ExplorerCore.Log($"IL2CPP 3: Il2Cpp IDictionary"); var dict2 = new Il2CppSystem.Collections.Generic.Dictionary(); dict2.Add("key1", "value1"); IL2CPP_IDict = dict2.TryCast(); - + ExplorerCore.Log($"IL2CPP 4: Il2Cpp List of Il2Cpp Object"); var list = new Il2CppSystem.Collections.Generic.List(5); list.Add("one"); list.Add("two"); IL2CPP_IList = list.TryCast(); - + ExplorerCore.Log($"IL2CPP 5: Il2Cpp List of strings"); IL2CPP_ListString = new Il2CppSystem.Collections.Generic.List(); IL2CPP_ListString.Add("hello,"); IL2CPP_ListString.Add("world!"); - - + + ExplorerCore.Log($"IL2CPP 7: Dictionary of Il2Cpp String and Il2Cpp Object"); IL2CPP_BoxedDict = new(); IL2CPP_BoxedDict[(Il2CppSystem.String)"one"] = new Il2CppSystem.Int32 { m_value = 1 }.BoxIl2CppObject(); IL2CPP_BoxedDict[(Il2CppSystem.String)"two"] = new Il2CppSystem.Int32 { m_value = 2 }.BoxIl2CppObject(); IL2CPP_BoxedDict[(Il2CppSystem.String)"three"] = new Il2CppSystem.Int32 { m_value = 3 }.BoxIl2CppObject(); IL2CPP_BoxedDict[(Il2CppSystem.String)"four"] = new Il2CppSystem.Int32 { m_value = 4 }.BoxIl2CppObject(); - + ExplorerCore.Log($"IL2CPP 8: List of boxed Il2Cpp Objects"); IL2CPP_listOfBoxedObjects = new List(); IL2CPP_listOfBoxedObjects.Add((Il2CppSystem.String)"boxedString"); @@ -224,16 +228,16 @@ namespace UnityExplorer.Tests var boxedEnum = Il2CppSystem.Enum.Parse(cppType, "Color"); IL2CPP_listOfBoxedObjects.Add(boxedEnum); } - + var structBox = Vector3.one.BoxIl2CppObject(); IL2CPP_listOfBoxedObjects.Add(structBox); - + } catch (Exception ex) { ExplorerCore.LogWarning($"Boxed enum test fail: {ex}"); } - + ExplorerCore.Log($"IL2CPP 9: Il2Cpp struct array of ints"); IL2CPP_structArray = new UnhollowerBaseLib.Il2CppStructArray(5); IL2CPP_structArray[0] = 0; @@ -241,13 +245,13 @@ namespace UnityExplorer.Tests IL2CPP_structArray[2] = 2; IL2CPP_structArray[3] = 3; IL2CPP_structArray[4] = 4; - + ExplorerCore.Log($"IL2CPP 10: Il2Cpp reference array of boxed objects"); IL2CPP_ReferenceArray = new UnhollowerBaseLib.Il2CppReferenceArray(3); IL2CPP_ReferenceArray[0] = new Il2CppSystem.Int32 { m_value = 5 }.BoxIl2CppObject(); IL2CPP_ReferenceArray[1] = null; IL2CPP_ReferenceArray[2] = (Il2CppSystem.String)"whats up"; - + ExplorerCore.Log($"IL2CPP 11: Misc il2cpp members"); IL2CPP_BoxedInt = new Il2CppSystem.Int32() { m_value = 5 }.BoxIl2CppObject(); IL2CPP_Int = new Il2CppSystem.Int32 { m_value = 420 }; @@ -257,6 +261,7 @@ namespace UnityExplorer.Tests ExplorerCore.Log($"Finished Init_Il2Cpp"); } + #endif } }