#include "arc/input/keyboard.h" #include "keyboard.h" #include "input.h" #include "arc/math/point.h" #include "arc/std/errno.h" #include #include #include #include void ARC_Keyboard_CreateWithInput(ARC_Keyboard **keyboard, ARC_Input *input){ *keyboard = (ARC_Keyboard *)malloc(sizeof(ARC_Keyboard)); (*keyboard)->event = input->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_EVENT_KEY_DOWN && keyboard->event->type != SDL_EVENT_KEY_UP){ return; } if(keyboard->event->key.key >= 239 || keyboard->event->key.key < 0){ return; } if(keyboard->event->type == SDL_EVENT_KEY_DOWN){ keyboard->keys[keyboard->event->key.key] = ARC_KEY_PRESSED; return; } keyboard->keys[keyboard->event->key.key] = ARC_KEY_RELEASED; keyboard->released = (keyboard->keys + keyboard->event->key.key); } ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, enum ARC_KeyboardKey key){ switch(key){ case ARC_KEY_A: return keyboard->keys[SDLK_A]; case ARC_KEY_B: return keyboard->keys[SDLK_B]; case ARC_KEY_C: return keyboard->keys[SDLK_C]; case ARC_KEY_D: return keyboard->keys[SDLK_D]; case ARC_KEY_E: return keyboard->keys[SDLK_E]; case ARC_KEY_F: return keyboard->keys[SDLK_F]; case ARC_KEY_G: return keyboard->keys[SDLK_G]; case ARC_KEY_H: return keyboard->keys[SDLK_H]; case ARC_KEY_I: return keyboard->keys[SDLK_I]; case ARC_KEY_J: return keyboard->keys[SDLK_J]; case ARC_KEY_K: return keyboard->keys[SDLK_K]; case ARC_KEY_L: return keyboard->keys[SDLK_L]; case ARC_KEY_M: return keyboard->keys[SDLK_M]; case ARC_KEY_N: return keyboard->keys[SDLK_N]; case ARC_KEY_O: return keyboard->keys[SDLK_O]; case ARC_KEY_P: return keyboard->keys[SDLK_P]; case ARC_KEY_Q: return keyboard->keys[SDLK_Q]; case ARC_KEY_R: return keyboard->keys[SDLK_R]; case ARC_KEY_S: return keyboard->keys[SDLK_S]; case ARC_KEY_T: return keyboard->keys[SDLK_T]; case ARC_KEY_U: return keyboard->keys[SDLK_U]; case ARC_KEY_V: return keyboard->keys[SDLK_V]; case ARC_KEY_W: return keyboard->keys[SDLK_W]; case ARC_KEY_X: return keyboard->keys[SDLK_X]; case ARC_KEY_Y: return keyboard->keys[SDLK_Y]; case ARC_KEY_Z: return keyboard->keys[SDLK_Z]; case ARC_KEY_0: return keyboard->keys[SDLK_0]; case ARC_KEY_1: return keyboard->keys[SDLK_1]; case ARC_KEY_2: return keyboard->keys[SDLK_2]; case ARC_KEY_3: return keyboard->keys[SDLK_3]; case ARC_KEY_4: return keyboard->keys[SDLK_4]; case ARC_KEY_5: return keyboard->keys[SDLK_5]; case ARC_KEY_6: return keyboard->keys[SDLK_6]; case ARC_KEY_7: return keyboard->keys[SDLK_7]; case ARC_KEY_8: return keyboard->keys[SDLK_8]; case ARC_KEY_9: return keyboard->keys[SDLK_9]; case ARC_KEY_SPACE: return keyboard->keys[SDLK_SPACE ]; case ARC_KEY_ESC: return keyboard->keys[SDLK_ESCAPE]; case ARC_KEY_ENTER: return keyboard->keys[SDLK_RETURN]; default: return ARC_KEY_NONE; } }