feat(app): slow default fly speed and add Shift-boost

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) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-04-11 19:19:12 +02:00
parent a538183caa
commit 979802c49c
2 changed files with 13 additions and 4 deletions

View file

@ -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)
/// <summary>
/// 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 <see cref="BoostSpeed"/>.
/// </summary>
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.
/// </summary>
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);

View file

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