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.
///