diff --git a/src/main/java/dev/isxander/controlify/bindings/ControllerBindings.java b/src/main/java/dev/isxander/controlify/bindings/ControllerBindings.java index e90fab7..d182cbe 100644 --- a/src/main/java/dev/isxander/controlify/bindings/ControllerBindings.java +++ b/src/main/java/dev/isxander/controlify/bindings/ControllerBindings.java @@ -11,7 +11,16 @@ import net.minecraft.resources.ResourceLocation; import java.util.*; public class ControllerBindings { - public final ControllerBinding JUMP, SNEAK, ATTACK, USE, SPRINT, NEXT_SLOT, PREV_SLOT, PAUSE, INVENTORY, CHANGE_PERSPECTIVE, OPEN_CHAT; + public final ControllerBinding + JUMP, SNEAK, + ATTACK, USE, + SPRINT, + NEXT_SLOT, PREV_SLOT, + PAUSE, + INVENTORY, + CHANGE_PERSPECTIVE, + OPEN_CHAT, + GUI_PRESS, GUI_BACK; private final Map registry = new HashMap<>(); @@ -29,6 +38,8 @@ public class ControllerBindings { register(INVENTORY = new ControllerBinding(controller, Bind.Y_BUTTON, new ResourceLocation("controlify", "inventory"), options.keyInventory)); register(CHANGE_PERSPECTIVE = new ControllerBinding(controller, Bind.BACK, new ResourceLocation("controlify", "change_perspective"), options.keyTogglePerspective)); register(OPEN_CHAT = new ControllerBinding(controller, Bind.DPAD_UP, new ResourceLocation("controlify", "open_chat"), options.keyChat)); + register(GUI_PRESS = new ControllerBinding(controller, Bind.A_BUTTON, new ResourceLocation("controlify", "gui_press"), null)); + register(GUI_BACK = new ControllerBinding(controller, Bind.B_BUTTON, new ResourceLocation("controlify", "gui_back"), null)); ControlifyEvents.CONTROLLER_BIND_REGISTRY.invoker().onRegisterControllerBinds(this, controller); diff --git a/src/main/java/dev/isxander/controlify/config/gui/YACLHelper.java b/src/main/java/dev/isxander/controlify/config/gui/YACLHelper.java index 8eae816..9ebf1db 100644 --- a/src/main/java/dev/isxander/controlify/config/gui/YACLHelper.java +++ b/src/main/java/dev/isxander/controlify/config/gui/YACLHelper.java @@ -30,9 +30,15 @@ public class YACLHelper { .name(Component.translatable("controlify.gui.group.config")) .tooltip(Component.translatable("controlify.gui.group.config.tooltip")) .option(Option.createBuilder(float.class) - .name(Component.translatable("controlify.gui.look_sensitivity")) - .tooltip(Component.translatable("controlify.gui.look_sensitivity.tooltip")) - .binding(def.lookSensitivity, () -> config.lookSensitivity, v -> config.lookSensitivity = v) + .name(Component.translatable("controlify.gui.horizontal_look_sensitivity")) + .tooltip(Component.translatable("controlify.gui.horizontal_look_sensitivity.tooltip")) + .binding(def.horizontalLookSensitivity, () -> config.horizontalLookSensitivity, v -> config.horizontalLookSensitivity = v) + .controller(opt -> new FloatSliderController(opt, 0.1f, 2f, 0.05f, v -> Component.literal(String.format("%.0f%%", v*100)))) + .build()) + .option(Option.createBuilder(float.class) + .name(Component.translatable("controlify.gui.vertical_look_sensitivity")) + .tooltip(Component.translatable("controlify.gui.vertical_look_sensitivity.tooltip")) + .binding(def.verticalLookSensitivity, () -> config.verticalLookSensitivity, v -> config.verticalLookSensitivity = v) .controller(opt -> new FloatSliderController(opt, 0.1f, 2f, 0.05f, v -> Component.literal(String.format("%.0f%%", v*100)))) .build()) .option(Option.createBuilder(float.class) diff --git a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java index 735dcc2..3338258 100644 --- a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java +++ b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java @@ -5,7 +5,8 @@ import dev.isxander.controlify.config.ControlifyConfig; public class ControllerConfig { public static final ControllerConfig DEFAULT = new ControllerConfig(); - public float lookSensitivity = 1f; + public float horizontalLookSensitivity = 1f; + public float verticalLookSensitivity = 0.9f; public float leftStickDeadzone = 0.2f; public float rightStickDeadzone = 0.2f; @@ -24,6 +25,8 @@ public class ControllerConfig { } public void overwrite(ControllerConfig from) { + this.horizontalLookSensitivity = from.horizontalLookSensitivity; + this.verticalLookSensitivity = from.verticalLookSensitivity; this.leftStickDeadzone = from.leftStickDeadzone; this.rightStickDeadzone = from.rightStickDeadzone; this.leftTriggerDeadzone = from.leftTriggerDeadzone; diff --git a/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java b/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java index 562c433..ce81f6b 100644 --- a/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java +++ b/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java @@ -5,13 +5,15 @@ import dev.isxander.controlify.InputMode; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.event.ControlifyEvents; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.PauseScreen; +import net.minecraft.client.player.Input; import net.minecraft.client.player.KeyboardInput; public class InGameInputHandler { private final Controller controller; private final Minecraft minecraft; + private final Input controllerInput, keyboardInput; + private double accumulatedDX, accumulatedDY; private double deltaTime; @@ -19,11 +21,14 @@ public class InGameInputHandler { this.controller = controller; this.minecraft = Minecraft.getInstance(); + this.controllerInput = new ControllerPlayerMovement(controller); + this.keyboardInput = new KeyboardInput(minecraft.options); + ControlifyEvents.INPUT_MODE_CHANGED.register(mode -> { if (minecraft.player != null) { minecraft.player.input = mode == InputMode.CONTROLLER - ? new ControllerPlayerMovement(controller) - : new KeyboardInput(minecraft.options); + ? this.controllerInput + : this.keyboardInput; } }); } @@ -55,15 +60,28 @@ public class InGameInputHandler { var delta = time - deltaTime; deltaTime = time; - var sensitivity = controller.config().lookSensitivity * 8f + 2f; - var sensCubed = sensitivity * sensitivity * sensitivity; + var hsensitivity = controller.config().horizontalLookSensitivity * 8.0 + 2.0; + var hsensCubed = hsensitivity * hsensitivity * hsensitivity; + var vsensitivity = controller.config().verticalLookSensitivity * 8.0 + 2.0; + var vsensCubed = vsensitivity * vsensitivity * vsensitivity; var dx = accumulatedDX * delta; var dy = accumulatedDY * delta; - accumulatedDX -= dx * 20; // 20 is how quickly the camera will slow down - accumulatedDY -= dy * 20; + + // drag + if (accumulatedDX > 0) { + accumulatedDX -= Math.min(dx * 20, accumulatedDX); + } else if (accumulatedDX < 0) { + accumulatedDX -= Math.max(dx * 20, accumulatedDX); + } + if (accumulatedDY > 0) { + accumulatedDY -= Math.min(dy * 20, accumulatedDY); + } else if (accumulatedDY < 0) { + accumulatedDY -= Math.max(dy * 20, accumulatedDY); + } + if (minecraft.player != null) - minecraft.player.turn(dx * sensCubed, dy * sensCubed); + minecraft.player.turn(dx * hsensCubed, dy * vsensCubed); } }