camera smoothing and some name stuff

This commit is contained in:
RandomityGuy 2025-02-10 21:57:23 +05:30
parent f40914f071
commit 5cfe49c166
4 changed files with 31 additions and 9 deletions

View file

@ -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);

View file

@ -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"));

View file

@ -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);

View file

@ -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
}
}