From 695796772a6e7e033ce8d1e323bfe6d0ebe097f0 Mon Sep 17 00:00:00 2001 From: isXander Date: Mon, 30 Oct 2023 19:50:24 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Keep=20circularity=20on=20?= =?UTF-8?q?look=20input,=20like=20vmouse=20commit=20abobe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controlify/ingame/InGameInputHandler.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java b/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java index d7ef4c7..8b52d57 100644 --- a/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java +++ b/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java @@ -9,6 +9,7 @@ import dev.isxander.controlify.controller.gamepad.GamepadState; import dev.isxander.controlify.gui.screen.RadialMenuScreen; import dev.isxander.controlify.server.ServerPolicies; import dev.isxander.controlify.utils.Animator; +import dev.isxander.controlify.utils.ControllerUtils; import dev.isxander.controlify.utils.Easings; import dev.isxander.controlify.utils.HoldRepeatHelper; import net.minecraft.client.CameraType; @@ -23,6 +24,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; +import org.joml.Vector2fc; import org.joml.Vector3f; import java.util.concurrent.atomic.AtomicReference; @@ -162,11 +164,21 @@ public class InGameInputHandler { }, 0, turnAngle)); } } else { - // TODO: refactor this function majorly, so you can easily multiply the impulse vec's length + // TODO: refactor this function majorly - this is truly awful // possibly separate the flick stick code into its own function? // normal look input impulseY = controller.bindings().LOOK_DOWN.state() - controller.bindings().LOOK_UP.state(); impulseX = controller.bindings().LOOK_RIGHT.state() - controller.bindings().LOOK_LEFT.state(); + + // apply the easing on its length to preserve circularity + Vector2fc easedImpulse = ControllerUtils.applyEasingToLength( + impulseX, + impulseY, + x -> x * Math.abs(x) + ); + impulseX = easedImpulse.x(); + impulseY = easedImpulse.y(); + impulseX *= controller.config().horizontalLookSensitivity * 10f; // 10 degrees per second at 100% sensitivity impulseY *= controller.config().verticalLookSensitivity * 10f; @@ -209,7 +221,7 @@ public class InGameInputHandler { .mul(gamepad.config().gyroLookSensitivity); impulseY += -thisInput.pitch() * (gamepad.config().invertGyroY ? -1 : 1); - impulseX += (-thisInput.roll() + -thisInput.yaw()) * (gamepad.config().invertGyroX ? -1 : 1); + impulseX += (-thisInput.roll() - thisInput.yaw()) * (gamepad.config().invertGyroX ? -1 : 1); } }