core: hid: Fix stick minimum range

master
german77 2023-01-14 11:53:43 +07:00
parent 0e8f98a441
commit 50c86b3c2a
1 changed files with 10 additions and 2 deletions

@ -10,6 +10,7 @@
namespace Core::HID { namespace Core::HID {
constexpr s32 HID_JOYSTICK_MAX = 0x7fff; constexpr s32 HID_JOYSTICK_MAX = 0x7fff;
constexpr s32 HID_JOYSTICK_MIN = 0x7ffe;
constexpr s32 HID_TRIGGER_MAX = 0x7fff; constexpr s32 HID_TRIGGER_MAX = 0x7fff;
// Use a common UUID for TAS and Virtual Gamepad // Use a common UUID for TAS and Virtual Gamepad
constexpr Common::UUID TAS_UUID = constexpr Common::UUID TAS_UUID =
@ -798,9 +799,16 @@ void EmulatedController::SetStick(const Common::Input::CallbackStatus& callback,
return; 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{ const AnalogStickState stick{
.x = static_cast<s32>(controller.stick_values[index].x.value * HID_JOYSTICK_MAX), .x = FloatToShort(controller.stick_values[index].x.value),
.y = static_cast<s32>(controller.stick_values[index].y.value * HID_JOYSTICK_MAX), .y = FloatToShort(controller.stick_values[index].y.value),
}; };
switch (index) { switch (index) {