From 787bc54310e8ca9232fb5a949e81002c3e82c3a3 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sun, 10 Apr 2022 11:37:33 +0100 Subject: [PATCH] Only query cbutton state for button events Similar to https://github.com/diasurgical/devilutionX/pull/4374 --- Source/controls/controller.cpp | 11 ++++++++--- Source/controls/devices/game_controller.cpp | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) 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; }