diff --git a/Examples/GameloopExamples.cs b/Examples/GameloopExamples.cs index 8f054283..263ebf79 100644 --- a/Examples/GameloopExamples.cs +++ b/Examples/GameloopExamples.cs @@ -535,9 +535,10 @@ protected override void LoadContent() contentPackAll.Clear(); } - protected override Vector2 ChangeMousePos(float dt, Vector2 mousePos, Rect screenArea) + protected override bool ChangeMousePos(float dt, Vector2 mousePos, Rect screenArea, out Vector2 newMousePos) { - if (!MouseControlEnabled) return mousePos; + newMousePos = mousePos; + if (!MouseControlEnabled) return false; if (Input.CurrentInputDeviceType == InputDeviceType.Gamepad && Input.GamepadManager.LastUsedGamepad != null && Input.GamepadManager.LastUsedGamepad.IsDown(ShapeGamepadTriggerAxis.RIGHT)) @@ -550,10 +551,14 @@ protected override Vector2 ChangeMousePos(float dt, Vector2 mousePos, Rect scree var movement = new Vector2(x, y); float l = movement.Length(); - if (l <= 0f) return mousePos; + if (l <= 0f) + { + return false; + } var dir = movement / l; - return mousePos + dir * l * speed; + newMousePos = mousePos + dir * l * speed; + return true; } if (Input.CurrentInputDeviceType == InputDeviceType.Keyboard) @@ -568,11 +573,12 @@ protected override Vector2 ChangeMousePos(float dt, Vector2 mousePos, Rect scree var movement = new Vector2(x, y); if (movement.LengthSquared() <= 0f) mouseMovementTimer = 0f; - return mousePos + movement.Normalize() * speed; + newMousePos = mousePos + movement.Normalize() * speed; + return true; } mouseMovementTimer = 0f; - return mousePos; + return false; } protected override void EndRun() diff --git a/ShapeEngine/Core/GameDef/GameGameloop.cs b/ShapeEngine/Core/GameDef/GameGameloop.cs index 2b8e1e06..bb9efb17 100644 --- a/ShapeEngine/Core/GameDef/GameGameloop.cs +++ b/ShapeEngine/Core/GameDef/GameGameloop.cs @@ -106,7 +106,10 @@ private void RunGameloop() { if (Input.CurrentInputDeviceType is InputDeviceType.Keyboard or InputDeviceType.Gamepad) { - Window.MoveMouse(ChangeMousePos(dt, Window.MousePosition, Window.ScreenArea)); + if (ChangeMousePos(dt, Window.MousePosition, Window.ScreenArea, out var newMousePos)) + { + Window.MoveMouse(newMousePos); + } } } diff --git a/ShapeEngine/Core/GameDef/GameVirtual.cs b/ShapeEngine/Core/GameDef/GameVirtual.cs index 68d48c4f..6aba7105 100644 --- a/ShapeEngine/Core/GameDef/GameVirtual.cs +++ b/ShapeEngine/Core/GameDef/GameVirtual.cs @@ -239,6 +239,9 @@ protected virtual void OnWindowTopmostChanged(bool topmost) { } + /// + /// This function will be removed in a future version. Use instead. + /// /// /// Allows modification of the mouse position before it's used for input processing. /// @@ -246,8 +249,23 @@ protected virtual void OnWindowTopmostChanged(bool topmost) /// The current mouse position. /// The screen area rectangle. /// The modified mouse position. + [Obsolete("Use ChangeMousePos(float, Vector2, Rect, out Vector2) instead.", error: false)] protected virtual Vector2 ChangeMousePos(float dt, Vector2 mousePos, Rect screenArea) => mousePos; + /// + /// Allows modification of the mouse position before it's used for input processing. + /// + /// Delta time since the last frame. + /// The current mouse position. + /// The screen area rectangle. + /// The modified mouse position. + /// Whether the mouse position was modified and should be changed. + protected virtual bool ChangeMousePos(float dt, Vector2 mousePos, Rect screenArea, out Vector2 newMousePos) + { + newMousePos = mousePos; + return false; + } + /// /// Called when an input button is pressed. ///