Skip to content

Commit ed79216

Browse files
committed
partially working ViewClickedNodeInDebugger functionality
1 parent 93dbf04 commit ed79216

File tree

3 files changed

+108
-7
lines changed

3 files changed

+108
-7
lines changed

Intersect.Client.Core/Core/Input.cs

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
namespace Intersect.Client.Core;
1919

20+
public delegate bool MouseButtonEventInterceptor(Keys modifier, MouseButton mouseButton);
21+
2022
public static partial class Input
2123
{
2224
public delegate void HandleKeyEvent(Keys modifier, Keys key);
@@ -357,10 +359,30 @@ public static void OnKeyReleased(Keys modifier, Keys key)
357359
}
358360
}
359361

360-
public static void OnMouseDown(Keys modifier, MouseButton btn)
362+
public static event MouseButtonEventInterceptor? MouseDownIntercept;
363+
364+
public static event MouseButtonEventInterceptor? MouseUpIntercept;
365+
366+
private static bool InvokeMouseButtonInterceptors(
367+
MulticastDelegate? multicastDelegate,
368+
Keys modifier,
369+
MouseButton mouseButton
370+
)
361371
{
372+
var rawInvocationList = multicastDelegate?.GetInvocationList() ?? [];
373+
var invocationList = rawInvocationList.OfType<MouseButtonEventInterceptor>().ToArray();
374+
return invocationList.Any(interceptor => interceptor(modifier, mouseButton));
375+
}
376+
377+
public static void OnMouseDown(Keys modifier, MouseButton mouseButton)
378+
{
379+
if (InvokeMouseButtonInterceptors(MouseDownIntercept, modifier, mouseButton))
380+
{
381+
return;
382+
}
383+
362384
var key = Keys.None;
363-
switch (btn)
385+
switch (mouseButton)
364386
{
365387
case MouseButton.Left:
366388
key = Keys.LButton;
@@ -407,7 +429,7 @@ public static void OnMouseDown(Keys modifier, MouseButton btn)
407429
return;
408430
}
409431

410-
if (modifier == Keys.None && btn == MouseButton.Left && Globals.Me.TryTarget())
432+
if (modifier == Keys.None && mouseButton == MouseButton.Left && Globals.Me.TryTarget())
411433
{
412434
return;
413435
}
@@ -441,10 +463,15 @@ public static void OnMouseDown(Keys modifier, MouseButton btn)
441463
}
442464
}
443465

444-
public static void OnMouseUp(Keys modifier, MouseButton btn)
466+
public static void OnMouseUp(Keys modifier, MouseButton mouseButton)
445467
{
468+
if (InvokeMouseButtonInterceptors(MouseUpIntercept, modifier, mouseButton))
469+
{
470+
return;
471+
}
472+
446473
var key = Keys.LButton;
447-
switch (btn)
474+
switch (mouseButton)
448475
{
449476
case MouseButton.Right:
450477
key = Keys.RButton;
@@ -486,7 +513,7 @@ public static void OnMouseUp(Keys modifier, MouseButton btn)
486513
return;
487514
}
488515

489-
if (btn != MouseButton.Right)
516+
if (mouseButton != MouseButton.Right)
490517
{
491518
return;
492519
}

Intersect.Client.Core/Interface/Debugging/DebugWindow.cs

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1+
using System.Diagnostics;
12
using Intersect.Async;
23
using Intersect.Client.Core;
34
using Intersect.Client.Framework.Content;
5+
using Intersect.Client.Framework.GenericClasses;
46
using Intersect.Client.Framework.Graphics;
57
using Intersect.Client.Framework.Gwen;
68
using Intersect.Client.Framework.Gwen.Control;
79
using Intersect.Client.Framework.Gwen.Control.Data;
810
using Intersect.Client.Framework.Gwen.Control.Layout;
911
using Intersect.Client.Framework.Gwen.Control.Utility;
12+
using Intersect.Client.Framework.Input;
1013
using Intersect.Client.General;
1114
using Intersect.Client.Localization;
1215
using Intersect.Client.Maps;
@@ -21,6 +24,7 @@ internal sealed partial class DebugWindow : Window
2124
private readonly GameFont? _defaultFont;
2225
private bool _wasParentDrawDebugOutlinesEnabled;
2326
private bool _drawDebugOutlinesEnabled;
27+
private bool _viewClickedNodeInDebugger;
2428
private ComponentStateFilters _componentStateFilters = ComponentStateFilters.IncludeMouseInputDisabled;
2529

2630
public DebugWindow(Base parent) : base(parent, Strings.Debug.Title, false, nameof(DebugWindow))
@@ -42,6 +46,7 @@ public DebugWindow(Base parent) : base(parent, Strings.Debug.Title, false, nameo
4246
CheckboxDrawDebugOutlines = CreateInfoCheckboxDrawDebugOutlines(TabInfo.Page);
4347
CheckboxEnableLayoutHotReloading = CreateInfoCheckboxEnableLayoutHotReloading(TabInfo.Page);
4448
CheckboxIncludeTextNodesInHover = CreateInfoCheckboxIncludeTextNodesInHover(TabInfo.Page);
49+
CheckboxViewClickedComponentInDebugger = CreateInfoCheckboxViewClickedNodeInDebugger(TabInfo.Page);
4550
ButtonShutdownServer = CreateInfoButtonShutdownServer(TabInfo.Page);
4651
ButtonShutdownServerAndExit = CreateInfoButtonShutdownServerAndExit(TabInfo.Page);
4752
TableDebugStats = CreateInfoTableDebugStats(TabInfo.Page);
@@ -147,6 +152,8 @@ private Button CreateAssetsButtonReloadAsset(Table table, SearchableTree assetLi
147152

148153
private LabeledCheckBox CheckboxIncludeTextNodesInHover { get; }
149154

155+
private LabeledCheckBox CheckboxViewClickedComponentInDebugger { get; }
156+
150157
private Button ButtonShutdownServer { get; }
151158

152159
private Button ButtonShutdownServerAndExit { get; }
@@ -273,6 +280,68 @@ private LabeledCheckBox CreateInfoCheckboxIncludeTextNodesInHover(Base parent)
273280
return checkbox;
274281
}
275282

283+
private LabeledCheckBox CreateInfoCheckboxViewClickedNodeInDebugger(Base parent)
284+
{
285+
var checkbox = new LabeledCheckBox(parent, nameof(CheckboxViewClickedComponentInDebugger))
286+
{
287+
Dock = Pos.Top,
288+
Font = _defaultFont,
289+
IsChecked = _viewClickedNodeInDebugger,
290+
Text = Strings.Debug.ViewClickedNodeInDebugger,
291+
};
292+
293+
checkbox.CheckChanged += (_, _) =>
294+
{
295+
_viewClickedNodeInDebugger = !_viewClickedNodeInDebugger;
296+
if (_viewClickedNodeInDebugger)
297+
{
298+
AddIntercepts();
299+
}
300+
else
301+
{
302+
RemoveIntercepts();
303+
}
304+
};
305+
306+
return checkbox;
307+
}
308+
309+
private void AddIntercepts()
310+
{
311+
Input.MouseDownIntercept += MouseDownIntercept;
312+
Input.MouseUpIntercept += MouseUpIntercept;
313+
}
314+
315+
private void RemoveIntercepts()
316+
{
317+
Input.MouseDownIntercept -= MouseDownIntercept;
318+
Input.MouseUpIntercept -= MouseUpIntercept;
319+
}
320+
321+
private bool MouseDownIntercept(Keys modifier, MouseButton mouseButton)
322+
{
323+
if (IsVisible && _viewClickedNodeInDebugger)
324+
{
325+
return true;
326+
}
327+
328+
RemoveIntercepts();
329+
return false;
330+
}
331+
332+
private bool MouseUpIntercept(Keys modifier, MouseButton mouseButton)
333+
{
334+
if (!IsVisible || !_viewClickedNodeInDebugger)
335+
{
336+
RemoveIntercepts();
337+
return false;
338+
}
339+
340+
var node = GetNodeUnderCursor();
341+
Debugger.Break();
342+
return true;
343+
}
344+
276345
private Button CreateInfoButtonShutdownServer(Base parent)
277346
{
278347
var button = new Button(parent, nameof(ButtonShutdownServer))
@@ -452,6 +521,8 @@ private Table CreateInfoTableDebugStats(Base parent)
452521
return table;
453522
}
454523

524+
private Base? GetNodeUnderCursor() => Interface.FindComponentUnderCursor(_componentStateFilters);
525+
455526
private partial class ControlUnderCursorProvider : ITableDataProvider
456527
{
457528
private readonly DebugWindow _owner;
@@ -494,7 +565,7 @@ private async Task WaitForOwnerVisible(CancellationToken cancellationToken)
494565
cancellationToken.ThrowIfCancellationRequested();
495566
}
496567

497-
private Base? CreateValue(Task _) => Interface.FindComponentUnderCursor(_owner._componentStateFilters);
568+
private Base? CreateValue(Task _) => _owner.GetNodeUnderCursor();
498569

499570
private void HandleValue(Base? component)
500571
{

Intersect.Client.Core/Localization/Strings.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -942,6 +942,9 @@ public partial struct Debug
942942
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
943943
public static LocalizedString IncludeTextNodesInHover = @"Include Text Nodes in Hover";
944944

945+
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
946+
public static LocalizedString ViewClickedNodeInDebugger = @"View Clicked Node in Debugger";
947+
945948
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
946949
public static LocalizedString EntitiesDrawn = @"Entities Drawn";
947950

0 commit comments

Comments
 (0)