input and handler possibly fixed and point
This commit is contained in:
parent
d6281e8eac
commit
3fa74e8f9e
7 changed files with 288 additions and 0 deletions
56
src/input/sdl/keyboard.c
Normal file
56
src/input/sdl/keyboard.c
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#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 <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <SDL_keyboard.h>
|
||||
#include <SDL_events.h>
|
||||
|
||||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue