Browse Source

Only query cbutton state for button events

Similar to https://github.com/diasurgical/devilutionX/pull/4374
pull/4385/head
Gleb Mazovetskiy 4 years ago
parent
commit
787bc54310
  1. 11
      Source/controls/controller.cpp
  2. 4
      Source/controls/devices/game_controller.cpp

11
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

4
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;
}

Loading…
Cancel
Save