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)