47 lines
1.1 KiB
C#
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;
|
|
}
|
|
}
|