diff --git a/src/CameraController.hx b/src/CameraController.hx index dcd7c9ed..2962ad36 100644 --- a/src/CameraController.hx +++ b/src/CameraController.hx @@ -493,6 +493,20 @@ class CameraController extends Object { this.setPosition(camera.pos.x, camera.pos.y, camera.pos.z); } + function applyNonlinearScale(value:Float) { + return Math.pow(Math.abs(value), 3.2) * (value >= 0 ? 1 : -1); + } + + function rescaleDeadZone(value:Float, deadZone:Float) { + if (deadZone >= value) { + if (-deadZone <= value) + return 0.0; + else + return (value + deadZone) / (1.0 - deadZone); + } else + return (value - deadZone) / (1.0 - deadZone); + } + public function update(currentTime:Float, dt:Float) { // camera.position.set(marblePosition.x, marblePosition.y, marblePosition.z).sub(directionVector.clone().multiplyScalar(2.5)); // this.level.scene.camera.target = marblePosition.add(cameraVerticalTranslation); @@ -510,25 +524,26 @@ class CameraController extends Object { var camera = level.scene.camera; - var lerpt = hxd.Math.min(1, - 1 - Math.pow(0.6, dt * 600)); // Math.min(1, 1 - Math.pow(0.6, dt / 0.032)); // hxd.Math.min(1, 1 - Math.pow(0.6, dt * 600)); + var lerpt = 1 - Math.pow(0.5, dt / 0.016); // Math.min(1, 1 - Math.pow(0.6, dt / 0.032)); // hxd.Math.min(1, 1 - Math.pow(0.6, dt * 600)); + + var gamepadX = applyNonlinearScale(rescaleDeadZone(Gamepad.getAxis(Settings.gamepadSettings.cameraXAxis), 0.25)); + var gamepadY = applyNonlinearScale(rescaleDeadZone(Gamepad.getAxis(Settings.gamepadSettings.cameraYAxis), 0.25)); var cameraPitchDelta = (Key.isDown(Settings.controlsSettings.camBackward) ? 1 : 0) - (Key.isDown(Settings.controlsSettings.camForward) ? 1 : 0) - + Gamepad.getAxis(Settings.gamepadSettings.cameraYAxis); + + gamepadY; if (Settings.gamepadSettings.invertYAxis) cameraPitchDelta = -cameraPitchDelta; nextCameraPitch += 0.75 * 5 * cameraPitchDelta * dt * Settings.gamepadSettings.cameraSensitivity; - var cameraYawDelta = (Key.isDown(Settings.controlsSettings.camRight) ? 1 : 0) - (Key.isDown(Settings.controlsSettings.camLeft) ? 1 : 0) - + Gamepad.getAxis(Settings.gamepadSettings.cameraXAxis); + var cameraYawDelta = (Key.isDown(Settings.controlsSettings.camRight) ? 1 : 0) - (Key.isDown(Settings.controlsSettings.camLeft) ? 1 : 0) + gamepadX; if (Settings.gamepadSettings.invertXAxis) cameraYawDelta = -cameraYawDelta; nextCameraYaw += 0.75 * 5 * cameraYawDelta * dt * Settings.gamepadSettings.cameraSensitivity; nextCameraPitch = Math.max(-Math.PI / 2 + Math.PI / 4, Math.min(Math.PI / 2 - 0.0001, nextCameraPitch)); - CameraYaw = nextCameraYaw; // Util.lerp(CameraYaw, nextCameraYaw, lerpt); - CameraPitch = nextCameraPitch; // Util.lerp(CameraPitch, nextCameraPitch, lerpt); + CameraYaw = Util.lerp(CameraYaw, nextCameraYaw, lerpt); + CameraPitch = Util.lerp(CameraPitch, nextCameraPitch, lerpt); CameraPitch = Math.max(-Math.PI / 2 + Math.PI / 4, Math.min(Math.PI / 2 - 0.0001, CameraPitch)); // Util.clamp(CameraPitch, -Math.PI / 12, Math.PI / 2); diff --git a/src/Marble.hx b/src/Marble.hx index ffc2f648..a88af423 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -666,6 +666,8 @@ class Marble extends GameObject { } function loadMarbleAttributes() { + if (this.level == null || this.level.mission == null || this.level.marbleAttributes == null) + return; var attribs = this.level.mission.marbleAttributes; if (attribs.exists("maxrollvelocity")) this._maxRollVelocity = MisParser.parseNumber(attribs.get("maxrollvelocity")); diff --git a/src/gui/EnterNameDlg.hx b/src/gui/EnterNameDlg.hx index a03a6c52..39993473 100644 --- a/src/gui/EnterNameDlg.hx +++ b/src/gui/EnterNameDlg.hx @@ -74,7 +74,9 @@ class EnterNameDlg extends GuiControl { okbutton.pressedAction = (sender) -> { MarbleGame.canvas.popDialog(this); Settings.highscoreName = enterNameEdit.text.text; - okFunc(enterNameEdit.text.text); + if (StringTools.trim(Settings.highscoreName) == "") + Settings.highscoreName = "Player"; + okFunc(Settings.highscoreName); } dlg.addChild(okbutton); diff --git a/src/gui/JoinServerGui.hx b/src/gui/JoinServerGui.hx index 18522416..404fd5da 100644 --- a/src/gui/JoinServerGui.hx +++ b/src/gui/JoinServerGui.hx @@ -339,7 +339,10 @@ class JoinServerGui extends GuiImage { this.addChild(window); - if (StringTools.trim(Settings.highscoreName).length == 0 || Settings.highscoreName == "" || Settings.highscoreName == null) { + if (StringTools.trim(Settings.highscoreName).length == 0 + || Settings.highscoreName == "" + || Settings.highscoreName == "Player" + || Settings.highscoreName == null) { haxe.Timer.delay(() -> MarbleGame.canvas.pushDialog(new EnterNameDlg(-1, (n) -> {})), 50); // Pls enter name } }