mirror of
https://github.com/GrahamKracker/UnityExplorer.git
synced 2025-07-03 20:12:33 +08:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
9bb3c77bae | |||
477a6859d7 | |||
f8f9671746 | |||
dc2759c599 | |||
653b4a2304 |
35
README.md
35
README.md
@ -17,9 +17,21 @@
|
|||||||
<a href="https://github.com/sinai-dev/MonoExplorer">Looking for a Mono version?</a>
|
<a href="https://github.com/sinai-dev/MonoExplorer">Looking for a Mono version?</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
### Known issues
|
- [Known issues](#known-issues)
|
||||||
* CppExplorer may experience a `MissingMethodException` when trying to use certain UnityEngine methods. If you experience this, please open an issue and I will do my best to fix it.
|
- [How to install](#how-to-install)
|
||||||
* Reflection may fail with certain types (eg. `Nullable<T>`, some Dictionary types, etc). Please see [Il2CppAssemblyUnhollower](https://github.com/knah/Il2CppAssemblyUnhollower#known-issues) for more details.
|
- [How to use](#how-to-use)
|
||||||
|
- [Mod Config](#mod-config)
|
||||||
|
- [Features](#features)
|
||||||
|
- [Mouse Control](#mouse-control)
|
||||||
|
- [Building](#building)
|
||||||
|
- [Credits](#credits)
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
As of version 1.7+, CppExplorer has reached a fairly stable state for most Il2Cpp games.
|
||||||
|
|
||||||
|
* .NET 3.5 is not currently supported (Unity 5.6.1 and older), this might change in the future.
|
||||||
|
* Some methods may still fail with a `MissingMethodException`, please let me know if you experience this (with full MelonLoader log please).
|
||||||
|
* Reflection may fail with certain types, see [here](https://github.com/knah/Il2CppAssemblyUnhollower#known-issues) for more details.
|
||||||
* Scrolling with mouse wheel in the CppExplorer menu may not work on all games at the moment.
|
* Scrolling with mouse wheel in the CppExplorer menu may not work on all games at the moment.
|
||||||
|
|
||||||
## How to install
|
## How to install
|
||||||
@ -105,6 +117,23 @@ CppExplorer can force the mouse to be visible and unlocked when the menu is open
|
|||||||
* For Hellpoint, use [HPExplorerMouseControl](https://github.com/sinai-dev/Hellpoint-Mods/tree/master/HPExplorerMouseControl/HPExplorerMouseControl)
|
* For Hellpoint, use [HPExplorerMouseControl](https://github.com/sinai-dev/Hellpoint-Mods/tree/master/HPExplorerMouseControl/HPExplorerMouseControl)
|
||||||
* You can create your own plugin using one of the two plugins above as an example. Usually only a few simple Harmony patches are needed to fix the problem.
|
* You can create your own plugin using one of the two plugins above as an example. Usually only a few simple Harmony patches are needed to fix the problem.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
```csharp
|
||||||
|
using Explorer;
|
||||||
|
using Harmony;
|
||||||
|
// ...
|
||||||
|
[HarmonyPatch(typeof(MyGame.MenuClass), nameof(MyGame.MenuClass.CursorUpdate)]
|
||||||
|
public class MenuClass_CursorUpdate
|
||||||
|
{
|
||||||
|
[HarmonyPrefix]
|
||||||
|
public static bool Prefix()
|
||||||
|
{
|
||||||
|
// prevent method running if menu open, let it run if not.
|
||||||
|
return !CppExplorer.ShowMenu;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
If you'd like to build this yourself, everything you need (other than MelonLoader) is included with this repository, there is no need for recursive cloning etc.
|
If you'd like to build this yourself, everything you need (other than MelonLoader) is included with this repository, there is no need for recursive cloning etc.
|
||||||
|
@ -13,7 +13,7 @@ namespace Explorer
|
|||||||
public class CppExplorer : MelonMod
|
public class CppExplorer : MelonMod
|
||||||
{
|
{
|
||||||
public const string NAME = "CppExplorer";
|
public const string NAME = "CppExplorer";
|
||||||
public const string VERSION = "1.7.1";
|
public const string VERSION = "1.7.3";
|
||||||
public const string AUTHOR = "Sinai";
|
public const string AUTHOR = "Sinai";
|
||||||
public const string GUID = "com.sinai.cppexplorer";
|
public const string GUID = "com.sinai.cppexplorer";
|
||||||
|
|
||||||
|
@ -101,13 +101,13 @@
|
|||||||
<Compile Include="Extensions\UnityExtensions.cs" />
|
<Compile Include="Extensions\UnityExtensions.cs" />
|
||||||
<Compile Include="Helpers\PageHelper.cs" />
|
<Compile Include="Helpers\PageHelper.cs" />
|
||||||
<Compile Include="Helpers\ReflectionHelpers.cs" />
|
<Compile Include="Helpers\ReflectionHelpers.cs" />
|
||||||
<Compile Include="Helpers\UIHelpers.cs" />
|
<Compile Include="Menu\UIHelpers.cs" />
|
||||||
<Compile Include="Helpers\UnityHelpers.cs" />
|
<Compile Include="Helpers\UnityHelpers.cs" />
|
||||||
<Compile Include="Menu\InspectUnderMouse.cs" />
|
<Compile Include="Menu\InspectUnderMouse.cs" />
|
||||||
<Compile Include="CachedObjects\CacheObjectBase.cs" />
|
<Compile Include="CachedObjects\CacheObjectBase.cs" />
|
||||||
<Compile Include="UnstripFixes\SliderHandlerUnstrip.cs" />
|
<Compile Include="UnstripFixes\SliderHandlerUnstrip.cs" />
|
||||||
<Compile Include="UnstripFixes\UnstripExtensions.cs" />
|
<Compile Include="UnstripFixes\UnstripExtensions.cs" />
|
||||||
<Compile Include="Menu\Windows\ResizeDrag.cs" />
|
<Compile Include="Menu\ResizeDrag.cs" />
|
||||||
<Compile Include="Menu\Windows\TabViewWindow.cs" />
|
<Compile Include="Menu\Windows\TabViewWindow.cs" />
|
||||||
<Compile Include="Menu\Windows\UIWindow.cs" />
|
<Compile Include="Menu\Windows\UIWindow.cs" />
|
||||||
<Compile Include="Menu\MainMenu\Pages\ConsolePage.cs" />
|
<Compile Include="Menu\MainMenu\Pages\ConsolePage.cs" />
|
||||||
|
@ -36,26 +36,29 @@ namespace Explorer
|
|||||||
|
|
||||||
var mousePos = InputHelper.mousePosition;
|
var mousePos = InputHelper.mousePosition;
|
||||||
|
|
||||||
Vector2 mouse = GUIUtility.ScreenToGUIPoint(new Vector2(mousePos.x, Screen.height - mousePos.y));
|
try
|
||||||
|
{
|
||||||
|
var mouse = GUIUtility.ScreenToGUIPoint(new Vector2(mousePos.x, Screen.height - mousePos.y));
|
||||||
|
if (r.Contains(mouse) && InputHelper.GetMouseButtonDown(0))
|
||||||
|
{
|
||||||
|
isResizing = true;
|
||||||
|
m_currentWindow = ID;
|
||||||
|
m_currentResize = new Rect(mouse.x, mouse.y, _rect.width, _rect.height);
|
||||||
|
}
|
||||||
|
else if (!InputHelper.GetMouseButton(0))
|
||||||
|
{
|
||||||
|
isResizing = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (r.Contains(mouse) && InputHelper.GetMouseButtonDown(0))
|
if (isResizing && ID == m_currentWindow)
|
||||||
{
|
{
|
||||||
isResizing = true;
|
_rect.width = Mathf.Max(100, m_currentResize.width + (mouse.x - m_currentResize.x));
|
||||||
m_currentWindow = ID;
|
_rect.height = Mathf.Max(100, m_currentResize.height + (mouse.y - m_currentResize.y));
|
||||||
m_currentResize = new Rect(mouse.x, mouse.y, _rect.width, _rect.height);
|
_rect.xMax = Mathf.Min(Screen.width, _rect.xMax); // modifying xMax affects width, not x
|
||||||
}
|
_rect.yMax = Mathf.Min(Screen.height, _rect.yMax); // modifying yMax affects height, not y
|
||||||
else if (!InputHelper.GetMouseButton(0))
|
}
|
||||||
{
|
|
||||||
isResizing = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isResizing && ID == m_currentWindow)
|
|
||||||
{
|
|
||||||
_rect.width = Mathf.Max(100, m_currentResize.width + (mouse.x - m_currentResize.x));
|
|
||||||
_rect.height = Mathf.Max(100, m_currentResize.height + (mouse.y - m_currentResize.y));
|
|
||||||
_rect.xMax = Mathf.Min(Screen.width, _rect.xMax); // modifying xMax affects width, not x
|
|
||||||
_rect.yMax = Mathf.Min(Screen.height, _rect.yMax); // modifying yMax affects height, not y
|
|
||||||
}
|
}
|
||||||
|
catch { }
|
||||||
|
|
||||||
GUILayout.EndHorizontal();
|
GUILayout.EndHorizontal();
|
||||||
}
|
}
|
||||||
@ -68,7 +71,7 @@ namespace Explorer
|
|||||||
{
|
{
|
||||||
RESIZE_FAILED = true;
|
RESIZE_FAILED = true;
|
||||||
MelonLogger.Log("Exception on GuiResize: " + e.GetType() + ", " + e.Message);
|
MelonLogger.Log("Exception on GuiResize: " + e.GetType() + ", " + e.Message);
|
||||||
MelonLogger.Log(e.StackTrace);
|
//MelonLogger.Log(e.StackTrace);
|
||||||
return origRect;
|
return origRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,20 +85,20 @@ namespace Explorer
|
|||||||
|
|
||||||
GUI.skin.label.alignment = TextAnchor.MiddleRight;
|
GUI.skin.label.alignment = TextAnchor.MiddleRight;
|
||||||
GUILayout.Label("<color=cyan>Width:</color>", new GUILayoutOption[] { GUILayout.Width(60) });
|
GUILayout.Label("<color=cyan>Width:</color>", new GUILayoutOption[] { GUILayout.Width(60) });
|
||||||
if (GUILayout.RepeatButton("-", new GUILayoutOption[] { GUILayout.Width(20) }))
|
if (GUIUnstrip.RepeatButton("-", new GUILayoutOption[] { GUILayout.Width(20) }))
|
||||||
{
|
{
|
||||||
_rect.width -= 5f;
|
_rect.width -= 5f;
|
||||||
}
|
}
|
||||||
if (GUILayout.RepeatButton("+", new GUILayoutOption[] { GUILayout.Width(20) }))
|
if (GUIUnstrip.RepeatButton("+", new GUILayoutOption[] { GUILayout.Width(20) }))
|
||||||
{
|
{
|
||||||
_rect.width += 5f;
|
_rect.width += 5f;
|
||||||
}
|
}
|
||||||
GUILayout.Label("<color=cyan>Height:</color>", new GUILayoutOption[] { GUILayout.Width(60) });
|
GUILayout.Label("<color=cyan>Height:</color>", new GUILayoutOption[] { GUILayout.Width(60) });
|
||||||
if (GUILayout.RepeatButton("-", new GUILayoutOption[] { GUILayout.Width(20) }))
|
if (GUIUnstrip.RepeatButton("-", new GUILayoutOption[] { GUILayout.Width(20) }))
|
||||||
{
|
{
|
||||||
_rect.height -= 5f;
|
_rect.height -= 5f;
|
||||||
}
|
}
|
||||||
if (GUILayout.RepeatButton("+", new GUILayoutOption[] { GUILayout.Width(20) }))
|
if (GUIUnstrip.RepeatButton("+", new GUILayoutOption[] { GUILayout.Width(20) }))
|
||||||
{
|
{
|
||||||
_rect.height += 5f;
|
_rect.height += 5f;
|
||||||
}
|
}
|
@ -17,7 +17,7 @@ namespace Explorer
|
|||||||
|
|
||||||
public GameObject TargetGO;
|
public GameObject TargetGO;
|
||||||
|
|
||||||
private bool m_hideControls;
|
private static bool m_hideControls;
|
||||||
|
|
||||||
// gui element holders
|
// gui element holders
|
||||||
private string m_name;
|
private string m_name;
|
||||||
@ -683,11 +683,11 @@ namespace Explorer
|
|||||||
{
|
{
|
||||||
f = f2;
|
f = f2;
|
||||||
}
|
}
|
||||||
if (GUILayout.RepeatButton("-", new GUILayoutOption[] { GUILayout.Width(20) }))
|
if (GUIUnstrip.RepeatButton("-", new GUILayoutOption[] { GUILayout.Width(20) }))
|
||||||
{
|
{
|
||||||
f -= multByTime ? amount * Time.deltaTime : amount;
|
f -= multByTime ? amount * Time.deltaTime : amount;
|
||||||
}
|
}
|
||||||
if (GUILayout.RepeatButton("+", new GUILayoutOption[] { GUILayout.Width(20) }))
|
if (GUIUnstrip.RepeatButton("+", new GUILayoutOption[] { GUILayout.Width(20) }))
|
||||||
{
|
{
|
||||||
f += multByTime ? amount * Time.deltaTime : amount;
|
f += multByTime ? amount * Time.deltaTime : amount;
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,18 @@ namespace Explorer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fix for repeatbutton
|
||||||
|
|
||||||
|
static public bool RepeatButton(Texture image, params GUILayoutOption[] options) { return DoRepeatButton(GUIContent.Temp(image), GUI.skin.button, options); }
|
||||||
|
static public bool RepeatButton(string text, params GUILayoutOption[] options) { return DoRepeatButton(GUIContent.Temp(text), GUI.skin.button, options); }
|
||||||
|
static public bool RepeatButton(GUIContent content, params GUILayoutOption[] options) { return DoRepeatButton(content, GUI.skin.button, options); }
|
||||||
|
static public bool RepeatButton(Texture image, GUIStyle style, params GUILayoutOption[] options) { return DoRepeatButton(GUIContent.Temp(image), style, options); }
|
||||||
|
static public bool RepeatButton(string text, GUIStyle style, params GUILayoutOption[] options) { return DoRepeatButton(GUIContent.Temp(text), style, options); }
|
||||||
|
// Make a repeating button. The button returns true as long as the user holds down the mouse
|
||||||
|
static public bool RepeatButton(GUIContent content, GUIStyle style, params GUILayoutOption[] options) { return DoRepeatButton(content, style, options); }
|
||||||
|
static bool DoRepeatButton(GUIContent content, GUIStyle style, GUILayoutOption[] options)
|
||||||
|
{ return GUI.RepeatButton(LayoutUtilityUnstrip.GetRect(content, style, options), content, style); }
|
||||||
|
|
||||||
// Fix for BeginArea
|
// Fix for BeginArea
|
||||||
|
|
||||||
static public void BeginArea(Rect screenRect) { BeginArea(screenRect, GUIContent.none, GUIStyle.none); }
|
static public void BeginArea(Rect screenRect) { BeginArea(screenRect, GUIContent.none, GUIStyle.none); }
|
||||||
|
Reference in New Issue
Block a user