From 50c86b3c2ac55c474208681494ec458d24850ae7 Mon Sep 17 00:00:00 2001 From: german77 Date: Sat, 14 Jan 2023 11:53:43 -0600 Subject: core: hid: Fix stick minimum range --- src/core/hid/emulated_controller.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp index 7a01f3f4c..a959c9db9 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(a * HID_JOYSTICK_MAX); + } + return static_cast(a * HID_JOYSTICK_MIN); + }; + const AnalogStickState stick{ - .x = static_cast(controller.stick_values[index].x.value * HID_JOYSTICK_MAX), - .y = static_cast(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) { -- cgit v1.2.3