diff --git a/Source/controls/controller.cpp b/Source/controls/controller.cpp index 786d9380e..61db52eee 100644 --- a/Source/controls/controller.cpp +++ b/Source/controls/controller.cpp @@ -90,10 +90,15 @@ ControllerButtonEvent ToControllerButtonEvent(const SDL_Event &event) GameController *const controller = GameController::Get(event); if (controller != nullptr) { result.button = controller->ToControllerButton(event); - result.state = event.cbutton.state; - - if (result.button != ControllerButton_NONE) + if (result.button != ControllerButton_NONE) { + if (result.button == ControllerButton_AXIS_TRIGGERLEFT || result.button == ControllerButton_AXIS_TRIGGERRIGHT) { + result.up = !controller->IsPressed(result.button); + result.state = result.up ? SDL_RELEASED : SDL_PRESSED; + } else { + result.state = event.cbutton.state; + } return result; + } } #endif diff --git a/Source/controls/devices/game_controller.cpp b/Source/controls/devices/game_controller.cpp index 6b0499816..ec81982b4 100644 --- a/Source/controls/devices/game_controller.cpp +++ b/Source/controls/devices/game_controller.cpp @@ -124,6 +124,10 @@ SDL_GameControllerButton GameController::ToSdlGameControllerButton(ControllerBut bool GameController::IsPressed(ControllerButton button) const { + if (button == ControllerButton_AXIS_TRIGGERLEFT) + return trigger_left_is_down_; + if (button == ControllerButton_AXIS_TRIGGERRIGHT) + return trigger_right_is_down_; const SDL_GameControllerButton gcButton = ToSdlGameControllerButton(button); return SDL_GameControllerHasButton(sdl_game_controller_, gcButton) && SDL_GameControllerGetButton(sdl_game_controller_, gcButton) != 0; }