summaryrefslogtreecommitdiff
path: root/src/input.c
diff options
context:
space:
mode:
authorAaditya Dhruv <[email protected]>2026-01-28 17:43:29 -0600
committerAaditya Dhruv <[email protected]>2026-01-28 17:46:03 -0600
commit6969b5d88c8dbcbdc54de5ae23ccb6395e1e7948 (patch)
treea1037bb68ff010720ca9924e8ca49a5264d18d59 /src/input.c
parent17d2d2589694030f79f2a37732d72d4e433fd745 (diff)
Add mouse-based movement to camera
Can use WASD + Mouse to fly around the scene
Diffstat (limited to 'src/input.c')
-rw-r--r--src/input.c25
1 files changed, 17 insertions, 8 deletions
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 <SDL2/SDL_events.h>
+#include <SDL2/SDL_mouse.h>
+#include <SDL2/SDL_stdinc.h>
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);
+ }
+ }
}
}