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();