Skip to content

Commit 2f24955

Browse files
committed
Add 0.1 deadzone for boats (closes #279)
1 parent 1280486 commit 2f24955

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

src/main/java/dev/isxander/controlify/controller/input/mapping/MappingEntry.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import dev.isxander.controlify.controller.input.ControllerState;
44
import dev.isxander.controlify.controller.input.HatState;
55
import dev.isxander.controlify.controller.input.ModifiableControllerState;
6+
import dev.isxander.controlify.utils.MthExt;
67
import net.minecraft.resources.ResourceLocation;
7-
import net.minecraft.util.Mth;
88

99
public sealed interface MappingEntry {
1010
void apply(ControllerState oldState, ModifiableControllerState newState);
@@ -70,7 +70,7 @@ public ToAxis(ResourceLocation from, ResourceLocation to, float minIn, float min
7070
@Override
7171
public void apply(ControllerState oldState, ModifiableControllerState newState) {
7272
float oldVal = oldState.getAxisState(from);
73-
float newVal = Mth.lerp(Mth.inverseLerp(oldVal, minIn, maxIn), minOut, maxOut);
73+
float newVal = MthExt.remap(oldVal, minIn, maxIn, minOut, maxOut);
7474
newState.setAxis(to, newVal);
7575
}
7676
}

src/main/java/dev/isxander/controlify/mixins/feature/patches/boatfix/LocalPlayerMixin.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
import dev.isxander.controlify.Controlify;
66
import dev.isxander.controlify.api.ControlifyApi;
77
import dev.isxander.controlify.fixes.boatfix.AnalogBoatInput;
8+
import dev.isxander.controlify.utils.CUtil;
9+
import dev.isxander.controlify.utils.MthExt;
810
import net.minecraft.client.player.LocalPlayer;
11+
import net.minecraft.util.Mth;
912
import net.minecraft.world.entity.vehicle.Boat;
1013
import org.spongepowered.asm.mixin.Mixin;
1114
import org.spongepowered.asm.mixin.Shadow;
@@ -40,9 +43,24 @@ private void useAnalogInput(
4043
Operation<Void> original
4144
) {
4245
if (ControlifyApi.get().currentInputMode().isController() && !Controlify.instance().config().globalSettings().shouldUseKeyboardMovement()) {
46+
float forwardImpulse = input.forwardImpulse;
47+
float rightImpulse = -input.leftImpulse;
48+
49+
// Add a deadzone to the analog input. Right impulse between -0.1 and 0.1 is considered 0.
50+
// Other values are remapped to remap [0.1, 1] to [0, 1] and [-1, -0.1] to [-1, 0].
51+
float deadzone = 0.1f;
52+
53+
float onlyRightImpulseAbs = Math.max(0, rightImpulse);
54+
float onlyLeftImpulseAbs = -Math.min(0, rightImpulse);
55+
56+
onlyRightImpulseAbs = onlyRightImpulseAbs < deadzone ? 0 : MthExt.remap(onlyRightImpulseAbs, deadzone, 1, 0, 1);
57+
onlyLeftImpulseAbs = onlyLeftImpulseAbs < deadzone ? 0 : MthExt.remap(onlyLeftImpulseAbs, deadzone, 1, 0, 1);
58+
59+
rightImpulse = onlyRightImpulseAbs - onlyLeftImpulseAbs;
60+
4361
((AnalogBoatInput) boat).controlify$setAnalogInput(
44-
input.forwardImpulse,
45-
-input.leftImpulse
62+
forwardImpulse,
63+
rightImpulse
4664
);
4765

4866
return;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package dev.isxander.controlify.utils;
2+
3+
import net.minecraft.util.Mth;
4+
5+
public final class MthExt {
6+
private MthExt() {
7+
}
8+
9+
public static float remap(float value, float minIn, float maxIn, float minOut, float maxOut) {
10+
return Mth.lerp(Mth.inverseLerp(value, minIn, maxIn), minOut, maxOut);
11+
}
12+
}

0 commit comments

Comments
 (0)