diff --git a/controller/gamepad.c b/controller/gamepad.c index d78c091..f1e7893 100644 --- a/controller/gamepad.c +++ b/controller/gamepad.c @@ -554,6 +554,10 @@ static void GamepadUpdateStick(GAMEPAD_AXIS* axis, float deadzone) { axis->nx = axis->x / axis->length; axis->ny = axis->y / axis->length; + //fix special case + if (axis->nx < -1.0) axis->nx = -1.0; + if (axis->ny < -1.0) axis->ny = -1.0; + // adjust length for deadzone and find normalized length axis->length -= deadzone; axis->length /= (32767.0f - deadzone); diff --git a/dll/steam_controller.h b/dll/steam_controller.h index b03dc57..7a31879 100644 --- a/dll/steam_controller.h +++ b/dll/steam_controller.h @@ -495,9 +495,16 @@ ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerH if (a >= 10) { int joystick_id = a - 10; GamepadStickNormXY((GAMEPAD_DEVICE)(controllerHandle - 1), (GAMEPAD_STICK) joystick_id, &data.x, &data.y); + float length = GamepadStickLength((GAMEPAD_DEVICE)(controllerHandle - 1), (GAMEPAD_STICK) joystick_id); + data.x = data.x * length; + data.y = data.y * length; } else { data.x = GamepadTriggerLength((GAMEPAD_DEVICE)(controllerHandle - 1), (GAMEPAD_TRIGGER) a); } + + if (data.x || data.y) { + break; + } } return data;