Register mouse previous position
This commit is contained in:
parent
b188008a1c
commit
0b8e0f05a7
1 changed files with 31 additions and 27 deletions
58
src/core.c
58
src/core.c
|
@ -430,9 +430,10 @@ typedef struct CoreData {
|
|||
#endif
|
||||
} Keyboard;
|
||||
struct {
|
||||
Vector2 position; // Mouse position on screen
|
||||
Vector2 offset; // Mouse offset
|
||||
Vector2 scale; // Mouse scaling
|
||||
Vector2 currentPosition; // Mouse position on screen
|
||||
Vector2 previousPosition; // Previous mouse position
|
||||
|
||||
int cursor; // Tracks current mouse cursor
|
||||
bool cursorHidden; // Track if cursor is hidden
|
||||
|
@ -796,8 +797,8 @@ void InitWindow(int width, int height, const char *title)
|
|||
emscripten_set_gamepaddisconnected_callback(NULL, 1, EmscriptenGamepadCallback);
|
||||
#endif
|
||||
|
||||
CORE.Input.Mouse.position.x = (float)CORE.Window.screen.width/2.0f;
|
||||
CORE.Input.Mouse.position.y = (float)CORE.Window.screen.height/2.0f;
|
||||
CORE.Input.Mouse.currentPosition.x = (float)CORE.Window.screen.width/2.0f;
|
||||
CORE.Input.Mouse.currentPosition.y = (float)CORE.Window.screen.height/2.0f;
|
||||
#endif // PLATFORM_ANDROID
|
||||
}
|
||||
|
||||
|
@ -1849,7 +1850,7 @@ void EndDrawing(void)
|
|||
// we draw a small rectangle for user reference
|
||||
if (!CORE.Input.Mouse.cursorHidden)
|
||||
{
|
||||
DrawRectangle(CORE.Input.Mouse.position.x, CORE.Input.Mouse.position.y, 3, 3, MAROON);
|
||||
DrawRectangle(CORE.Input.Mouse.currentPosition.x, CORE.Input.Mouse.currentPosition.y, 3, 3, MAROON);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -3363,7 +3364,7 @@ int GetMouseX(void)
|
|||
#if defined(PLATFORM_ANDROID)
|
||||
return (int)CORE.Input.Touch.position[0].x;
|
||||
#else
|
||||
return (int)((CORE.Input.Mouse.position.x + CORE.Input.Mouse.offset.x)*CORE.Input.Mouse.scale.x);
|
||||
return (int)((CORE.Input.Mouse.currentPosition.x + CORE.Input.Mouse.offset.x)*CORE.Input.Mouse.scale.x);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -3373,7 +3374,7 @@ int GetMouseY(void)
|
|||
#if defined(PLATFORM_ANDROID)
|
||||
return (int)CORE.Input.Touch.position[0].y;
|
||||
#else
|
||||
return (int)((CORE.Input.Mouse.position.y + CORE.Input.Mouse.offset.y)*CORE.Input.Mouse.scale.y);
|
||||
return (int)((CORE.Input.Mouse.currentPosition.y + CORE.Input.Mouse.offset.y)*CORE.Input.Mouse.scale.y);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -3385,8 +3386,8 @@ Vector2 GetMousePosition(void)
|
|||
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB)
|
||||
position = GetTouchPosition(0);
|
||||
#else
|
||||
position.x = (CORE.Input.Mouse.position.x + CORE.Input.Mouse.offset.x)*CORE.Input.Mouse.scale.x;
|
||||
position.y = (CORE.Input.Mouse.position.y + CORE.Input.Mouse.offset.y)*CORE.Input.Mouse.scale.y;
|
||||
position.x = (CORE.Input.Mouse.currentPosition.x + CORE.Input.Mouse.offset.x)*CORE.Input.Mouse.scale.x;
|
||||
position.y = (CORE.Input.Mouse.currentPosition.y + CORE.Input.Mouse.offset.y)*CORE.Input.Mouse.scale.y;
|
||||
#endif
|
||||
|
||||
return position;
|
||||
|
@ -3395,10 +3396,10 @@ Vector2 GetMousePosition(void)
|
|||
// Set mouse position XY
|
||||
void SetMousePosition(int x, int y)
|
||||
{
|
||||
CORE.Input.Mouse.position = (Vector2){ (float)x, (float)y };
|
||||
CORE.Input.Mouse.currentPosition = (Vector2){ (float)x, (float)y };
|
||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||
// NOTE: emscripten not implemented
|
||||
glfwSetCursorPos(CORE.Window.handle, CORE.Input.Mouse.position.x, CORE.Input.Mouse.position.y);
|
||||
glfwSetCursorPos(CORE.Window.handle, CORE.Input.Mouse.currentPosition.x, CORE.Input.Mouse.currentPosition.y);
|
||||
#endif
|
||||
#if defined(PLATFORM_UWP)
|
||||
UWPGetMouseSetPosFunc()(x, y);
|
||||
|
@ -4665,6 +4666,9 @@ static void PollInputEvents(void)
|
|||
// Register previous mouse wheel state
|
||||
CORE.Input.Mouse.previousWheelMove = CORE.Input.Mouse.currentWheelMove;
|
||||
CORE.Input.Mouse.currentWheelMove = 0.0f;
|
||||
|
||||
// Register previous mouse position
|
||||
CORE.Input.Mouse.previousPosition = CORE.Input.Mouse.currentPosition;
|
||||
#endif
|
||||
|
||||
// Register previous touch states
|
||||
|
@ -5109,9 +5113,9 @@ static void MouseButtonCallback(GLFWwindow *window, int button, int action, int
|
|||
// GLFW3 Cursor Position Callback, runs on mouse move
|
||||
static void MouseCursorPosCallback(GLFWwindow *window, double x, double y)
|
||||
{
|
||||
CORE.Input.Mouse.position.x = (float)x;
|
||||
CORE.Input.Mouse.position.y = (float)y;
|
||||
CORE.Input.Touch.position[0] = CORE.Input.Mouse.position;
|
||||
CORE.Input.Mouse.currentPosition.x = (float)x;
|
||||
CORE.Input.Mouse.currentPosition.y = (float)y;
|
||||
CORE.Input.Touch.position[0] = CORE.Input.Mouse.currentPosition;
|
||||
|
||||
#if defined(SUPPORT_GESTURES_SYSTEM) && defined(SUPPORT_MOUSE_GESTURES)
|
||||
// Process mouse events as touches to be able to use mouse-gestures
|
||||
|
@ -5999,8 +6003,8 @@ static void *EventThread(void *arg)
|
|||
{
|
||||
if (event.code == REL_X)
|
||||
{
|
||||
CORE.Input.Mouse.position.x += event.value;
|
||||
CORE.Input.Touch.position[0].x = CORE.Input.Mouse.position.x;
|
||||
CORE.Input.Mouse.currentPosition.x += event.value;
|
||||
CORE.Input.Touch.position[0].x = CORE.Input.Mouse.currentPosition.x;
|
||||
|
||||
#if defined(SUPPORT_GESTURES_SYSTEM)
|
||||
touchAction = TOUCH_MOVE;
|
||||
|
@ -6010,8 +6014,8 @@ static void *EventThread(void *arg)
|
|||
|
||||
if (event.code == REL_Y)
|
||||
{
|
||||
CORE.Input.Mouse.position.y += event.value;
|
||||
CORE.Input.Touch.position[0].y = CORE.Input.Mouse.position.y;
|
||||
CORE.Input.Mouse.currentPosition.y += event.value;
|
||||
CORE.Input.Touch.position[0].y = CORE.Input.Mouse.currentPosition.y;
|
||||
|
||||
#if defined(SUPPORT_GESTURES_SYSTEM)
|
||||
touchAction = TOUCH_MOVE;
|
||||
|
@ -6028,7 +6032,7 @@ static void *EventThread(void *arg)
|
|||
// Basic movement
|
||||
if (event.code == ABS_X)
|
||||
{
|
||||
CORE.Input.Mouse.position.x = (event.value - worker->absRange.x)*CORE.Window.screen.width/worker->absRange.width; // Scale acording to absRange
|
||||
CORE.Input.Mouse.currentPosition.x = (event.value - worker->absRange.x)*CORE.Window.screen.width/worker->absRange.width; // Scale acording to absRange
|
||||
CORE.Input.Touch.position[0].x = (event.value - worker->absRange.x)*CORE.Window.screen.width/worker->absRange.width; // Scale acording to absRange
|
||||
|
||||
#if defined(SUPPORT_GESTURES_SYSTEM)
|
||||
|
@ -6039,7 +6043,7 @@ static void *EventThread(void *arg)
|
|||
|
||||
if (event.code == ABS_Y)
|
||||
{
|
||||
CORE.Input.Mouse.position.y = (event.value - worker->absRange.y)*CORE.Window.screen.height/worker->absRange.height; // Scale acording to absRange
|
||||
CORE.Input.Mouse.currentPosition.y = (event.value - worker->absRange.y)*CORE.Window.screen.height/worker->absRange.height; // Scale acording to absRange
|
||||
CORE.Input.Touch.position[0].y = (event.value - worker->absRange.y)*CORE.Window.screen.height/worker->absRange.height; // Scale acording to absRange
|
||||
|
||||
#if defined(SUPPORT_GESTURES_SYSTEM)
|
||||
|
@ -6125,11 +6129,11 @@ static void *EventThread(void *arg)
|
|||
// Screen confinement
|
||||
if (!CORE.Input.Mouse.cursorHidden)
|
||||
{
|
||||
if (CORE.Input.Mouse.position.x < 0) CORE.Input.Mouse.position.x = 0;
|
||||
if (CORE.Input.Mouse.position.x > CORE.Window.screen.width/CORE.Input.Mouse.scale.x) CORE.Input.Mouse.position.x = CORE.Window.screen.width/CORE.Input.Mouse.scale.x;
|
||||
if (CORE.Input.Mouse.currentPosition.x < 0) CORE.Input.Mouse.currentPosition.x = 0;
|
||||
if (CORE.Input.Mouse.currentPosition.x > CORE.Window.screen.width/CORE.Input.Mouse.scale.x) CORE.Input.Mouse.currentPosition.x = CORE.Window.screen.width/CORE.Input.Mouse.scale.x;
|
||||
|
||||
if (CORE.Input.Mouse.position.y < 0) CORE.Input.Mouse.position.y = 0;
|
||||
if (CORE.Input.Mouse.position.y > CORE.Window.screen.height/CORE.Input.Mouse.scale.y) CORE.Input.Mouse.position.y = CORE.Window.screen.height/CORE.Input.Mouse.scale.y;
|
||||
if (CORE.Input.Mouse.currentPosition.y < 0) CORE.Input.Mouse.currentPosition.y = 0;
|
||||
if (CORE.Input.Mouse.currentPosition.y > CORE.Window.screen.height/CORE.Input.Mouse.scale.y) CORE.Input.Mouse.currentPosition.y = CORE.Window.screen.height/CORE.Input.Mouse.scale.y;
|
||||
}
|
||||
|
||||
// Gesture update
|
||||
|
@ -6408,9 +6412,9 @@ void UWPMouseButtonEvent(int button, bool down)
|
|||
|
||||
void UWPMousePosEvent(double x, double y)
|
||||
{
|
||||
CORE.Input.Mouse.position.x = (float)x;
|
||||
CORE.Input.Mouse.position.y = (float)y;
|
||||
CORE.Input.Touch.position[0] = CORE.Input.Mouse.position;
|
||||
CORE.Input.Mouse.currentPosition.x = (float)x;
|
||||
CORE.Input.Mouse.currentPosition.y = (float)y;
|
||||
CORE.Input.Touch.position[0] = CORE.Input.Mouse.currentPosition;
|
||||
|
||||
#if defined(SUPPORT_GESTURES_SYSTEM) && defined(SUPPORT_MOUSE_GESTURES)
|
||||
// Process mouse events as touches to be able to use mouse-gestures
|
||||
|
@ -6425,7 +6429,7 @@ void UWPMousePosEvent(double x, double y)
|
|||
gestureEvent.pointCount = 1;
|
||||
|
||||
// Register touch points position, only one point registered
|
||||
gestureEvent.position[0] = CORE.Input.Mouse.position;
|
||||
gestureEvent.position[0] = CORE.Input.Mouse.currentPosition;
|
||||
|
||||
// Normalize gestureEvent.position[0] for CORE.Window.screen.width and CORE.Window.screen.height
|
||||
gestureEvent.position[0].x /= (float)GetScreenWidth();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue