mirror of
https://github.com/sinai-dev/UnityExplorer.git
synced 2025-06-16 06:08:16 +08:00
1.8.0.1
* Added some internal caching for Enum Names, should vastly improve speed when inspecting certain classes (worst case scenario I found went from over 50 seconds to less than 1 second). * ILRepack is now done as part of the build process, should simplify things if you are building the project yourself.
This commit is contained in:
parent
912b1b80ff
commit
b8b6cc1605
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
#if CPP
|
#if CPP
|
||||||
using UnhollowerBaseLib;
|
using UnhollowerBaseLib;
|
||||||
@ -15,8 +16,8 @@ namespace Explorer
|
|||||||
|
|
||||||
public PageHelper Pages = new PageHelper();
|
public PageHelper Pages = new PageHelper();
|
||||||
|
|
||||||
private CacheObjectBase[] m_cachedKeys;
|
private CacheObjectBase[] m_cachedKeys = new CacheObjectBase[0];
|
||||||
private CacheObjectBase[] m_cachedValues;
|
private CacheObjectBase[] m_cachedValues = new CacheObjectBase[0];
|
||||||
|
|
||||||
public Type TypeOfKeys
|
public Type TypeOfKeys
|
||||||
{
|
{
|
||||||
@ -119,6 +120,11 @@ namespace Explorer
|
|||||||
|
|
||||||
base.UpdateValue();
|
base.UpdateValue();
|
||||||
|
|
||||||
|
CacheEntries();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CacheEntries()
|
||||||
|
{
|
||||||
// reset
|
// reset
|
||||||
IDict = null;
|
IDict = null;
|
||||||
|
|
||||||
@ -190,8 +196,6 @@ namespace Explorer
|
|||||||
|
|
||||||
var whitespace = CalcWhitespace(window);
|
var whitespace = CalcWhitespace(window);
|
||||||
|
|
||||||
int count = m_cachedKeys.Length;
|
|
||||||
|
|
||||||
if (!IsExpanded)
|
if (!IsExpanded)
|
||||||
{
|
{
|
||||||
if (GUILayout.Button("v", new GUILayoutOption[] { GUILayout.Width(25) }))
|
if (GUILayout.Button("v", new GUILayoutOption[] { GUILayout.Width(25) }))
|
||||||
@ -209,6 +213,8 @@ namespace Explorer
|
|||||||
|
|
||||||
var negativeWhitespace = window.width - (whitespace + 100f);
|
var negativeWhitespace = window.width - (whitespace + 100f);
|
||||||
|
|
||||||
|
int count = m_cachedKeys.Length;
|
||||||
|
|
||||||
GUI.skin.button.alignment = TextAnchor.MiddleLeft;
|
GUI.skin.button.alignment = TextAnchor.MiddleLeft;
|
||||||
string btnLabel = $"[{count}] <color=#2df7b2>Dictionary<{TypeOfKeys.FullName}, {TypeOfValues.FullName}></color>";
|
string btnLabel = $"[{count}] <color=#2df7b2>Dictionary<{TypeOfKeys.FullName}, {TypeOfValues.FullName}></color>";
|
||||||
if (GUILayout.Button(btnLabel, new GUILayoutOption[] { GUILayout.Width(negativeWhitespace) }))
|
if (GUILayout.Button(btnLabel, new GUILayoutOption[] { GUILayout.Width(negativeWhitespace) }))
|
||||||
@ -260,21 +266,27 @@ namespace Explorer
|
|||||||
|
|
||||||
//GUIUnstrip.Space(whitespace);
|
//GUIUnstrip.Space(whitespace);
|
||||||
|
|
||||||
if (key == null || val == null)
|
if (key == null && val == null)
|
||||||
{
|
{
|
||||||
GUILayout.Label($"[{i}] <i><color=grey>(null)</color></i>", new GUILayoutOption[0]);
|
GUILayout.Label($"[{i}] <i><color=grey>(null)</color></i>", new GUILayoutOption[0]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GUI.skin.label.alignment = TextAnchor.MiddleCenter;
|
GUI.skin.label.alignment = TextAnchor.MiddleCenter;
|
||||||
GUILayout.Label($"[{i}]", new GUILayoutOption[] { GUILayout.Width(30) });
|
GUILayout.Label($"[{i}]", new GUILayoutOption[] { GUILayout.Width(40) });
|
||||||
|
|
||||||
GUI.skin.label.alignment = TextAnchor.MiddleLeft;
|
GUI.skin.label.alignment = TextAnchor.MiddleLeft;
|
||||||
GUILayout.Label("Key:", new GUILayoutOption[] { GUILayout.Width(40) });
|
GUILayout.Label("Key:", new GUILayoutOption[] { GUILayout.Width(40) });
|
||||||
|
if (key != null)
|
||||||
key.DrawValue(window, (window.width / 2) - 80f);
|
key.DrawValue(window, (window.width / 2) - 80f);
|
||||||
|
else
|
||||||
|
GUILayout.Label("<i>null</i>", new GUILayoutOption[0]);
|
||||||
|
|
||||||
GUILayout.Label("Value:", new GUILayoutOption[] { GUILayout.Width(40) });
|
GUILayout.Label("Value:", new GUILayoutOption[] { GUILayout.Width(40) });
|
||||||
|
if (Value != null)
|
||||||
val.DrawValue(window, (window.width / 2) - 80f);
|
val.DrawValue(window, (window.width / 2) - 80f);
|
||||||
|
else
|
||||||
|
GUILayout.Label("<i>null</i>", new GUILayoutOption[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@ -13,7 +14,7 @@ namespace Explorer
|
|||||||
|
|
||||||
public PageHelper Pages = new PageHelper();
|
public PageHelper Pages = new PageHelper();
|
||||||
|
|
||||||
private CacheObjectBase[] m_cachedEntries;
|
private CacheObjectBase[] m_cachedEntries = new CacheObjectBase[0];
|
||||||
|
|
||||||
// Type of Entries in the Array
|
// Type of Entries in the Array
|
||||||
public Type EntryType
|
public Type EntryType
|
||||||
@ -218,6 +219,11 @@ namespace Explorer
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CacheEntries();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CacheEntries()
|
||||||
|
{
|
||||||
var enumerator = Enumerable.GetEnumerator();
|
var enumerator = Enumerable.GetEnumerator();
|
||||||
if (enumerator == null)
|
if (enumerator == null)
|
||||||
{
|
{
|
||||||
@ -276,8 +282,6 @@ namespace Explorer
|
|||||||
|
|
||||||
var whitespace = CalcWhitespace(window);
|
var whitespace = CalcWhitespace(window);
|
||||||
|
|
||||||
int count = m_cachedEntries.Length;
|
|
||||||
|
|
||||||
if (!IsExpanded)
|
if (!IsExpanded)
|
||||||
{
|
{
|
||||||
if (GUILayout.Button("v", new GUILayoutOption[] { GUILayout.Width(25) }))
|
if (GUILayout.Button("v", new GUILayoutOption[] { GUILayout.Width(25) }))
|
||||||
@ -295,6 +299,8 @@ namespace Explorer
|
|||||||
|
|
||||||
var negativeWhitespace = window.width - (whitespace + 100f);
|
var negativeWhitespace = window.width - (whitespace + 100f);
|
||||||
|
|
||||||
|
int count = m_cachedEntries.Length;
|
||||||
|
|
||||||
GUI.skin.button.alignment = TextAnchor.MiddleLeft;
|
GUI.skin.button.alignment = TextAnchor.MiddleLeft;
|
||||||
string btnLabel = $"[{count}] <color=#2df7b2>{EntryType.FullName}</color>";
|
string btnLabel = $"[{count}] <color=#2df7b2>{EntryType.FullName}</color>";
|
||||||
if (GUILayout.Button(btnLabel, new GUILayoutOption[] { GUILayout.Width(negativeWhitespace) }))
|
if (GUILayout.Button(btnLabel, new GUILayoutOption[] { GUILayout.Width(negativeWhitespace) }))
|
||||||
|
@ -9,6 +9,8 @@ namespace Explorer
|
|||||||
{
|
{
|
||||||
public class CacheEnum : CacheObjectBase
|
public class CacheEnum : CacheObjectBase
|
||||||
{
|
{
|
||||||
|
internal static Dictionary<Type, string[]> EnumNamesInternalCache = new Dictionary<Type, string[]>();
|
||||||
|
|
||||||
// public Type EnumType;
|
// public Type EnumType;
|
||||||
public string[] EnumNames = new string[0];
|
public string[] EnumNames = new string[0];
|
||||||
|
|
||||||
@ -21,18 +23,7 @@ namespace Explorer
|
|||||||
|
|
||||||
if (ValueType != null)
|
if (ValueType != null)
|
||||||
{
|
{
|
||||||
// using GetValues not GetNames, to catch instances of weird enums (eg CameraClearFlags)
|
GetNames();
|
||||||
var values = Enum.GetValues(ValueType);
|
|
||||||
|
|
||||||
var list = new List<string>();
|
|
||||||
foreach (var value in values)
|
|
||||||
{
|
|
||||||
var v = value.ToString();
|
|
||||||
if (list.Contains(v)) continue;
|
|
||||||
list.Add(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
EnumNames = list.ToArray();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -40,6 +31,27 @@ namespace Explorer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void GetNames()
|
||||||
|
{
|
||||||
|
if (!EnumNamesInternalCache.ContainsKey(ValueType))
|
||||||
|
{
|
||||||
|
// using GetValues not GetNames, to catch instances of weird enums (eg CameraClearFlags)
|
||||||
|
var values = Enum.GetValues(ValueType);
|
||||||
|
|
||||||
|
var set = new HashSet<string>();
|
||||||
|
foreach (var value in values)
|
||||||
|
{
|
||||||
|
var v = value.ToString();
|
||||||
|
if (set.Contains(v)) continue;
|
||||||
|
set.Add(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
EnumNamesInternalCache.Add(ValueType, set.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
EnumNames = EnumNamesInternalCache[ValueType];
|
||||||
|
}
|
||||||
|
|
||||||
public override void DrawValue(Rect window, float width)
|
public override void DrawValue(Rect window, float width)
|
||||||
{
|
{
|
||||||
if (CanWrite)
|
if (CanWrite)
|
||||||
|
@ -28,11 +28,11 @@
|
|||||||
<!-- Set this to the MelonLoader Il2Cpp Game folder, without the ending '\' character. -->
|
<!-- Set this to the MelonLoader Il2Cpp Game folder, without the ending '\' character. -->
|
||||||
<MLCppGameFolder>D:\Steam\steamapps\common\Hellpoint</MLCppGameFolder>
|
<MLCppGameFolder>D:\Steam\steamapps\common\Hellpoint</MLCppGameFolder>
|
||||||
<!-- Set this to the MelonLoader Mono Game folder, without the ending '\' character. -->
|
<!-- Set this to the MelonLoader Mono Game folder, without the ending '\' character. -->
|
||||||
<MLMonoGameFolder>D:\Steam\steamapps\common\Outward_Mono</MLMonoGameFolder>
|
<MLMonoGameFolder>D:\Steam\steamapps\common\Outward</MLMonoGameFolder>
|
||||||
<!-- Set this to the BepInEx Il2Cpp Game folder, without the ending '\' character. -->
|
<!-- Set this to the BepInEx Il2Cpp Game folder, without the ending '\' character. -->
|
||||||
<BIECppGameFolder>D:\Steam\steamapps\common\Outward</BIECppGameFolder>
|
<BIECppGameFolder>D:\Steam\steamapps\common\Outward_Il2Cpp</BIECppGameFolder>
|
||||||
<!-- Set this to the BepInEx Mono Game folder, without the ending '\' character. -->
|
<!-- Set this to the BepInEx Mono Game folder, without the ending '\' character. -->
|
||||||
<BIEMonoGameFolder>D:\Steam\steamapps\common\Outward_Mono</BIEMonoGameFolder>
|
<BIEMonoGameFolder>D:\Steam\steamapps\common\Outward</BIEMonoGameFolder>
|
||||||
<NuGetPackageImportStamp>
|
<NuGetPackageImportStamp>
|
||||||
</NuGetPackageImportStamp>
|
</NuGetPackageImportStamp>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -32,7 +32,7 @@ namespace Explorer
|
|||||||
#if ML
|
#if ML
|
||||||
GUILayout.Button(gcDrag, GUI.skin.label, new GUILayoutOption[] { GUILayout.Height(15) });
|
GUILayout.Button(gcDrag, GUI.skin.label, new GUILayoutOption[] { GUILayout.Height(15) });
|
||||||
#else
|
#else
|
||||||
GUILayout.Button(gcDrag.ToString(), new GUILayoutOption[] { GUILayout.Height(15) });
|
GUILayout.Button("<-- Drag to resize -->", new GUILayoutOption[] { GUILayout.Height(15) });
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//var r = GUILayoutUtility.GetLastRect();
|
//var r = GUILayoutUtility.GetLastRect();
|
||||||
|
@ -202,7 +202,7 @@ namespace Explorer
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExplorerCore.Log($"Trying to cache member {signature}...");
|
//ExplorerCore.Log($"Trying to cache member {sig}...");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user