diff options
Diffstat (limited to 'src/input.c')
| -rw-r--r-- | src/input.c | 25 |
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); + } + } } } |
