From 33d4cc2544a8b0dd92eee48a287f3d569b3cb2a1 Mon Sep 17 00:00:00 2001 From: staphen Date: Sun, 30 Oct 2022 18:30:51 -0400 Subject: [PATCH] Properly handle d-pad events for mouse simulation --- Source/controls/controller_motion.cpp | 28 ++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Source/controls/controller_motion.cpp b/Source/controls/controller_motion.cpp index 02cc1c103..c35b7c6e9 100644 --- a/Source/controls/controller_motion.cpp +++ b/Source/controls/controller_motion.cpp @@ -81,26 +81,32 @@ void SetSimulatingMouseWithPadmapper(bool value) // SELECT + D-Pad to simulate right stick movement. bool SimulateRightStickWithDpad(ControllerButtonEvent ctrlEvent) { + if (IsAnyOf(ctrlEvent.button, ControllerButton_NONE, ControllerButton_IGNORE)) + return false; + ControllerButtonCombo upCombo = sgOptions.Padmapper.ButtonComboForAction("MouseUp"); ControllerButtonCombo downCombo = sgOptions.Padmapper.ButtonComboForAction("MouseDown"); ControllerButtonCombo leftCombo = sgOptions.Padmapper.ButtonComboForAction("MouseLeft"); ControllerButtonCombo rightCombo = sgOptions.Padmapper.ButtonComboForAction("MouseRight"); + if (IsNoneOf(ctrlEvent.button, upCombo.button, downCombo.button, leftCombo.button, rightCombo.button)) { + if (rightStickX == 0 && rightStickY == 0) + SetSimulatingMouseWithPadmapper(false); + return false; + } - int simulatedRightStickX = 0; - int simulatedRightStickY = 0; + rightStickX = 0; + rightStickY = 0; if (IsControllerButtonComboPressed(upCombo)) - simulatedRightStickY += 1; + rightStickY += 1.F; if (IsControllerButtonComboPressed(downCombo)) - simulatedRightStickY -= 1; + rightStickY -= 1.F; if (IsControllerButtonComboPressed(leftCombo)) - simulatedRightStickX -= 1; + rightStickX -= 1.F; if (IsControllerButtonComboPressed(rightCombo)) - simulatedRightStickX += 1; - SetSimulatingMouseWithPadmapper(simulatedRightStickX != 0 || simulatedRightStickY != 0); - - rightStickX += simulatedRightStickX; - rightStickY += simulatedRightStickY; - return SimulatingMouseWithPadmapper && IsAnyOf(ctrlEvent.button, upCombo.button, downCombo.button, leftCombo.button, rightCombo.button); + rightStickX += 1.F; + if (rightStickX != 0 || rightStickY != 0) + SetSimulatingMouseWithPadmapper(true); + return true; } } // namespace