From e58cf45e0737c91df2adec7da8d7bbed80da0cf0 Mon Sep 17 00:00:00 2001
From: sinaioutlander <49360850+sinaioutlander@users.noreply.github.com>
Date: Wed, 12 Aug 2020 18:25:52 +1000
Subject: [PATCH] Revert "1.31"
This reverts commit 7144b6a44ce1626ef7b040c6393855cbd88b87ff.
---
src/CppExplorer.cs | 2 +-
src/CppExplorer.csproj | 1 +
src/ILBehaviour.cs | 33 ++
src/Inspectors/ReflectionWindow.cs | 66 ++--
src/MainMenu/Pages/Console/REPL.cs | 20 +-
src/MainMenu/Pages/Console/REPLHelper.cs | 16 +-
src/MainMenu/Pages/ScenePage.cs | 79 +----
src/MainMenu/Pages/SearchPage.cs | 4 +-
src/UIStyles.cs | 293 +++++++-----------
src_2018/CppExplorer.cs | 2 +-
src_2018/CppExplorer.csproj | 1 +
src_2018/ILBehaviour.cs | 33 ++
src_2018/Inspectors/ReflectionWindow.cs | 66 ++--
src_2018/MainMenu/Pages/Console/REPL.cs | 20 +-
src_2018/MainMenu/Pages/Console/REPLHelper.cs | 16 +-
src_2018/MainMenu/Pages/ScenePage.cs | 82 +----
src_2018/MainMenu/Pages/SearchPage.cs | 16 +-
src_2018/UIStyles.cs | 293 +++++++-----------
src_2018/WindowManager.cs | 8 +-
19 files changed, 453 insertions(+), 598 deletions(-)
create mode 100644 src/ILBehaviour.cs
create mode 100644 src_2018/ILBehaviour.cs
diff --git a/src/CppExplorer.cs b/src/CppExplorer.cs
index 23349a8..1f9b293 100644
--- a/src/CppExplorer.cs
+++ b/src/CppExplorer.cs
@@ -16,7 +16,7 @@ namespace Explorer
public const string ID = "com.sinai.cppexplorer";
public const string NAME = "IL2CPP Runtime Explorer";
- public const string VERSION = "1.3.1";
+ public const string VERSION = "1.3.0";
public const string AUTHOR = "Sinai";
// fields
diff --git a/src/CppExplorer.csproj b/src/CppExplorer.csproj
index 6c1be1c..a2274dd 100644
--- a/src/CppExplorer.csproj
+++ b/src/CppExplorer.csproj
@@ -112,6 +112,7 @@
+
diff --git a/src/ILBehaviour.cs b/src/ILBehaviour.cs
new file mode 100644
index 0000000..a00d88d
--- /dev/null
+++ b/src/ILBehaviour.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using MelonLoader;
+using UnhollowerRuntimeLib;
+
+namespace Explorer
+{
+ //public class ILBehaviour : MonoBehaviour
+ //{
+ // public ILBehaviour(IntPtr intPtr) : base(intPtr) { }
+
+ // public static T AddToGameObject(GameObject _go) where T : ILBehaviour
+ // {
+ // Il2CppSystem.Type ilType = UnhollowerRuntimeLib.Il2CppType.Of();
+
+ // if (ilType == null)
+ // {
+ // MelonLogger.Log("Error - could not get MB as ilType");
+ // return null;
+ // }
+
+ // var obj = typeof(T)
+ // .GetConstructor(new Type[] { typeof(IntPtr) })
+ // .Invoke(new object[] { _go.AddComponent(UnhollowerRuntimeLib.Il2CppType.Of()).Pointer });
+
+ // return (T)obj;
+ // }
+ //}
+}
diff --git a/src/Inspectors/ReflectionWindow.cs b/src/Inspectors/ReflectionWindow.cs
index aafb519..0d1ba66 100644
--- a/src/Inspectors/ReflectionWindow.cs
+++ b/src/Inspectors/ReflectionWindow.cs
@@ -93,13 +93,9 @@ namespace Explorer
return;
}
- try
- {
- m_objectType = type;
- GetFields(m_object);
- GetProperties(m_object);
- }
- catch { }
+ m_objectType = type;
+ GetFields(m_object);
+ GetProperties(m_object);
UpdateValues();
}
@@ -280,7 +276,7 @@ namespace Explorer
public static bool IsList(Type t)
{
- return t.IsGenericType
+ return t.IsGenericType
&& t.GetGenericTypeDefinition() is Type typeDef
&& (typeDef.IsAssignableFrom(typeof(List<>)) || typeDef.IsAssignableFrom(typeof(Il2CppSystem.Collections.Generic.List<>)));
}
@@ -296,20 +292,8 @@ namespace Explorer
foreach (var type in types)
{
- PropertyInfo[] propInfos = new PropertyInfo[0];
-
- try
+ foreach (var pi in type.GetProperties(At.flags))
{
- propInfos = type.GetProperties(At.flags);
- }
- catch (TypeLoadException)
- {
- MelonLogger.Log($"Couldn't get Properties for Type '{type.Name}', it may not support Il2Cpp Reflection at the moment.");
- }
-
- foreach (var pi in propInfos)
- {
- // this member causes a crash when inspected, so just skipping it for now.
if (pi.Name == "Il2CppType")
{
continue;
@@ -351,7 +335,7 @@ namespace Explorer
}
}
}
-
+
/* *********************
* PROPERTYINFO HOLDER
@@ -362,7 +346,6 @@ namespace Explorer
public Type classType;
public PropertyInfo propInfo;
public object m_value;
- public bool IsExpanded;
public PropertyInfoHolder(Type _type, PropertyInfo _propInfo)
{
@@ -372,7 +355,14 @@ namespace Explorer
public void Draw(ReflectionWindow window)
{
- UIStyles.DrawMember(ref m_value, ref this.IsExpanded, this.propInfo, window.m_rect, window.m_object, SetValue);
+ if (propInfo.CanWrite)
+ {
+ UIStyles.DrawMember(ref m_value, propInfo.PropertyType.Name, propInfo.Name, window.m_rect, window.m_object, SetValue);
+ }
+ else
+ {
+ UIStyles.DrawMember(ref m_value, propInfo.PropertyType.Name, propInfo.Name, window.m_rect, window.m_object);
+ }
}
public void UpdateValue(object obj)
@@ -399,15 +389,15 @@ namespace Explorer
}
catch (Exception e)
{
- MelonLogger.Log("Exception on PropertyInfoHolder.UpdateValue, Name: " + this.propInfo.Name);
- MelonLogger.Log(e.GetType() + ", " + e.Message);
+ //MelonLogger.Log("Exception on PropertyInfoHolder.UpdateValue, Name: " + this.propInfo.Name);
+ //MelonLogger.Log(e.GetType() + ", " + e.Message);
- var inner = e.InnerException;
- while (inner != null)
- {
- MelonLogger.Log("inner: " + inner.GetType() + ", " + inner.Message);
- inner = inner.InnerException;
- }
+ //var inner = e.InnerException;
+ //while (inner != null)
+ //{
+ // MelonLogger.Log("inner: " + inner.GetType() + ", " + inner.Message);
+ // inner = inner.InnerException;
+ //}
m_value = null;
}
@@ -483,7 +473,6 @@ namespace Explorer
public Type classType;
public FieldInfo fieldInfo;
public object m_value;
- public bool IsExpanded;
public FieldInfoHolder(Type _type, FieldInfo _fieldInfo)
{
@@ -498,7 +487,16 @@ namespace Explorer
public void Draw(ReflectionWindow window)
{
- UIStyles.DrawMember(ref m_value, ref this.IsExpanded, this.fieldInfo, window.m_rect, window.m_object, SetValue);
+ bool canSet = !(fieldInfo.IsLiteral && !fieldInfo.IsInitOnly);
+
+ if (canSet)
+ {
+ UIStyles.DrawMember(ref m_value, fieldInfo.FieldType.Name, fieldInfo.Name, window.m_rect, window.m_object, SetValue);
+ }
+ else
+ {
+ UIStyles.DrawMember(ref m_value, fieldInfo.FieldType.Name, fieldInfo.Name, window.m_rect, window.m_object);
+ }
}
public void SetValue(object obj)
diff --git a/src/MainMenu/Pages/Console/REPL.cs b/src/MainMenu/Pages/Console/REPL.cs
index 31ff80d..97ab678 100644
--- a/src/MainMenu/Pages/Console/REPL.cs
+++ b/src/MainMenu/Pages/Console/REPL.cs
@@ -36,17 +36,17 @@ namespace Explorer
return MB.FindAll();
}
- //[Documentation("runCoroutine(enumerator) - runs an IEnumerator as a Unity coroutine.")]
- //public static object runCoroutine(IEnumerator i)
- //{
- // return MB.RunCoroutine(i);
- //}
+ [Documentation("runCoroutine(enumerator) - runs an IEnumerator as a Unity coroutine.")]
+ public static object runCoroutine(IEnumerator i)
+ {
+ return MB.RunCoroutine(i);
+ }
- //[Documentation("endCoroutine(co) - ends a Unity coroutine.")]
- //public static void endCoroutine(Coroutine c)
- //{
- // MB.EndCoroutine(c);
- //}
+ [Documentation("endCoroutine(co) - ends a Unity coroutine.")]
+ public static void endCoroutine(Coroutine c)
+ {
+ MB.EndCoroutine(c);
+ }
////[Documentation("type() - obtain type info about a type T. Provides some Reflection helpers.")]
////public static TypeHelper type()
diff --git a/src/MainMenu/Pages/Console/REPLHelper.cs b/src/MainMenu/Pages/Console/REPLHelper.cs
index e31ff73..d228761 100644
--- a/src/MainMenu/Pages/Console/REPLHelper.cs
+++ b/src/MainMenu/Pages/Console/REPLHelper.cs
@@ -21,14 +21,14 @@ namespace Explorer
return FindObjectsOfType();
}
- //public object RunCoroutine(IEnumerator enumerator)
- //{
- // return MelonCoroutines.Start(enumerator);
- //}
+ public object RunCoroutine(IEnumerator enumerator)
+ {
+ return MelonCoroutines.Start(enumerator);
+ }
- //public void EndCoroutine(Coroutine c)
- //{
- // StopCoroutine(c);
- //}
+ public void EndCoroutine(Coroutine c)
+ {
+ StopCoroutine(c);
+ }
}
}
\ No newline at end of file
diff --git a/src/MainMenu/Pages/ScenePage.cs b/src/MainMenu/Pages/ScenePage.cs
index af615b1..aac139f 100644
--- a/src/MainMenu/Pages/ScenePage.cs
+++ b/src/MainMenu/Pages/ScenePage.cs
@@ -20,13 +20,12 @@ namespace Explorer
// gameobject list
private Transform m_currentTransform;
- private List m_objectList = new List();
- private float m_timeOfLastUpdate = -1f;
+ private List m_objectList = new List();
// search bar
private bool m_searching = false;
private string m_searchInput = "";
- private List m_searchResults = new List();
+ private List m_searchResults = new List();
// ------------ Init and Update ------------ //
@@ -41,24 +40,17 @@ namespace Explorer
m_currentTransform = null;
CancelSearch();
+
}
public override void Update()
{
- if (Time.time - m_timeOfLastUpdate < 1f)
- {
- return;
- }
- m_timeOfLastUpdate = Time.time;
-
- var start = Time.realtimeSinceStartup;
-
if (!m_searching)
{
- m_objectList = new List();
+ m_objectList = new List();
if (m_currentTransform)
{
- var endAppend = new List();
+ var noChildren = new List();
for (int i = 0; i < m_currentTransform.childCount; i++)
{
var child = m_currentTransform.GetChild(i);
@@ -66,13 +58,13 @@ namespace Explorer
if (child)
{
if (child.childCount > 0)
- m_objectList.Add(new GameObjectCache(child.gameObject));
+ m_objectList.Add(child.gameObject);
else
- endAppend.Add(new GameObjectCache(child.gameObject));
+ noChildren.Add(child.gameObject);
}
}
- m_objectList.AddRange(endAppend);
- endAppend = null;
+ m_objectList.AddRange(noChildren);
+ noChildren = null;
}
else
{
@@ -82,11 +74,11 @@ namespace Explorer
// add objects with children first
foreach (var obj in rootObjects.Where(x => x.transform.childCount > 0))
{
- m_objectList.Add(new GameObjectCache(obj));
+ m_objectList.Add(obj);
}
foreach (var obj in rootObjects.Where(x => x.transform.childCount == 0))
{
- m_objectList.Add(new GameObjectCache(obj));
+ m_objectList.Add(obj);
}
}
}
@@ -169,13 +161,10 @@ namespace Explorer
if (m_objectList.Count > 0)
{
- var start = Time.realtimeSinceStartup;
foreach (var obj in m_objectList)
{
- //UIStyles.GameobjButton(obj, SetTransformTarget, true, MainMenu.MainRect.width - 170);
- UIStyles.FastGameobjButton(obj.RefGameObject, obj.EnabledColor, obj.Label, obj.RefGameObject.activeSelf, SetTransformTarget, true, MainMenu.MainRect.width - 170);
+ UIStyles.GameobjButton(obj, SetTransformTarget, true, MainMenu.MainRect.width - 170);
}
- var diff = Time.realtimeSinceStartup - start;
}
else
{
@@ -195,8 +184,7 @@ namespace Explorer
{
foreach (var obj in m_searchResults)
{
- //UIStyles.GameobjButton(obj, SetTransformTarget, true, MainMenu.MainRect.width - 170);
- UIStyles.FastGameobjButton(obj.RefGameObject, obj.EnabledColor, obj.Label, obj.RefGameObject.activeSelf, SetTransformTarget, true, MainMenu.MainRect.width - 170);
+ UIStyles.GameobjButton(obj, SetTransformTarget, true, MainMenu.MainRect.width - 170);
}
}
else
@@ -244,54 +232,19 @@ namespace Explorer
m_searching = false;
}
- public List SearchSceneObjects(string _search)
+ public List SearchSceneObjects(string _search)
{
- var matches = new List();
+ var matches = new List();
foreach (var obj in Resources.FindObjectsOfTypeAll())
{
if (obj.name.ToLower().Contains(_search.ToLower()) && obj.scene.name == m_currentScene)
{
- matches.Add(new GameObjectCache(obj));
+ matches.Add(obj);
}
}
return matches;
}
-
- public class GameObjectCache
- {
- public GameObject RefGameObject;
- public string Label;
- public Color EnabledColor;
- public int ChildCount;
-
- public GameObjectCache(GameObject obj)
- {
- RefGameObject = obj;
- ChildCount = obj.transform.childCount;
-
- Label = (ChildCount > 0) ? "[" + obj.transform.childCount + " children] " : "";
- Label += obj.name;
-
- bool enabled = obj.activeSelf;
- int childCount = obj.transform.childCount;
- if (enabled)
- {
- if (childCount > 0)
- {
- EnabledColor = Color.green;
- }
- else
- {
- EnabledColor = UIStyles.LightGreen;
- }
- }
- else
- {
- EnabledColor = Color.red;
- }
- }
- }
}
}
diff --git a/src/MainMenu/Pages/SearchPage.cs b/src/MainMenu/Pages/SearchPage.cs
index c4df37d..603de38 100644
--- a/src/MainMenu/Pages/SearchPage.cs
+++ b/src/MainMenu/Pages/SearchPage.cs
@@ -91,8 +91,7 @@ namespace Explorer
{
var obj = m_searchResults[i];
- bool _ = false;
- UIStyles.DrawValue(ref obj, _temprect, ref _);
+ UIStyles.DrawValue(ref obj, _temprect);
}
}
else
@@ -263,6 +262,7 @@ namespace Explorer
{
var findType = CppExplorer.GetType(_type);
type = Il2CppSystem.Type.GetType(findType.AssemblyQualifiedName);
+ MelonLogger.Log("Got type: " + type.AssemblyQualifiedName);
}
catch (Exception e)
{
diff --git a/src/UIStyles.cs b/src/UIStyles.cs
index d21224d..a605092 100644
--- a/src/UIStyles.cs
+++ b/src/UIStyles.cs
@@ -5,7 +5,7 @@ using System.Linq;
using System.Reflection;
using System.Text;
using Il2CppSystem.Collections;
-//using Il2CppSystem.Reflection;
+using Il2CppSystem.Reflection;
using MelonLoader;
using UnhollowerBaseLib;
using UnityEngine;
@@ -15,8 +15,6 @@ namespace Explorer
{
public class UIStyles
{
- public static Color LightGreen = new Color(Color.green.r - 0.3f, Color.green.g - 0.3f, Color.green.b - 0.3f);
-
public static GUISkin WindowSkin
{
get
@@ -117,48 +115,42 @@ namespace Explorer
// helper for drawing a styled button for a GameObject or Transform
public static void GameobjButton(GameObject obj, Action specialInspectMethod = null, bool showSmallInspectBtn = true, float width = 380)
{
- bool children = obj.transform.childCount > 0;
-
- string label = children ? "[" + obj.transform.childCount + " children] " : "";
- label += obj.name;
-
- bool enabled = obj.activeSelf;
- int childCount = obj.transform.childCount;
- Color color;
-
- if (enabled)
- {
- if (childCount > 0)
- {
- color = Color.green;
- }
- else
- {
- color = LightGreen;
- }
- }
- else
- {
- color = Color.red;
- }
-
- FastGameobjButton(obj, color, label, obj.activeSelf, specialInspectMethod, showSmallInspectBtn, width);
- }
-
- public static void FastGameobjButton(GameObject obj, Color activeColor, string label, bool enabled, Action specialInspectMethod = null, bool showSmallInspectBtn = true, float width = 380)
- {
- if (!obj)
+ if (obj == null)
{
GUILayout.Label("null", null);
return;
}
- // ------ toggle active button ------
+ bool enabled = obj.activeSelf;
+ bool children = obj.transform.childCount > 0;
GUILayout.BeginHorizontal(null);
GUI.skin.button.alignment = TextAnchor.UpperLeft;
- GUI.color = activeColor;
+ // ------ build name ------
+
+ string label = children ? "[" + obj.transform.childCount + " children] " : "";
+ label += obj.name;
+
+ // ------ Color -------
+
+ if (enabled)
+ {
+ if (children)
+ {
+ GUI.color = Color.green;
+ }
+ else
+ {
+ GUI.color = new Color(Color.green.r - 0.3f, Color.green.g - 0.3f, Color.green.b - 0.3f);
+ }
+ }
+ else
+ {
+ GUI.color = Color.red;
+ }
+
+ // ------ toggle active button ------
enabled = GUILayout.Toggle(enabled, "", new GUILayoutOption[] { GUILayout.Width(18) });
if (obj.activeSelf != enabled)
@@ -196,114 +188,84 @@ namespace Explorer
GUILayout.EndHorizontal();
}
- public static void DrawMember(ref object value, ref bool isExpanded, MemberInfo memberInfo, Rect rect, object setTarget = null, Action
+
diff --git a/src_2018/ILBehaviour.cs b/src_2018/ILBehaviour.cs
new file mode 100644
index 0000000..a00d88d
--- /dev/null
+++ b/src_2018/ILBehaviour.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using MelonLoader;
+using UnhollowerRuntimeLib;
+
+namespace Explorer
+{
+ //public class ILBehaviour : MonoBehaviour
+ //{
+ // public ILBehaviour(IntPtr intPtr) : base(intPtr) { }
+
+ // public static T AddToGameObject(GameObject _go) where T : ILBehaviour
+ // {
+ // Il2CppSystem.Type ilType = UnhollowerRuntimeLib.Il2CppType.Of();
+
+ // if (ilType == null)
+ // {
+ // MelonLogger.Log("Error - could not get MB as ilType");
+ // return null;
+ // }
+
+ // var obj = typeof(T)
+ // .GetConstructor(new Type[] { typeof(IntPtr) })
+ // .Invoke(new object[] { _go.AddComponent(UnhollowerRuntimeLib.Il2CppType.Of()).Pointer });
+
+ // return (T)obj;
+ // }
+ //}
+}
diff --git a/src_2018/Inspectors/ReflectionWindow.cs b/src_2018/Inspectors/ReflectionWindow.cs
index aafb519..0d1ba66 100644
--- a/src_2018/Inspectors/ReflectionWindow.cs
+++ b/src_2018/Inspectors/ReflectionWindow.cs
@@ -93,13 +93,9 @@ namespace Explorer
return;
}
- try
- {
- m_objectType = type;
- GetFields(m_object);
- GetProperties(m_object);
- }
- catch { }
+ m_objectType = type;
+ GetFields(m_object);
+ GetProperties(m_object);
UpdateValues();
}
@@ -280,7 +276,7 @@ namespace Explorer
public static bool IsList(Type t)
{
- return t.IsGenericType
+ return t.IsGenericType
&& t.GetGenericTypeDefinition() is Type typeDef
&& (typeDef.IsAssignableFrom(typeof(List<>)) || typeDef.IsAssignableFrom(typeof(Il2CppSystem.Collections.Generic.List<>)));
}
@@ -296,20 +292,8 @@ namespace Explorer
foreach (var type in types)
{
- PropertyInfo[] propInfos = new PropertyInfo[0];
-
- try
+ foreach (var pi in type.GetProperties(At.flags))
{
- propInfos = type.GetProperties(At.flags);
- }
- catch (TypeLoadException)
- {
- MelonLogger.Log($"Couldn't get Properties for Type '{type.Name}', it may not support Il2Cpp Reflection at the moment.");
- }
-
- foreach (var pi in propInfos)
- {
- // this member causes a crash when inspected, so just skipping it for now.
if (pi.Name == "Il2CppType")
{
continue;
@@ -351,7 +335,7 @@ namespace Explorer
}
}
}
-
+
/* *********************
* PROPERTYINFO HOLDER
@@ -362,7 +346,6 @@ namespace Explorer
public Type classType;
public PropertyInfo propInfo;
public object m_value;
- public bool IsExpanded;
public PropertyInfoHolder(Type _type, PropertyInfo _propInfo)
{
@@ -372,7 +355,14 @@ namespace Explorer
public void Draw(ReflectionWindow window)
{
- UIStyles.DrawMember(ref m_value, ref this.IsExpanded, this.propInfo, window.m_rect, window.m_object, SetValue);
+ if (propInfo.CanWrite)
+ {
+ UIStyles.DrawMember(ref m_value, propInfo.PropertyType.Name, propInfo.Name, window.m_rect, window.m_object, SetValue);
+ }
+ else
+ {
+ UIStyles.DrawMember(ref m_value, propInfo.PropertyType.Name, propInfo.Name, window.m_rect, window.m_object);
+ }
}
public void UpdateValue(object obj)
@@ -399,15 +389,15 @@ namespace Explorer
}
catch (Exception e)
{
- MelonLogger.Log("Exception on PropertyInfoHolder.UpdateValue, Name: " + this.propInfo.Name);
- MelonLogger.Log(e.GetType() + ", " + e.Message);
+ //MelonLogger.Log("Exception on PropertyInfoHolder.UpdateValue, Name: " + this.propInfo.Name);
+ //MelonLogger.Log(e.GetType() + ", " + e.Message);
- var inner = e.InnerException;
- while (inner != null)
- {
- MelonLogger.Log("inner: " + inner.GetType() + ", " + inner.Message);
- inner = inner.InnerException;
- }
+ //var inner = e.InnerException;
+ //while (inner != null)
+ //{
+ // MelonLogger.Log("inner: " + inner.GetType() + ", " + inner.Message);
+ // inner = inner.InnerException;
+ //}
m_value = null;
}
@@ -483,7 +473,6 @@ namespace Explorer
public Type classType;
public FieldInfo fieldInfo;
public object m_value;
- public bool IsExpanded;
public FieldInfoHolder(Type _type, FieldInfo _fieldInfo)
{
@@ -498,7 +487,16 @@ namespace Explorer
public void Draw(ReflectionWindow window)
{
- UIStyles.DrawMember(ref m_value, ref this.IsExpanded, this.fieldInfo, window.m_rect, window.m_object, SetValue);
+ bool canSet = !(fieldInfo.IsLiteral && !fieldInfo.IsInitOnly);
+
+ if (canSet)
+ {
+ UIStyles.DrawMember(ref m_value, fieldInfo.FieldType.Name, fieldInfo.Name, window.m_rect, window.m_object, SetValue);
+ }
+ else
+ {
+ UIStyles.DrawMember(ref m_value, fieldInfo.FieldType.Name, fieldInfo.Name, window.m_rect, window.m_object);
+ }
}
public void SetValue(object obj)
diff --git a/src_2018/MainMenu/Pages/Console/REPL.cs b/src_2018/MainMenu/Pages/Console/REPL.cs
index 31ff80d..97ab678 100644
--- a/src_2018/MainMenu/Pages/Console/REPL.cs
+++ b/src_2018/MainMenu/Pages/Console/REPL.cs
@@ -36,17 +36,17 @@ namespace Explorer
return MB.FindAll();
}
- //[Documentation("runCoroutine(enumerator) - runs an IEnumerator as a Unity coroutine.")]
- //public static object runCoroutine(IEnumerator i)
- //{
- // return MB.RunCoroutine(i);
- //}
+ [Documentation("runCoroutine(enumerator) - runs an IEnumerator as a Unity coroutine.")]
+ public static object runCoroutine(IEnumerator i)
+ {
+ return MB.RunCoroutine(i);
+ }
- //[Documentation("endCoroutine(co) - ends a Unity coroutine.")]
- //public static void endCoroutine(Coroutine c)
- //{
- // MB.EndCoroutine(c);
- //}
+ [Documentation("endCoroutine(co) - ends a Unity coroutine.")]
+ public static void endCoroutine(Coroutine c)
+ {
+ MB.EndCoroutine(c);
+ }
////[Documentation("type() - obtain type info about a type T. Provides some Reflection helpers.")]
////public static TypeHelper type()
diff --git a/src_2018/MainMenu/Pages/Console/REPLHelper.cs b/src_2018/MainMenu/Pages/Console/REPLHelper.cs
index e31ff73..d228761 100644
--- a/src_2018/MainMenu/Pages/Console/REPLHelper.cs
+++ b/src_2018/MainMenu/Pages/Console/REPLHelper.cs
@@ -21,14 +21,14 @@ namespace Explorer
return FindObjectsOfType();
}
- //public object RunCoroutine(IEnumerator enumerator)
- //{
- // return MelonCoroutines.Start(enumerator);
- //}
+ public object RunCoroutine(IEnumerator enumerator)
+ {
+ return MelonCoroutines.Start(enumerator);
+ }
- //public void EndCoroutine(Coroutine c)
- //{
- // StopCoroutine(c);
- //}
+ public void EndCoroutine(Coroutine c)
+ {
+ StopCoroutine(c);
+ }
}
}
\ No newline at end of file
diff --git a/src_2018/MainMenu/Pages/ScenePage.cs b/src_2018/MainMenu/Pages/ScenePage.cs
index 431b03c..60b4ed7 100644
--- a/src_2018/MainMenu/Pages/ScenePage.cs
+++ b/src_2018/MainMenu/Pages/ScenePage.cs
@@ -20,13 +20,12 @@ namespace Explorer
// gameobject list
private Transform m_currentTransform;
- private List m_objectList = new List();
- private float m_timeOfLastUpdate = -1f;
+ private List m_objectList = new List();
// search bar
private bool m_searching = false;
private string m_searchInput = "";
- private List m_searchResults = new List();
+ private List m_searchResults = new List();
// ------------ Init and Update ------------ //
@@ -41,24 +40,17 @@ namespace Explorer
m_currentTransform = null;
CancelSearch();
+
}
public override void Update()
{
- if (Time.time - m_timeOfLastUpdate < 1f)
- {
- return;
- }
- m_timeOfLastUpdate = Time.time;
-
- var start = Time.realtimeSinceStartup;
-
if (!m_searching)
{
- m_objectList = new List();
+ m_objectList = new List();
if (m_currentTransform)
{
- var endAppend = new List();
+ var noChildren = new List();
for (int i = 0; i < m_currentTransform.childCount; i++)
{
var child = m_currentTransform.GetChild(i);
@@ -66,13 +58,13 @@ namespace Explorer
if (child)
{
if (child.childCount > 0)
- m_objectList.Add(new GameObjectCache(child.gameObject));
+ m_objectList.Add(child.gameObject);
else
- endAppend.Add(new GameObjectCache(child.gameObject));
+ noChildren.Add(child.gameObject);
}
}
- m_objectList.AddRange(endAppend);
- endAppend = null;
+ m_objectList.AddRange(noChildren);
+ noChildren = null;
}
else
{
@@ -82,11 +74,11 @@ namespace Explorer
// add objects with children first
foreach (var obj in rootObjects.Where(x => x.transform.childCount > 0))
{
- m_objectList.Add(new GameObjectCache(obj));
+ m_objectList.Add(obj);
}
foreach (var obj in rootObjects.Where(x => x.transform.childCount == 0))
{
- m_objectList.Add(new GameObjectCache(obj));
+ m_objectList.Add(obj);
}
}
}
@@ -128,8 +120,7 @@ namespace Explorer
m_currentScene = scenes[index].name;
}
}
- GUILayout.Label("" + m_currentScene + "", null); //new GUILayoutOption[] { GUILayout.Width(250) });
-
+ GUILayout.Label("" + m_currentScene + "", null);
GUILayout.EndHorizontal();
// ----- GameObject Search -----
@@ -169,13 +160,10 @@ namespace Explorer
if (m_objectList.Count > 0)
{
- var start = Time.realtimeSinceStartup;
foreach (var obj in m_objectList)
{
- //UIStyles.GameobjButton(obj, SetTransformTarget, true, MainMenu.MainRect.width - 170);
- UIStyles.FastGameobjButton(obj.RefGameObject, obj.EnabledColor, obj.Label, obj.RefGameObject.activeSelf, SetTransformTarget, true, MainMenu.MainRect.width - 170);
+ UIStyles.GameobjButton(obj, SetTransformTarget, true, MainMenu.MainRect.width - 170);
}
- var diff = Time.realtimeSinceStartup - start;
}
else
{
@@ -195,8 +183,7 @@ namespace Explorer
{
foreach (var obj in m_searchResults)
{
- //UIStyles.GameobjButton(obj, SetTransformTarget, true, MainMenu.MainRect.width - 170);
- UIStyles.FastGameobjButton(obj.RefGameObject, obj.EnabledColor, obj.Label, obj.RefGameObject.activeSelf, SetTransformTarget, true, MainMenu.MainRect.width - 170);
+ UIStyles.GameobjButton(obj, SetTransformTarget, true, MainMenu.MainRect.width - 170);
}
}
else
@@ -244,54 +231,19 @@ namespace Explorer
m_searching = false;
}
- public List SearchSceneObjects(string _search)
+ public List SearchSceneObjects(string _search)
{
- var matches = new List();
+ var matches = new List();
foreach (var obj in Resources.FindObjectsOfTypeAll())
{
if (obj.name.ToLower().Contains(_search.ToLower()) && obj.scene.name == m_currentScene)
{
- matches.Add(new GameObjectCache(obj));
+ matches.Add(obj);
}
}
return matches;
}
-
- public class GameObjectCache
- {
- public GameObject RefGameObject;
- public string Label;
- public Color EnabledColor;
- public int ChildCount;
-
- public GameObjectCache(GameObject obj)
- {
- RefGameObject = obj;
- ChildCount = obj.transform.childCount;
-
- Label = (ChildCount > 0) ? "[" + obj.transform.childCount + " children] " : "";
- Label += obj.name;
-
- bool enabled = obj.activeSelf;
- int childCount = obj.transform.childCount;
- if (enabled)
- {
- if (childCount > 0)
- {
- EnabledColor = Color.green;
- }
- else
- {
- EnabledColor = UIStyles.LightGreen;
- }
- }
- else
- {
- EnabledColor = Color.red;
- }
- }
- }
}
}
diff --git a/src_2018/MainMenu/Pages/SearchPage.cs b/src_2018/MainMenu/Pages/SearchPage.cs
index 3bbd0a1..603de38 100644
--- a/src_2018/MainMenu/Pages/SearchPage.cs
+++ b/src_2018/MainMenu/Pages/SearchPage.cs
@@ -44,7 +44,7 @@ namespace Explorer
private List m_searchResults = new List();
private Vector2 resultsScroll = Vector2.zero;
- public override void Init()
+ public override void Init()
{
Instance = this;
}
@@ -54,7 +54,7 @@ namespace Explorer
m_searchResults.Clear();
}
- public override void Update()
+ public override void Update()
{
}
@@ -91,8 +91,7 @@ namespace Explorer
{
var obj = m_searchResults[i];
- bool _ = false;
- UIStyles.DrawValue(ref obj, _temprect, ref _);
+ UIStyles.DrawValue(ref obj, _temprect);
}
}
else
@@ -148,14 +147,14 @@ namespace Explorer
{
GUILayout.BeginHorizontal(null);
GUI.skin.label.alignment = TextAnchor.MiddleRight;
- GUILayout.Label("Custom Class:", new GUILayoutOption[] { GUILayout.Width(250) });
+ GUILayout.Label("Custom Class:", new GUILayoutOption[] { GUILayout.Width(250) });
GUI.skin.label.alignment = TextAnchor.UpperLeft;
- m_typeInput = GUILayout.TextField(m_typeInput, new GUILayoutOption[] { GUILayout.Width(250) });
+ m_typeInput = GUILayout.TextField(m_typeInput, new GUILayoutOption[] { GUILayout.Width(250) });
GUILayout.EndHorizontal();
}
GUILayout.BeginHorizontal(null);
- GUILayout.Label("Scene Filter:", new GUILayoutOption[] { GUILayout.Width(100) });
+ GUILayout.Label("Scene Filter:", new GUILayoutOption[] { GUILayout.Width(100) });
SceneFilterToggle(SceneFilter.Any, "Any", 60);
SceneFilterToggle(SceneFilter.This, "This Scene", 100);
SceneFilterToggle(SceneFilter.DontDestroy, "DontDestroyOnLoad", 140);
@@ -263,6 +262,7 @@ namespace Explorer
{
var findType = CppExplorer.GetType(_type);
type = Il2CppSystem.Type.GetType(findType.AssemblyQualifiedName);
+ MelonLogger.Log("Got type: " + type.AssemblyQualifiedName);
}
catch (Exception e)
{
@@ -372,7 +372,7 @@ namespace Explorer
if (type == typeof(GameObject) || typeof(Component).IsAssignableFrom(type))
{
var go = obj as GameObject ?? (obj as Component).gameObject;
-
+
if (go != null && go.scene.name == CppExplorer.ActiveSceneName && go.scene.name != "DontDestroyOnLoad")
{
return true;
diff --git a/src_2018/UIStyles.cs b/src_2018/UIStyles.cs
index b7b1821..a605092 100644
--- a/src_2018/UIStyles.cs
+++ b/src_2018/UIStyles.cs
@@ -5,7 +5,7 @@ using System.Linq;
using System.Reflection;
using System.Text;
using Il2CppSystem.Collections;
-//using Il2CppSystem.Reflection;
+using Il2CppSystem.Reflection;
using MelonLoader;
using UnhollowerBaseLib;
using UnityEngine;
@@ -15,8 +15,6 @@ namespace Explorer
{
public class UIStyles
{
- public static Color LightGreen = new Color(Color.green.r - 0.3f, Color.green.g - 0.3f, Color.green.b - 0.3f);
-
public static GUISkin WindowSkin
{
get
@@ -117,48 +115,42 @@ namespace Explorer
// helper for drawing a styled button for a GameObject or Transform
public static void GameobjButton(GameObject obj, Action specialInspectMethod = null, bool showSmallInspectBtn = true, float width = 380)
{
- bool children = obj.transform.childCount > 0;
-
- string label = children ? "[" + obj.transform.childCount + " children] " : "";
- label += obj.name;
-
- bool enabled = obj.activeSelf;
- int childCount = obj.transform.childCount;
- Color color;
-
- if (enabled)
- {
- if (childCount > 0)
- {
- color = Color.green;
- }
- else
- {
- color = LightGreen;
- }
- }
- else
- {
- color = Color.red;
- }
-
- FastGameobjButton(obj, color, label, obj.activeSelf, specialInspectMethod, showSmallInspectBtn, width);
- }
-
- public static void FastGameobjButton(GameObject obj, Color activeColor, string label, bool enabled, Action specialInspectMethod = null, bool showSmallInspectBtn = true, float width = 380)
- {
- if (!obj)
+ if (obj == null)
{
GUILayout.Label("null", null);
return;
}
- // ------ toggle active button ------
+ bool enabled = obj.activeSelf;
+ bool children = obj.transform.childCount > 0;
GUILayout.BeginHorizontal(null);
GUI.skin.button.alignment = TextAnchor.UpperLeft;
- GUI.color = activeColor;
+ // ------ build name ------
+
+ string label = children ? "[" + obj.transform.childCount + " children] " : "";
+ label += obj.name;
+
+ // ------ Color -------
+
+ if (enabled)
+ {
+ if (children)
+ {
+ GUI.color = Color.green;
+ }
+ else
+ {
+ GUI.color = new Color(Color.green.r - 0.3f, Color.green.g - 0.3f, Color.green.b - 0.3f);
+ }
+ }
+ else
+ {
+ GUI.color = Color.red;
+ }
+
+ // ------ toggle active button ------
enabled = GUILayout.Toggle(enabled, "", new GUILayoutOption[] { GUILayout.Width(18) });
if (obj.activeSelf != enabled)
@@ -196,114 +188,84 @@ namespace Explorer
GUILayout.EndHorizontal();
}
- public static void DrawMember(ref object value, ref bool isExpanded, MemberInfo memberInfo, Rect rect, object setTarget = null, Action setAction = null, float labelWidth = 180, bool autoSet = false)
+ public static void DrawMember(ref object value, string valueType, string memberName, Rect rect, object setTarget = null, Action setAction = null, float labelWidth = 180, bool autoSet = false)
{
- GUILayout.Label("" + memberInfo.Name + ":", new GUILayoutOption[] { GUILayout.Width(labelWidth) });
+ GUILayout.Label("" + memberName + ":", new GUILayoutOption[] { GUILayout.Width(labelWidth) });
- string valueType = "";
- bool canWrite = true;
- if (memberInfo is FieldInfo fi)
- {
- valueType = fi.FieldType.Name;
- canWrite = !(fi.IsLiteral && !fi.IsInitOnly);
- }
- else if (memberInfo is PropertyInfo pi)
- {
- valueType = pi.PropertyType.Name;
- canWrite = pi.CanWrite;
- }
-
- DrawValue(ref value, rect, ref isExpanded, valueType, (canWrite ? setTarget : null), (canWrite ? setAction : null), autoSet);
+ DrawValue(ref value, rect, valueType, memberName, setTarget, setAction, autoSet);
}
- public static void DrawValue(ref object value, Rect rect, ref bool isExpanded, string nullValueType = null, object setTarget = null, Action setAction = null, bool autoSet = false)
+ public static void DrawValue(ref object value, Rect rect, string nullValueType = null, string memberName = null, object setTarget = null, Action setAction = null, bool autoSet = false)
{
if (value == null)
{
GUILayout.Label("null (" + nullValueType + ")", null);
- return;
}
-
- var valueType = value.GetType();
- if (valueType.IsPrimitive || value.GetType() == typeof(string))
+ else
{
- DrawPrimitive(ref value, rect, setTarget, setAction);
- }
- else if (valueType == typeof(GameObject) || valueType == typeof(Transform))
- {
- GameObject go;
- if (value.GetType() == typeof(Transform))
+ var valueType = value.GetType();
+ if (valueType.IsPrimitive || value.GetType() == typeof(string))
{
- go = (value as Transform).gameObject;
+ DrawPrimitive(ref value, rect, setTarget, setAction);
}
- else
+ else if (valueType == typeof(GameObject) || valueType == typeof(Transform))
{
- go = (value as GameObject);
- }
-
- GameobjButton(go, null, false, rect.width - 250);
- }
- else if (valueType.IsEnum)
- {
- if (setAction != null)
- {
- if (GUILayout.Button("<", new GUILayoutOption[] { GUILayout.Width(25) }))
+ GameObject go;
+ if (value.GetType() == typeof(Transform))
{
- SetEnum(ref value, -1);
- setAction.Invoke(setTarget);
+ go = (value as Transform).gameObject;
}
- if (GUILayout.Button(">", new GUILayoutOption[] { GUILayout.Width(25) }))
+ else
{
- SetEnum(ref value, 1);
- setAction.Invoke(setTarget);
+ go = (value as GameObject);
}
+
+ UIStyles.GameobjButton(go, null, false, rect.width - 250);
}
-
- GUILayout.Label(value.ToString(), null);
- }
- else if (value is System.Collections.IEnumerable || ReflectionWindow.IsList(valueType))
- {
- System.Collections.IEnumerable enumerable;
-
- if (value is System.Collections.IEnumerable isEnumerable)
+ else if (valueType.IsEnum)
{
- enumerable = isEnumerable;
- }
- else
- {
- var listValueType = value.GetType().GetGenericArguments()[0];
- var listType = typeof(Il2CppSystem.Collections.Generic.List<>).MakeGenericType(new Type[] { listValueType });
- var method = listType.GetMethod("ToArray");
- enumerable = (System.Collections.IEnumerable)method.Invoke(value, new object[0]);
- }
-
- int count = enumerable.Cast().Count();
-
- if (!isExpanded)
- {
- if (GUILayout.Button("v", new GUILayoutOption[] { GUILayout.Width(25) }))
+ if (setAction != null)
{
- isExpanded = true;
+ if (GUILayout.Button("<", new GUILayoutOption[] { GUILayout.Width(25) }))
+ {
+ SetEnum(ref value, -1);
+ setAction.Invoke(setTarget);
+ }
+ if (GUILayout.Button(">", new GUILayoutOption[] { GUILayout.Width(25) }))
+ {
+ SetEnum(ref value, 1);
+ setAction.Invoke(setTarget);
+ }
}
+
+ GUILayout.Label(value.ToString(), null);
}
- else
+ else if (value is System.Collections.IEnumerable || ReflectionWindow.IsList(valueType))
{
- if (GUILayout.Button("^", new GUILayoutOption[] { GUILayout.Width(25) }))
+ System.Collections.IEnumerable enumerable;
+
+ if (value is System.Collections.IEnumerable isEnumerable)
{
- isExpanded = false;
+ enumerable = isEnumerable;
+ }
+ else
+ {
+ var listValueType = value.GetType().GetGenericArguments()[0];
+ var listType = typeof(Il2CppSystem.Collections.Generic.List<>).MakeGenericType(new Type[] { listValueType });
+ var method = listType.GetMethod("ToArray");
+ enumerable = (System.Collections.IEnumerable)method.Invoke(value, new object[0]);
}
- }
- GUI.skin.button.alignment = TextAnchor.MiddleLeft;
- string btnLabel = "[" + count + "] " + valueType + "";
- if (GUILayout.Button(btnLabel, new GUILayoutOption[] { GUILayout.MaxWidth(rect.width - 260) }))
- {
- WindowManager.InspectObject(value, out bool _);
- }
- GUI.skin.button.alignment = TextAnchor.MiddleCenter;
+ int count = enumerable.Cast().Count();
+
+ GUI.skin.button.alignment = TextAnchor.MiddleLeft;
+ string btnLabel = "[" + count + "] " + valueType + "";
+ if (GUILayout.Button(btnLabel, new GUILayoutOption[] { GUILayout.MaxWidth(rect.width - 230) }))
+ {
+ WindowManager.InspectObject(value, out bool _);
+ }
+ GUI.skin.button.alignment = TextAnchor.MiddleCenter;
- if (isExpanded)
- {
var enumerator = enumerable.GetEnumerator();
if (enumerator != null)
{
@@ -353,68 +315,49 @@ namespace Explorer
}
}
}
- }
- else
- {
- var label = value.ToString();
+ else
+ {
+ var label = value.ToString();
- if (valueType == typeof(Object))
- {
- label = (value as Object).name;
- }
- else if (value is Vector4 vec4)
- {
- label = vec4.ToString();
- }
- else if (value is Vector3 vec3)
- {
- label = vec3.ToString();
- }
- else if (value is Vector2 vec2)
- {
- label = vec2.ToString();
- }
- else if (value is Rect rec)
- {
- label = rec.ToString();
- }
- else if (value is Matrix4x4 matrix)
- {
- label = matrix.ToString();
- }
- else if (value is Color col)
- {
- label = col.ToString();
- }
+ if (valueType == typeof(Object))
+ {
+ label = (value as Object).name;
+ }
+ else if (value is Vector4 vec4)
+ {
+ label = vec4.ToString();
+ }
+ else if (value is Vector3 vec3)
+ {
+ label = vec3.ToString();
+ }
+ else if (value is Vector2 vec2)
+ {
+ label = vec2.ToString();
+ }
+ else if (value is Rect rec)
+ {
+ label = rec.ToString();
+ }
+ else if (value is Matrix4x4 matrix)
+ {
+ label = matrix.ToString();
+ }
+ else if (value is Color col)
+ {
+ label = col.ToString();
+ }
- GUI.skin.button.alignment = TextAnchor.MiddleLeft;
- if (GUILayout.Button("" + label + "", new GUILayoutOption[] { GUILayout.MaxWidth(rect.width - 230) }))
- {
- WindowManager.InspectObject(value, out bool _);
+ GUI.skin.button.alignment = TextAnchor.MiddleLeft;
+ if (GUILayout.Button("" + label + "", new GUILayoutOption[] { GUILayout.MaxWidth(rect.width - 230) }))
+ {
+ WindowManager.InspectObject(value, out bool _);
+ }
+ GUI.skin.button.alignment = TextAnchor.MiddleCenter;
}
- GUI.skin.button.alignment = TextAnchor.MiddleCenter;
}
}
- //public static void DrawMember(ref object value, string valueType, string memberName, Rect rect, object setTarget = null, Action setAction = null, float labelWidth = 180, bool autoSet = false)
- //{
- // GUILayout.Label("" + memberName + ":", new GUILayoutOption[] { GUILayout.Width(labelWidth) });
-
- // DrawValue(ref value, rect, valueType, memberName, setTarget, setAction, autoSet);
- //}
-
- //public static void DrawValue(ref object value, Rect rect, string nullValueType = null, string memberName = null, object setTarget = null, Action setAction = null, bool autoSet = false)
- //{
- // if (value == null)
- // {
- // GUILayout.Label("null (" + nullValueType + ")", null);
- // }
- // else
- // {
-
- // }
- //}
-
// Helper for drawing primitive values (with Apply button)
public static void DrawPrimitive(ref object value, Rect m_rect, object setTarget = null, Action setAction = null, bool autoSet = false)
@@ -444,10 +387,10 @@ namespace Explorer
}
else
{
- value = GUILayout.TextField(value.ToString(), new GUILayoutOption[] { GUILayout.MaxWidth(m_rect.width - 260) });
+ value = GUILayout.TextField(value.ToString(), new GUILayoutOption[] { GUILayout.MaxWidth(m_rect.width - 260) });
}
- if (autoSet || (allowSet && GUILayout.Button("Apply", new GUILayoutOption[] { GUILayout.Width(60) })))
+ if (autoSet || (allowSet && GUILayout.Button("Apply", new GUILayoutOption[] { GUILayout.Width(60) })))
{
setAction.Invoke(setTarget);
}
diff --git a/src_2018/WindowManager.cs b/src_2018/WindowManager.cs
index 547b44a..5878065 100644
--- a/src_2018/WindowManager.cs
+++ b/src_2018/WindowManager.cs
@@ -142,11 +142,11 @@ namespace Explorer
// ============= Resize Window Helper ============
- //static readonly GUIContent gcDrag = new GUIContent("<->");
+ static readonly GUIContent gcDrag = new GUIContent("<->");
- //private static bool isResizing = false;
- //private static Rect m_currentResize;
- //private static int m_currentWindow;
+ private static bool isResizing = false;
+ private static Rect m_currentResize;
+ private static int m_currentWindow;
public static Rect ResizeWindow(Rect _rect, int ID)
{