From 1fce3465c24964c61e6e11bbe5e48db30526fc54 Mon Sep 17 00:00:00 2001 From: sinaioutlander <49360850+sinaioutlander@users.noreply.github.com> Date: Sat, 24 Oct 2020 15:45:37 +1100 Subject: [PATCH] Fix bug in ForceUnlockCursor, fix mistake in Reflection Inspector, reduced amount casting with Reflection Inspector --- src/UI/ForceUnlockCursor.cs | 14 ++++++-- src/UI/Inspectors/ReflectionInspector.cs | 43 ++++++------------------ src/UI/WindowBase.cs | 9 +++++ 3 files changed, 32 insertions(+), 34 deletions(-) diff --git a/src/UI/ForceUnlockCursor.cs b/src/UI/ForceUnlockCursor.cs index ff06f02..90363d6 100644 --- a/src/UI/ForceUnlockCursor.cs +++ b/src/UI/ForceUnlockCursor.cs @@ -1,6 +1,7 @@ using System; using UnityEngine; using Explorer.Helpers; +using BF = System.Reflection.BindingFlags; #if ML using Harmony; #else @@ -40,8 +41,17 @@ namespace Explorer.UI } // Get current cursor state and enable cursor - m_lastLockMode = Cursor.lockState; - m_lastVisibleState = Cursor.visible; + try + { + //m_lastLockMode = Cursor.lockState; + m_lastLockMode = (CursorLockMode?)typeof(Cursor).GetProperty("lockState", BF.Public | BF.Static)?.GetValue(null, null) + ?? CursorLockMode.None; + + //m_lastVisibleState = Cursor.visible; + m_lastVisibleState = (bool?)typeof(Cursor).GetProperty("visible", BF.Public | BF.Static)?.GetValue(null, null) + ?? false; + } + catch { } // Setup Harmony Patches TryPatch("lockState", new HarmonyMethod(typeof(ForceUnlockCursor).GetMethod(nameof(Prefix_set_lockState))), true); diff --git a/src/UI/Inspectors/ReflectionInspector.cs b/src/UI/Inspectors/ReflectionInspector.cs index ff094ea..91fb4dd 100644 --- a/src/UI/Inspectors/ReflectionInspector.cs +++ b/src/UI/Inspectors/ReflectionInspector.cs @@ -99,20 +99,20 @@ namespace Explorer.UI.Inspectors if (m_typeFilter != MemberTypes.All && m_typeFilter != holder.MemInfo?.MemberType) return false; - // check scope filter - if (m_scopeFilter == MemberScopes.Instance) - { - return !holder.IsStatic; - } - else if (m_scopeFilter == MemberScopes.Static) - { - return holder.IsStatic; - } - // hide failed reflection if (!string.IsNullOrEmpty(holder.ReflectionException) && m_hideFailedReflection) return false; + // check scope filter + if (m_scopeFilter == MemberScopes.Instance && holder.IsStatic) + { + return false; + } + else if (m_scopeFilter == MemberScopes.Static && !holder.IsStatic) + { + return false; + } + // see if we should do name search if (m_search == "" || holder.MemInfo == null) return true; @@ -141,22 +141,6 @@ namespace Explorer.UI.Inspectors continue; } - object target = Target; - string exception = null; - -#if CPP - if (!IsStaticInspector && target is Il2CppSystem.Object ilObject) - { - try - { - target = ilObject.Il2CppCast(declaringType); - } - catch (Exception e) - { - exception = ReflectionHelpers.ExceptionToString(e); - } - } -#endif foreach (var member in infos) { try @@ -211,17 +195,12 @@ namespace Explorer.UI.Inspectors try { - var cached = CacheFactory.GetCacheObject(member, target); + var cached = CacheFactory.GetCacheObject(member, Target); if (cached != null) { cachedSigs.Add(sig); list.Add(cached); - - if (string.IsNullOrEmpty(cached.ReflectionException)) - { - cached.ReflectionException = exception; - } } } catch (Exception e) diff --git a/src/UI/WindowBase.cs b/src/UI/WindowBase.cs index b42136b..ea02dde 100644 --- a/src/UI/WindowBase.cs +++ b/src/UI/WindowBase.cs @@ -2,6 +2,7 @@ using UnityEngine; using Explorer.Config; using Explorer.UI.Inspectors; +using Explorer.Helpers; namespace Explorer.UI { @@ -26,7 +27,15 @@ namespace Explorer.UI { var window = Activator.CreateInstance(); +#if CPP + if (target is Il2CppSystem.Object ilObject) + { + target = ilObject.Il2CppCast(ReflectionHelpers.GetActualType(ilObject)); + } +#endif + window.Target = target; + window.windowID = WindowManager.NextWindowID(); window.m_rect = WindowManager.GetNewWindowRect();