From eff0608b454d0c855f4a519ab16daf6a12147e6a Mon Sep 17 00:00:00 2001 From: Nathaniel Walizer Date: Fri, 10 Jan 2025 23:08:14 -0800 Subject: [PATCH] Add analog stick gamepad controls --- src/sdl_input.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/sdl_input.c b/src/sdl_input.c index e1fff06..7c3a857 100644 --- a/src/sdl_input.c +++ b/src/sdl_input.c @@ -117,6 +117,34 @@ static int sdl_input_update(nes_Input_Reader* reader, } } + } else if (SDL_CONTROLLERAXISMOTION == event.type) { + const uint8_t axis = event.caxis.axis; + const int16_t value = event.caxis.value; + uint8_t mask_set = 0; + uint8_t mask_clear = 0; + + if (SDL_CONTROLLER_AXIS_LEFTX == axis) { + mask_clear = (1 << Button_Left) | + (1 << Button_Right); + if (value <= -8192) { + mask_set = (1 << Button_Left); + } else if (value >= 8192) { + mask_set = (1 << Button_Right); + } + + } else if (SDL_CONTROLLER_AXIS_LEFTY == axis) { + mask_clear = (1 << Button_Down) | + (1 << Button_Up); + if (value <= -8192) { + mask_set = (1 << Button_Up); + } else if (value >= 8192) { + mask_set = (1 << Button_Down); + } + } + + input->controllers[0].buttons &= ~mask_clear; + input->controllers[0].buttons |= mask_set; + } else if (SDL_CONTROLLERDEVICEADDED == event.type) { if (NULL == reader->data) { reader->data = sdl_find_gamepad();