acdream/src/AcDream.App/Rendering/CameraController.cs
Erik e5e1245efb feat(app): Phase B.2 — CameraController chase mode
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 14:29:47 +02:00

47 lines
1.1 KiB
C#

// src/AcDream.App/Rendering/CameraController.cs
namespace AcDream.App.Rendering;
public sealed class CameraController
{
public OrbitCamera Orbit { get; }
public FlyCamera Fly { get; }
public ChaseCamera? Chase { get; private set; }
public ICamera Active { get; private set; }
public bool IsFlyMode => Active == Fly;
public bool IsChaseMode => Chase is not null && Active == Chase;
public event Action<bool>? ModeChanged;
public CameraController(OrbitCamera orbit, FlyCamera fly)
{
Orbit = orbit;
Fly = fly;
Active = orbit;
}
public void ToggleFly()
{
Active = IsFlyMode ? (ICamera)Orbit : Fly;
ModeChanged?.Invoke(IsFlyMode);
}
public void EnterChaseMode(ChaseCamera chase)
{
Chase = chase;
Active = chase;
ModeChanged?.Invoke(IsChaseMode);
}
public void ExitChaseMode()
{
Active = Fly;
Chase = null;
ModeChanged?.Invoke(IsFlyMode);
}
public void SetAspect(float aspect)
{
Orbit.Aspect = aspect;
Fly.Aspect = aspect;
}
}