aboutsummaryrefslogtreecommitdiff
path: root/src/core/hid/emulated_controller.cpp
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-01-22 13:14:10 -0500
committerGitHub <noreply@github.com>2023-01-22 13:14:10 -0500
commitc909a9e2ba6e86e4a9cbaa04651d1510742d7f7d (patch)
treef8f68367b2cf2849c6b8b3a23933b47c614418f3 /src/core/hid/emulated_controller.cpp
parent87eef91dab0dcb93b91393a7b60569a423465fbf (diff)
parentc76721182c9e9b0215dfc5c9670dabd2c8fdc4ea (diff)
Merge pull request #9617 from german77/off_by_one
core: hid: Fix stick minimum range
Diffstat (limited to 'src/core/hid/emulated_controller.cpp')
-rw-r--r--src/core/hid/emulated_controller.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp
index 7a01f3f4c8..a959c9db90 100644
--- a/src/core/hid/emulated_controller.cpp
+++ b/src/core/hid/emulated_controller.cpp
@@ -10,6 +10,7 @@
namespace Core::HID {
constexpr s32 HID_JOYSTICK_MAX = 0x7fff;
+constexpr s32 HID_JOYSTICK_MIN = 0x7ffe;
constexpr s32 HID_TRIGGER_MAX = 0x7fff;
// Use a common UUID for TAS and Virtual Gamepad
constexpr Common::UUID TAS_UUID =
@@ -798,9 +799,16 @@ void EmulatedController::SetStick(const Common::Input::CallbackStatus& callback,
return;
}
+ const auto FloatToShort = [](float a) {
+ if (a > 0) {
+ return static_cast<s32>(a * HID_JOYSTICK_MAX);
+ }
+ return static_cast<s32>(a * HID_JOYSTICK_MIN);
+ };
+
const AnalogStickState stick{
- .x = static_cast<s32>(controller.stick_values[index].x.value * HID_JOYSTICK_MAX),
- .y = static_cast<s32>(controller.stick_values[index].y.value * HID_JOYSTICK_MAX),
+ .x = FloatToShort(controller.stick_values[index].x.value),
+ .y = FloatToShort(controller.stick_values[index].y.value),
};
switch (index) {