From 97af36cc8cc5697527476c7a6f2e2a7bf39b0bbc Mon Sep 17 00:00:00 2001 From: KikooDX Date: Mon, 28 Feb 2022 16:43:45 +0100 Subject: [PATCH] sdl input --- inc/lzy.h | 63 ++++++++++++++++++++++++++++++++++++------------------ src/main.c | 4 ++++ 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/inc/lzy.h b/inc/lzy.h index cd5f475..f2a522b 100644 --- a/inc/lzy.h +++ b/inc/lzy.h @@ -15,7 +15,7 @@ void LZY_DrawSetColor(uint8_t r, uint8_t g, uint8_t b); void LZY_DrawSetColorNone(void); int LZY_DrawClear(void); void LZY_CycleEvents(void); -int LZY_KeyDown(unsigned int scancode); +int LZY_KeyDown(unsigned int key); int LZY_ShouldQuit(void); void LZY_Log(const char *msg); const char *LZY_GetError(void); @@ -23,20 +23,19 @@ const char *LZY_GetError(void); #ifdef FXCG50 #include enum LZY_ScanCode { - LZY_SC_LEFT = KEY_LEFT, - LZY_SC_RIGHT = KEY_RIGHT, - LZY_SC_UP = KEY_UP, - LZY_SC_DOWN = KEY_DOWN, - LZY_SC_QUIT = KEY_EXIT, + LZYK_LEFT = KEY_LEFT, + LZYK_RIGHT = KEY_RIGHT, + LZYK_UP = KEY_UP, + LZYK_DOWN = KEY_DOWN, }; #else /* end FXCG50, begin SDL2 */ #include enum LZY_ScanCode { - LZY_SC_LEFT = SDL_SCANCODE_LEFT, - LZY_SC_RIGHT = SDL_SCANCODE_RIGHT, - LZY_SC_UP = SDL_SCANCODE_UP, - LZY_SC_DOWN = SDL_SCANCODE_DOWN, - LZY_SC_QUIT = SDL_SCANCODE_ESCAPE, + LZYK_LEFT, + LZYK_RIGHT, + LZYK_UP, + LZYK_DOWN, + LZYK_COUNT, }; #endif /* SDL2 */ #ifdef __cplusplus @@ -95,11 +94,11 @@ int LZY_DrawClear(void) { void LZY_CycleEvents(void) { clearevents(); - should_quit = should_quit || keydown(LZY_SC_QUIT); + should_quit = should_quit || keydown(KEY_EXIT); } -int LZY_KeyDown(unsigned int scancode) { - return keydown(scancode); +int LZY_KeyDown(unsigned int key) { + return keydown(key); } int LZY_ShouldQuit(void) { @@ -122,6 +121,7 @@ static const char *error = NULL; static SDL_Window *window = NULL; static SDL_Renderer *renderer = NULL; static int should_quit = 0; +static int input[LZYK_COUNT] = {0}; int LZY_Init(const char *title) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { @@ -190,6 +190,12 @@ int LZY_DrawClear(void) { } void LZY_CycleEvents(void) { + static const SDL_Scancode sc[LZYK_COUNT] = { + SDL_SCANCODE_LEFT, + SDL_SCANCODE_RIGHT, + SDL_SCANCODE_UP, + SDL_SCANCODE_DOWN, + }; SDL_Event e; while (SDL_PollEvent(&e) != 0) { @@ -197,19 +203,34 @@ void LZY_CycleEvents(void) { case SDL_QUIT: should_quit = 1; break; - case SDL_KEYDOWN: - break; - case SDL_KEYUP: - break; + case SDL_KEYDOWN: { + int i = LZYK_COUNT; + while (i-- > 0) { + if (sc[i] == e.key.keysym.scancode) { + input[i] = 1; + break; + } + } + } break; + case SDL_KEYUP: { + int i = LZYK_COUNT; + while (i-- > 0) { + if (sc[i] == e.key.keysym.scancode) { + input[i] = 0; + break; + } + } + } break; default: break; } } } -int LZY_KeyDown(unsigned int scancode) { - LZY_Log("LZY_KeyDown not implemented"); - return 0; +int LZY_KeyDown(unsigned int key) { + if (key >= LZYK_COUNT) + return 0; + return input[key]; } int LZY_ShouldQuit(void) { diff --git a/src/main.c b/src/main.c index 7b200a8..23b7cc5 100644 --- a/src/main.c +++ b/src/main.c @@ -17,6 +17,10 @@ int main(void) { do { LZY_CycleEvents(); + if (LZY_KeyDown(LZYK_LEFT)) + LZY_Log("pressing left"); + if (LZY_KeyDown(LZYK_RIGHT)) + LZY_Log("pressing right"); } while (!LZY_ShouldQuit()); LZY_Log("cya");