#ifdef ARC_SDL #include "arc/input/sdl/keyboard.h" #include "arc/input/keyboard.h" #include "arc/math/point.h" #include "arc/std/errno.h" #include #include #include #include void ARC_Keyboard_Create(ARC_Keyboard **keyboard, ARC_KeyboardInfo *info){ *keyboard = (ARC_Keyboard *)malloc(sizeof(ARC_Keyboard)); (*keyboard)->event = info->event; (*keyboard)->keys = (ARC_KeyboardState *)malloc(sizeof(ARC_KeyboardState) * ARC_KEYBOARD_BUTTON_NUM); (*keyboard)->released = NULL; for(uint8_t i = 0; i < ARC_KEYBOARD_BUTTON_NUM; i++){ (*keyboard)->keys[i] = ARC_KEY_NONE; } } void ARC_Keyboard_Destroy(ARC_Keyboard *keyboard){ free(keyboard->keys); free(keyboard); } void ARC_Keyboard_Update(ARC_Keyboard *keyboard){ if(keyboard->released){ *keyboard->released = ARC_KEY_NONE; keyboard->released = NULL; } if(keyboard->event->type != SDL_KEYDOWN && keyboard->event->type != SDL_KEYUP){ return; } if(keyboard->event->key.keysym.sym >= 239 || keyboard->event->key.keysym.sym < 0){ return; } if(keyboard->event->type == SDL_KEYDOWN){ keyboard->keys[keyboard->event->key.keysym.sym] = ARC_KEY_PRESSED; return; } keyboard->keys[keyboard->event->key.keysym.sym] = ARC_KEY_RELEASED; keyboard->released = (keyboard->keys + keyboard->event->key.keysym.sym); } ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, uint8_t key){ return keyboard->keys[key]; } #endif // ARC_SDL