Skip to content

Commit 70390d9

Browse files
committed
correct LCE sensitivity
1 parent 32f6a5b commit 70390d9

2 files changed

Lines changed: 12 additions & 7 deletions

File tree

src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ private Optional<OptionGroup> makeSensitivityGroup(
132132
InputSettings.SensitivitySettings sens = settings.input.sensitivity;
133133
InputSettings.SensitivitySettings def = defaults.input.sensitivity;
134134

135+
Option<InputCurves> lookInputCurveOpt;
136+
135137
return Optional.of(builder
136138
.option(Option.<Float>createBuilder()
137139
.name(Component.translatable("controlify.gui.horizontal_look_sensitivity"))
@@ -177,7 +179,7 @@ private Optional<OptionGroup> makeSensitivityGroup(
177179
.binding(def.reduceAimingSensitivity, () -> sens.reduceAimingSensitivity, v -> sens.reduceAimingSensitivity = v)
178180
.controller(TickBoxControllerBuilder::create)
179181
.build())
180-
.option(Option.<InputCurves>createBuilder()
182+
.option(lookInputCurveOpt = Option.<InputCurves>createBuilder()
181183
.name(Component.translatable("controlify.gui.look_input_curve"))
182184
.description(OptionDescription.createBuilder()
183185
.text(Component.translatable("controlify.gui.look_input_curve.tooltip"))
@@ -194,6 +196,9 @@ private Optional<OptionGroup> makeSensitivityGroup(
194196
.binding(def.isLCE, () -> sens.isLCE, v -> sens.isLCE = v)
195197
.controller(opt -> BooleanControllerBuilder.create(opt)
196198
.onOffFormatter())
199+
.addListener((opt, event) -> {
200+
lookInputCurveOpt.setAvailable(!opt.pendingValue());
201+
})
197202
.build())
198203
.build());
199204
}

src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -317,17 +317,17 @@ protected void handleRegularLook(InputComponent input, Vector2d impulse, boolean
317317
regularImpulse.y *= -1;
318318
}
319319

320-
InputCurve curve = settings.sensitivity.lookInputCurve;
321320
if (!settings.sensitivity.isLCE) {
322321
// apply the easing on its length to preserve circularity
323322
regularImpulse = ControllerUtils.applyEasingToLength(
324323
regularImpulse,
325-
curve::apply
324+
settings.sensitivity.lookInputCurve::apply
326325
);
327326
} else {
328-
// LCE doesn't preserve circularity
329-
regularImpulse.x = curve.apply(regularImpulse.x);
330-
regularImpulse.y = curve.apply(regularImpulse.y);
327+
// LCE uses a quadratic curve on each axis independently,
328+
// and its default turn speed was 7.5 degrees per tick at 100% sensitivity
329+
regularImpulse.x = regularImpulse.x * Math.abs(regularImpulse.x) * 0.75f;
330+
regularImpulse.y = regularImpulse.y * Math.abs(regularImpulse.y) * 0.75f;
331331
}
332332

333333
if (settings.sensitivity.reduceAimingSensitivity && player.isUsingItem()) {
@@ -344,7 +344,7 @@ protected void handleRegularLook(InputComponent input, Vector2d impulse, boolean
344344
regularImpulse.mul(aimMultiplier);
345345
}
346346

347-
// 10 degrees per second at 100% sensitivity
347+
// 10 degrees per tick at 100% sensitivity
348348
regularImpulse.x *= settings.sensitivity.hLookSensitivity * 10f;
349349
regularImpulse.y *= settings.sensitivity.vLookSensitivity * 10f;
350350

0 commit comments

Comments
 (0)