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
@@ -1,5 +1,6 @@
using System.Linq;
using Game.Features.Players.Domain;
using Game.Godot;
using Game.Godot.Extensions;
using Game.Godot.Mappings;
using Godot;
@@ -19,8 +20,6 @@ public partial class PlayerController : Node3D
private PlayerMovement _movement;
private PlayerLook _look;
private static bool IsMouseCaptured() => Input.MouseMode == Input.MouseModeEnum.Captured;
public override void _Ready()
{
this.AssertRequiredExports();
@@ -32,7 +31,7 @@ public partial class PlayerController : Node3D
public override void _UnhandledInput(InputEvent @event)
{
if (@event is not InputEventMouseMotion mouseMotion || !IsMouseCaptured()) return;
if (@event is not InputEventMouseMotion mouseMotion || !MouseCapture.IsCaptured) return;
Body.RotateY(_look.CalculateYawDelta(mouseMotion.Relative.X));
_look.UpdatePitch(mouseMotion.Relative.Y);
+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