1
0
forked from Clones/Controlify

better deadzone algorithm

This commit is contained in:
isXander
2023-02-02 21:34:10 +00:00
parent da864b96be
commit 57fcd0c0dc

View File

@ -11,8 +11,8 @@ public record AxesState(
public AxesState leftJoystickDeadZone(float deadZoneX, float deadZoneY) { public AxesState leftJoystickDeadZone(float deadZoneX, float deadZoneY) {
return new AxesState( return new AxesState(
Math.abs(leftStickX) < deadZoneX ? 0 : leftStickX, deadzone(leftStickX, deadZoneX),
Math.abs(leftStickY) < deadZoneY ? 0 : leftStickY, deadzone(leftStickY, deadZoneY),
rightStickX, rightStickY, leftTrigger, rightTrigger rightStickX, rightStickY, leftTrigger, rightTrigger
); );
} }
@ -20,8 +20,8 @@ public record AxesState(
public AxesState rightJoystickDeadZone(float deadZoneX, float deadZoneY) { public AxesState rightJoystickDeadZone(float deadZoneX, float deadZoneY) {
return new AxesState( return new AxesState(
leftStickX, leftStickY, leftStickX, leftStickY,
Math.abs(rightStickX) < deadZoneX ? 0 : rightStickX, deadzone(rightStickX, deadZoneX),
Math.abs(rightStickY) < deadZoneY ? 0 : rightStickY, deadzone(rightStickY, deadZoneY),
leftTrigger, rightTrigger leftTrigger, rightTrigger
); );
} }
@ -29,7 +29,7 @@ public record AxesState(
public AxesState leftTriggerDeadZone(float deadZone) { public AxesState leftTriggerDeadZone(float deadZone) {
return new AxesState( return new AxesState(
leftStickX, leftStickY, rightStickX, rightStickY, leftStickX, leftStickY, rightStickX, rightStickY,
Math.abs(leftTrigger) < deadZone ? 0 : leftTrigger, deadzone(leftTrigger, deadZone),
rightTrigger rightTrigger
); );
} }
@ -38,10 +38,14 @@ public record AxesState(
return new AxesState( return new AxesState(
leftStickX, leftStickY, rightStickX, rightStickY, leftStickX, leftStickY, rightStickX, rightStickY,
leftTrigger, leftTrigger,
Math.abs(rightTrigger) < deadZone ? 0 : rightTrigger deadzone(rightTrigger, deadZone)
); );
} }
private float deadzone(float value, float deadzone) {
return (value - Math.copySign(Math.min(deadzone, Math.abs(value)), value)) / (1 - deadzone);
}
public static AxesState fromController(Controller controller) { public static AxesState fromController(Controller controller) {
if (controller == null || !controller.connected()) if (controller == null || !controller.connected())
return EMPTY; return EMPTY;