From 979802c49cab457d47092914341929630e6cefef Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 11 Apr 2026 19:19:12 +0200 Subject: [PATCH] feat(app): slow default fly speed and add Shift-boost MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The user noted that the previous 35 u/s default felt too fast for exploring scenery — overshooting buildings and skipping past entities constantly. Drop default to 12 u/s (≈AC's run speed), and bind Shift to a 50 u/s boost for fast travel between landblocks. Backwards compatible: the new boost parameter on FlyCamera.Update has a default of false, so any existing caller behaves the same. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/AcDream.App/Rendering/FlyCamera.cs | 14 +++++++++++--- src/AcDream.App/Rendering/GameWindow.cs | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/AcDream.App/Rendering/FlyCamera.cs b/src/AcDream.App/Rendering/FlyCamera.cs index eaeb65f..b0e9d24 100644 --- a/src/AcDream.App/Rendering/FlyCamera.cs +++ b/src/AcDream.App/Rendering/FlyCamera.cs @@ -11,7 +11,14 @@ public sealed class FlyCamera : ICamera public float FovY { get; set; } = MathF.PI / 3f; public float Aspect { get; set; } = 16f / 9f; - public float MoveSpeed { get; set; } = 35f; // world units per second (AC cell size = 24) + /// + /// Default move speed in world units per second. AC's character walks + /// at ~4 u/s and runs at ~7 u/s; 12 here is comfortable for navigating + /// scenery without overshooting and roughly tracks a fast jog. Hold + /// shift while moving to enter "boost" mode at . + /// + public float MoveSpeed { get; set; } = 12f; + public float BoostSpeed { get; set; } = 50f; public float MouseSensitivity { get; set; } = 0.003f; private const float PitchLimit = 1.5533f; // ~89 degrees @@ -33,9 +40,10 @@ public sealed class FlyCamera : ICamera /// W/S move forward/back in the horizontal plane (ignoring pitch). /// A/D strafe left/right. Up/down translate along world Z. /// - public void Update(double dt, bool w, bool a, bool s, bool d, bool up, bool down) + public void Update(double dt, bool w, bool a, bool s, bool d, bool up, bool down, bool boost = false) { - float step = (float)(MoveSpeed * dt); + float speed = boost ? BoostSpeed : MoveSpeed; + float step = (float)(speed * dt); // Forward in the horizontal plane (ignore pitch so W doesn't dive into ground). var flatForward = new Vector3(MathF.Cos(Yaw), MathF.Sin(Yaw), 0f); diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index 976be25..a485ea5 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -1003,7 +1003,8 @@ public sealed class GameWindow : IDisposable s: kb.IsKeyPressed(Key.S), d: kb.IsKeyPressed(Key.D), up: kb.IsKeyPressed(Key.Space), - down: kb.IsKeyPressed(Key.ControlLeft)); + down: kb.IsKeyPressed(Key.ControlLeft), + boost: kb.IsKeyPressed(Key.ShiftLeft) || kb.IsKeyPressed(Key.ShiftRight)); } private void OnCameraModeChanged(bool isFlyMode)