refactor: extract shared MouseCapture helper

This commit is contained in:
2026-08-22 19:39:52 +02:00
parent 9f742f396f
commit 4f57c77b7b
4 changed files with 48 additions and 12 deletions
+3 -9
View File
@@ -1,3 +1,4 @@
using Game.Godot;
using Game.Godot.Mappings;
using Godot;
@@ -5,23 +6,16 @@ namespace Game.Godot.Bootstrap;
public partial class GameBootstrap : Node
{
private static void ToggleMouseCapture()
{
Input.MouseMode = Input.MouseMode == Input.MouseModeEnum.Captured
? Input.MouseModeEnum.Visible
: Input.MouseModeEnum.Captured;
}
public override void _Ready()
{
Input.MouseMode = Input.MouseModeEnum.Captured;
MouseCapture.Capture();
}
public override void _UnhandledInput(InputEvent @event)
{
if (@event.IsActionPressed(InputAction.Cancel.ActionName()))
{
ToggleMouseCapture();
MouseCapture.Toggle();
}
}
}
+42
View File
@@ -0,0 +1,42 @@
using Godot;
namespace Game.Godot;
public static class MouseCapture
{
public static bool IsCaptured => Input.MouseMode == Input.MouseModeEnum.Captured;
public static void Capture() => Input.MouseMode = Input.MouseModeEnum.Captured;
public static void Release() => Input.MouseMode = Input.MouseModeEnum.Visible;
public static void Toggle()
{
if (IsCaptured)
{
Release();
}
else
{
Capture();
}
}
public static Memento SaveCaptureMode()
{
Memento memento = new(IsCaptured);
Release();
return memento;
}
public sealed class Memento(bool wasCaptured)
{
public void RestoreCaptureMode()
{
if (wasCaptured)
{
Capture();
}
}
}
}
+1
View File
@@ -0,0 +1 @@
uid://dab3etxieot78