From e5e1245efb87e1aea9404da5df7d868a9e85c83e Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 12 Apr 2026 14:29:47 +0200 Subject: [PATCH] =?UTF-8?q?feat(app):=20Phase=20B.2=20=E2=80=94=20CameraCo?= =?UTF-8?q?ntroller=20chase=20mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- src/AcDream.App/Rendering/CameraController.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/AcDream.App/Rendering/CameraController.cs b/src/AcDream.App/Rendering/CameraController.cs index 97ff925..c061450 100644 --- a/src/AcDream.App/Rendering/CameraController.cs +++ b/src/AcDream.App/Rendering/CameraController.cs @@ -5,8 +5,10 @@ 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? ModeChanged; @@ -23,6 +25,20 @@ public sealed class CameraController 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;