From 6969b5d88c8dbcbdc54de5ae23ccb6395e1e7948 Mon Sep 17 00:00:00 2001 From: Aaditya Dhruv Date: Wed, 28 Jan 2026 17:43:29 -0600 Subject: Add mouse-based movement to camera Can use WASD + Mouse to fly around the scene --- src/input.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src/input.c') diff --git a/src/input.c b/src/input.c index 54ae199..be240be 100644 --- a/src/input.c +++ b/src/input.c @@ -3,6 +3,8 @@ #include "cglm/types.h" #include "pthread.h" #include +#include +#include pthread_t input_init(struct engine* engine) { pthread_t thread; @@ -14,6 +16,7 @@ void input_join(pthread_t thread, struct engine* engine) { } void input_handle(struct engine *engine) { SDL_Event event; + SDL_SetRelativeMouseMode(SDL_TRUE); while (engine->game_loop) { // Quit game // TODO: Locks? @@ -23,27 +26,33 @@ void input_handle(struct engine *engine) { } if (event.type == SDL_KEYDOWN) { SDL_KeyboardEvent key = event.key; - vec3 ahead = { 0.0f, 0.0f, -1.0f }; - vec3 behind = { 0.0f, 0.0f, 1.0f }; - vec3 left = { -1.0f, 0.0f, 0.0f }; - vec3 right = { 1.0f, 0.0f, 0.0f }; switch (key.keysym.sym) { case SDLK_w: - camera_move(engine->camera, ahead); + camera_move(engine->camera, FORWARD); break; case SDLK_a: - camera_move(engine->camera, left); + camera_move(engine->camera, LEFT); break; case SDLK_s: - camera_move(engine->camera, behind); + camera_move(engine->camera, BACKWARD); break; case SDLK_d: - camera_move(engine->camera, right); + camera_move(engine->camera, RIGHT); break; case SDLK_ESCAPE: engine->game_loop = 0; break; } } + if (event.type == SDL_MOUSEMOTION) { + int x; + int y; + SDL_GetRelativeMouseState(&x, &y); + if (x != 0 || y != 0) { + fprintf(stderr, "X: %d, Y %d\n", x, y); + vec2 offset = { x, y }; + camera_rotate(engine->camera, offset); + } + } } } -- cgit