1
0
forked from Clones/Controlify

rewrite player look input to feel more bedrock-y

This commit is contained in:
isXander
2023-02-10 21:17:10 +00:00
parent 9e0440a7f4
commit 7da85b9361
2 changed files with 11 additions and 32 deletions

View File

@ -5,14 +5,13 @@ import dev.isxander.controlify.InputMode;
import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.controller.Controller;
import dev.isxander.controlify.event.ControlifyEvents; import dev.isxander.controlify.event.ControlifyEvents;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.player.Input;
import net.minecraft.client.player.KeyboardInput; import net.minecraft.client.player.KeyboardInput;
public class InGameInputHandler { public class InGameInputHandler {
private final Controller controller; private final Controller controller;
private final Minecraft minecraft; private final Minecraft minecraft;
private double accumulatedDX, accumulatedDY; private double lookInputX, lookInputY;
private double deltaTime; private double deltaTime;
public InGameInputHandler(Controller controller) { public InGameInputHandler(Controller controller) {
@ -56,39 +55,15 @@ public class InGameInputHandler {
protected void handlePlayerLookInput() { protected void handlePlayerLookInput() {
var axes = controller.state().axes(); var axes = controller.state().axes();
if (minecraft.mouseHandler.isMouseGrabbed() && minecraft.isWindowActive()) { if (minecraft.mouseHandler.isMouseGrabbed() && minecraft.isWindowActive()) {
accumulatedDX += axes.rightStickX() * Math.abs(axes.rightStickX()); lookInputX = axes.rightStickX() * Math.abs(axes.rightStickX()) * controller.config().horizontalLookSensitivity;
accumulatedDY += axes.rightStickY() * Math.abs(axes.rightStickY()); lookInputY = axes.rightStickY() * Math.abs(axes.rightStickY()) * controller.config().verticalLookSensitivity;
} }
processPlayerLook(); processPlayerLook(1f);
} }
public void processPlayerLook() { public void processPlayerLook(float deltaTime) {
var time = Blaze3D.getTime();
var delta = time - deltaTime;
deltaTime = time;
var hsensitivity = controller.config().horizontalLookSensitivity * 9.6 + 2.0;
var hsensCubed = hsensitivity * hsensitivity * hsensitivity;
var vsensitivity = controller.config().verticalLookSensitivity * 9.6 + 2.0;
var vsensCubed = vsensitivity * vsensitivity * vsensitivity;
var dx = accumulatedDX * delta;
var dy = accumulatedDY * delta;
// 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) if (minecraft.player != null)
minecraft.player.turn(dx * hsensCubed, dy * vsensCubed); minecraft.player.turn(lookInputX * 15f * deltaTime, lookInputY * 15f * deltaTime);
} }
} }

View File

@ -16,6 +16,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
public abstract class MinecraftMixin { public abstract class MinecraftMixin {
@Shadow public abstract void setScreen(@Nullable Screen screen); @Shadow public abstract void setScreen(@Nullable Screen screen);
@Shadow public abstract float getDeltaFrameTime();
@Shadow public abstract float getFrameTime();
@Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyboardHandler;setup(J)V", shift = At.Shift.AFTER)) @Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyboardHandler;setup(J)V", shift = At.Shift.AFTER))
private void onInputInitialized(CallbackInfo ci) { private void onInputInitialized(CallbackInfo ci) {
Controlify.instance().onInitializeInput(); Controlify.instance().onInitializeInput();
@ -23,7 +27,7 @@ public abstract class MinecraftMixin {
@Inject(method = "runTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MouseHandler;turnPlayer()V")) @Inject(method = "runTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MouseHandler;turnPlayer()V"))
private void doPlayerLook(boolean tick, CallbackInfo ci) { private void doPlayerLook(boolean tick, CallbackInfo ci) {
Controlify.instance().inGameInputHandler().processPlayerLook(); Controlify.instance().inGameInputHandler().processPlayerLook(getFrameTime());
} }
@Inject(method = "<init>", at = @At("TAIL")) @Inject(method = "<init>", at = @At("TAIL"))