From e530360ccb4b57357b72a0e36e5e9e4e77ed4c76 Mon Sep 17 00:00:00 2001
From: ManlyMarco <39247311+ManlyMarco@users.noreply.github.com>
Date: Tue, 24 Sep 2024 02:48:26 +0200
Subject: [PATCH 1/5] Initial version
---
.../Features/ContextMenu.cs | 43 +++
.../RuntimeUnityEditor.Core.projitems | 4 +
.../Windows/Breakpoints/BreakpointsWindow.cs | 295 ++++++++++++++++++
3 files changed, 342 insertions(+)
create mode 100644 RuntimeUnityEditor.Core/Windows/Breakpoints/BreakpointsWindow.cs
diff --git a/RuntimeUnityEditor.Core/Features/ContextMenu.cs b/RuntimeUnityEditor.Core/Features/ContextMenu.cs
index 2d9522a..5e87f44 100644
--- a/RuntimeUnityEditor.Core/Features/ContextMenu.cs
+++ b/RuntimeUnityEditor.Core/Features/ContextMenu.cs
@@ -3,6 +3,7 @@
using System.Linq;
using System.Reflection;
using HarmonyLib;
+using RuntimeUnityEditor.Core.Breakpoints;
using RuntimeUnityEditor.Core.ChangeHistory;
using RuntimeUnityEditor.Core.Inspector.Entries;
using RuntimeUnityEditor.Core.ObjectTree;
@@ -51,6 +52,7 @@ public override bool Enabled
///
protected override void Initialize(InitSettings initSettings)
{
+ // TODO This mess needs a rewrite with a sane API
MenuContents.AddRange(new[]
{
new MenuEntry("! Destroyed unity Object !", obj => obj is UnityEngine.Object uobj && !uobj, null),
@@ -75,7 +77,12 @@ protected override void Initialize(InitSettings initSettings)
new MenuEntry("Send to REPL", o => o != null && REPL.ReplWindow.Initialized, o => REPL.ReplWindow.Instance.IngestObject(o)),
new MenuEntry(),
+ });
+
+ AddBreakpointControls(MenuContents);
+ MenuContents.AddRange(new[]
+ {
new MenuEntry("Copy to clipboard", o => o != null && Clipboard.ClipboardWindow.Initialized, o =>
{
if (Clipboard.ClipboardWindow.Contents.LastOrDefault() != o)
@@ -167,6 +174,42 @@ o is Sprite ||
DisplayType = FeatureDisplayType.Hidden;
}
+ private void AddBreakpointControls(List menuContents)
+ {
+ menuContents.AddRange(AddGroup("call", (o, info) => info as MethodBase));
+ menuContents.AddRange(AddGroup("getter", (o, info) => info is PropertyInfo pi ? pi.GetGetMethod(true) : null));
+ menuContents.AddRange(AddGroup("setter", (o, info) => info is PropertyInfo pi ? pi.GetSetMethod(true) : null));
+ menuContents.Add(new MenuEntry());
+ return;
+
+ IEnumerable AddGroup(string name, Func