diff --git a/src/duskraylib/input.c b/src/duskraylib/input.c index 6b28d99..3642592 100644 --- a/src/duskraylib/input.c +++ b/src/duskraylib/input.c @@ -11,9 +11,14 @@ typedef struct { int32_t key; uint8_t bind; -} inputmap_t; +} inputkbmap_t; -inputmap_t INPUT_MAP[] = { +typedef struct { + GamepadButton button; + uint8_t bind; +} inputgpmap_t; + +inputkbmap_t INPUT_KB_MAP[] = { { KEY_UP, INPUT_BIND_UP }, { KEY_W, INPUT_BIND_UP }, { KEY_DOWN, INPUT_BIND_DOWN }, @@ -34,12 +39,36 @@ inputmap_t INPUT_MAP[] = { { 0, 0 } }; +inputgpmap_t INPUT_GP_MAP[] = { + { GAMEPAD_BUTTON_LEFT_FACE_UP, INPUT_BIND_UP }, + { GAMEPAD_BUTTON_LEFT_FACE_DOWN, INPUT_BIND_DOWN }, + { GAMEPAD_BUTTON_LEFT_FACE_LEFT, INPUT_BIND_LEFT }, + { GAMEPAD_BUTTON_LEFT_FACE_RIGHT, INPUT_BIND_RIGHT }, + + { GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, INPUT_BIND_ACTION }, + { GAMEPAD_BUTTON_RIGHT_FACE_DOWN, INPUT_BIND_CANCEL }, + + { 0, 0 } +}; + uint8_t inputStateGet() { uint8_t state = 0; - inputmap_t *map = INPUT_MAP; + + inputkbmap_t *kbMap = INPUT_KB_MAP; do { - if(IsKeyDown(map->key)) state |= map->bind; - map++; - } while(map->key != 0); + if(IsKeyDown(kbMap->key)) state |= kbMap->bind; + kbMap++; + } while(kbMap->key != 0); + + for(uint32_t i = 0; i < 32; i++) { + if(!IsGamepadAvailable(i)) continue; + + inputgpmap_t *gpMap = INPUT_GP_MAP; + do { + if(IsGamepadButtonDown(i, gpMap->button)) state |= gpMap->bind; + gpMap++; + } while(gpMap->button != 0); + } + return state; } \ No newline at end of file