From b60a80b10d6c29605dbf611378370257675eea5d Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Mon, 17 Jul 2023 00:02:28 +0530 Subject: [PATCH] add option for camera centering --- src/CameraController.hx | 20 ++++++++++++++++---- src/Settings.hx | 4 ++++ src/gui/InputOptionsGui.hx | 7 +++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/CameraController.hx b/src/CameraController.hx index d9fff998..efa25822 100644 --- a/src/CameraController.hx +++ b/src/CameraController.hx @@ -68,6 +68,8 @@ class CameraController extends Object { var hasYInput:Bool = false; var dt:Float; + var wasLastGamepadInput:Bool = false; + public function new(marble:Marble) { super(); this.marble = marble; @@ -135,6 +137,10 @@ class CameraController extends Object { var factor = isTouch ? Util.lerp(1 / 25, 1 / 15, Settings.controlsSettings.cameraSensitivity) : Util.lerp(1 / 2500, 1 / 100, Settings.controlsSettings.cameraSensitivity); + if (!Settings.controlsSettings.alwaysFreeLook && !Key.isDown(Settings.controlsSettings.freelook) && !isTouch) { + deltaposY = 0; + } + // CameraPitch += deltaposY * factor; // CameraYaw += deltaposX * factor; @@ -155,6 +161,11 @@ class CameraController extends Object { hasYInput = true; } + if (!isTouch) + wasLastGamepadInput = false; + else + wasLastGamepadInput = true; + // var rotX = deltaposX * 0.001 * Settings.controlsSettings.cameraSensitivity * Math.PI * 2; // var rotY = deltaposY * 0.001 * Settings.controlsSettings.cameraSensitivity * Math.PI * 2; // CameraYaw -= rotX; @@ -221,6 +232,10 @@ class CameraController extends Object { var gamepadX = applyNonlinearScale(rescaleDeadZone(Gamepad.getAxis(Settings.gamepadSettings.cameraXAxis), 0.25)); var gamepadY = applyNonlinearScale(rescaleDeadZone(Gamepad.getAxis(Settings.gamepadSettings.cameraYAxis), 0.25)); + if (gamepadX != 0.0 || gamepadY != 0.0) { + wasLastGamepadInput = true; + } + var cameraPitchDelta = (Key.isDown(Settings.controlsSettings.camBackward) ? 1 : 0) - (Key.isDown(Settings.controlsSettings.camForward) ? 1 : 0) + gamepadY; @@ -258,10 +273,7 @@ class CameraController extends Object { deltaX = deltaNew; // Center the pitch - if (!Settings.controlsSettings.alwaysFreeLook - && !Key.isDown(Settings.controlsSettings.freelook) - && !(hasXInput || hasYInput) - && deltaY == 0.0) { + if (Settings.controlsSettings.controllerVerticalCenter && !(hasXInput || hasYInput) && deltaY == 0.0 && wasLastGamepadInput) { var rescaledY = deltaY; if (rescaledY <= 0.0) rescaledY = 0.4 - rescaledY * -0.75; diff --git a/src/Settings.hx b/src/Settings.hx index 451741e8..ffaeb466 100644 --- a/src/Settings.hx +++ b/src/Settings.hx @@ -62,6 +62,7 @@ typedef ControlsSettings = { var powerup:Int; var freelook:Int; var alwaysFreeLook:Bool; + var controllerVerticalCenter:Bool; var cameraSensitivity:Float; var invertYAxis:Bool; var respawn:Int; @@ -150,6 +151,7 @@ class Settings { powerup: Key.MOUSE_LEFT, freelook: Key.MOUSE_MIDDLE, alwaysFreeLook: true, + controllerVerticalCenter: true, cameraSensitivity: 0.6, invertYAxis: false, respawn: Key.BACKSPACE, @@ -362,6 +364,8 @@ class Settings { #if js if (optionsSettings.reflectionDetail == null) optionsSettings.reflectionDetail = 2; + if (controlsSettings.controllerVerticalCenter == null) + controlsSettings.controllerVerticalCenter = true; #end if (optionsSettings.maxPixelRatio == 0 #if js || optionsSettings.maxPixelRatio == null #end) optionsSettings.maxPixelRatio = 1; diff --git a/src/gui/InputOptionsGui.hx b/src/gui/InputOptionsGui.hx index 19c2ca8e..c42ffe11 100644 --- a/src/gui/InputOptionsGui.hx +++ b/src/gui/InputOptionsGui.hx @@ -100,6 +100,13 @@ class InputOptionsGui extends GuiImage { flOpt.setCurrentOption(Settings.controlsSettings.alwaysFreeLook ? 1 : 0); + var clOpt = optionCollection.addOption(1, "Camera Recentering", ["Disabled", "Enabled"], (idx) -> { + Settings.controlsSettings.controllerVerticalCenter = (idx == 1); + return true; + }, 0.5, 118); + + clOpt.setCurrentOption(Settings.controlsSettings.controllerVerticalCenter ? 1 : 0); + var msOpt = optionCollection.addOption(1, "Mouse Sensitivity", numberRange(10, 100, 5), (idx) -> { Settings.controlsSettings.cameraSensitivity = cast(0.2 + (idx / 18.0) * (3 - 0.2)); return true;