Fixed mouse delta issue in relative mode

Fixed a delta retrieval issue with `GetMouseDelta` when the mouse is in relative mode. Solution by @ubkp
This commit is contained in:
Le Juez Victor 2023-10-18 20:41:36 +02:00 committed by GitHub
parent 8bb71a0930
commit 931400ea81
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -63,6 +63,7 @@ typedef struct {
SDL_Joystick *gamepad; SDL_Joystick *gamepad;
SDL_Cursor *cursor; SDL_Cursor *cursor;
bool cursorRelative;
} PlatformData; } PlatformData;
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
@ -842,6 +843,7 @@ void EnableCursor(void)
SDL_SetRelativeMouseMode(SDL_FALSE); SDL_SetRelativeMouseMode(SDL_FALSE);
SDL_ShowCursor(SDL_ENABLE); SDL_ShowCursor(SDL_ENABLE);
platform.cursorRelative = false;
CORE.Input.Mouse.cursorHidden = false; CORE.Input.Mouse.cursorHidden = false;
} }
@ -850,6 +852,7 @@ void DisableCursor(void)
{ {
SDL_SetRelativeMouseMode(SDL_TRUE); SDL_SetRelativeMouseMode(SDL_TRUE);
platform.cursorRelative = true;
CORE.Input.Mouse.cursorHidden = true; CORE.Input.Mouse.cursorHidden = true;
} }
@ -924,7 +927,8 @@ void PollInputEvents(void)
CORE.Input.Mouse.currentWheelMove.y = 0; CORE.Input.Mouse.currentWheelMove.y = 0;
// Register previous mouse position // Register previous mouse position
CORE.Input.Mouse.previousPosition = CORE.Input.Mouse.currentPosition; if (platform.cursorRelative) CORE.Input.Mouse.currentPosition = (Vector2){ 0.0f, 0.0f };
else CORE.Input.Mouse.previousPosition = CORE.Input.Mouse.currentPosition;
// Reset last gamepad button/axis registered state // Reset last gamepad button/axis registered state
CORE.Input.Gamepad.lastButtonPressed = GAMEPAD_BUTTON_UNKNOWN; CORE.Input.Gamepad.lastButtonPressed = GAMEPAD_BUTTON_UNKNOWN;
@ -1021,9 +1025,18 @@ void PollInputEvents(void)
CORE.Input.Mouse.currentWheelMove.y = (float)event.wheel.y; CORE.Input.Mouse.currentWheelMove.y = (float)event.wheel.y;
} break; } break;
case SDL_MOUSEMOTION: case SDL_MOUSEMOTION:
{
if (platform.cursorRelative)
{
CORE.Input.Mouse.currentPosition.x = (float)event.motion.xrel;
CORE.Input.Mouse.currentPosition.y = (float)event.motion.yrel;
CORE.Input.Mouse.previousPosition = (Vector2){ 0.0f, 0.0f };
}
else
{ {
CORE.Input.Mouse.currentPosition.x = (float)event.motion.x; CORE.Input.Mouse.currentPosition.x = (float)event.motion.x;
CORE.Input.Mouse.currentPosition.y = (float)event.motion.y; CORE.Input.Mouse.currentPosition.y = (float)event.motion.y;
}
} break; } break;
// Check gamepad events // Check gamepad events