From 57fcd0c0dccf0e030c30e369d1d37e1bb92459a8 Mon Sep 17 00:00:00 2001 From: isXander Date: Thu, 2 Feb 2023 21:34:10 +0000 Subject: [PATCH] better deadzone algorithm --- .../controlify/controller/AxesState.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/dev/isxander/controlify/controller/AxesState.java b/src/main/java/dev/isxander/controlify/controller/AxesState.java index 715938d..03cbe77 100644 --- a/src/main/java/dev/isxander/controlify/controller/AxesState.java +++ b/src/main/java/dev/isxander/controlify/controller/AxesState.java @@ -11,8 +11,8 @@ public record AxesState( public AxesState leftJoystickDeadZone(float deadZoneX, float deadZoneY) { return new AxesState( - Math.abs(leftStickX) < deadZoneX ? 0 : leftStickX, - Math.abs(leftStickY) < deadZoneY ? 0 : leftStickY, + deadzone(leftStickX, deadZoneX), + deadzone(leftStickY, deadZoneY), rightStickX, rightStickY, leftTrigger, rightTrigger ); } @@ -20,8 +20,8 @@ public record AxesState( public AxesState rightJoystickDeadZone(float deadZoneX, float deadZoneY) { return new AxesState( leftStickX, leftStickY, - Math.abs(rightStickX) < deadZoneX ? 0 : rightStickX, - Math.abs(rightStickY) < deadZoneY ? 0 : rightStickY, + deadzone(rightStickX, deadZoneX), + deadzone(rightStickY, deadZoneY), leftTrigger, rightTrigger ); } @@ -29,7 +29,7 @@ public record AxesState( public AxesState leftTriggerDeadZone(float deadZone) { return new AxesState( leftStickX, leftStickY, rightStickX, rightStickY, - Math.abs(leftTrigger) < deadZone ? 0 : leftTrigger, + deadzone(leftTrigger, deadZone), rightTrigger ); } @@ -38,10 +38,14 @@ public record AxesState( return new AxesState( leftStickX, leftStickY, rightStickX, rightStickY, 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) { if (controller == null || !controller.connected()) return EMPTY;