refactor: extract shared MouseCapture helper
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://dab3etxieot78
|
||||
Reference in New Issue
Block a user