From 5640c153f3e9e1f6119aaef1b7b1ccb38ec147d4 Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 10 Apr 2026 20:24:29 +0200 Subject: [PATCH] feat(app): extract ICamera interface from OrbitCamera Introduce ICamera (View, Projection, Aspect) and make OrbitCamera implement it. TerrainRenderer.Draw and StaticMeshRenderer.Draw now accept ICamera, widening the call-site contract while leaving all runtime behavior unchanged. Co-Authored-By: Claude Sonnet 4.6 --- src/AcDream.App/Rendering/ICamera.cs | 10 ++++++++++ src/AcDream.App/Rendering/OrbitCamera.cs | 2 +- src/AcDream.App/Rendering/StaticMeshRenderer.cs | 2 +- src/AcDream.App/Rendering/TerrainRenderer.cs | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 src/AcDream.App/Rendering/ICamera.cs diff --git a/src/AcDream.App/Rendering/ICamera.cs b/src/AcDream.App/Rendering/ICamera.cs new file mode 100644 index 0000000..3aeaf98 --- /dev/null +++ b/src/AcDream.App/Rendering/ICamera.cs @@ -0,0 +1,10 @@ +using System.Numerics; + +namespace AcDream.App.Rendering; + +public interface ICamera +{ + Matrix4x4 View { get; } + Matrix4x4 Projection { get; } + float Aspect { get; set; } +} diff --git a/src/AcDream.App/Rendering/OrbitCamera.cs b/src/AcDream.App/Rendering/OrbitCamera.cs index 95f9977..43f2c96 100644 --- a/src/AcDream.App/Rendering/OrbitCamera.cs +++ b/src/AcDream.App/Rendering/OrbitCamera.cs @@ -2,7 +2,7 @@ using System.Numerics; namespace AcDream.App.Rendering; -public sealed class OrbitCamera +public sealed class OrbitCamera : ICamera { public Vector3 Target { get; set; } = new(96, 96, 0); // center of a 192x192 landblock public float Distance { get; set; } = 300f; diff --git a/src/AcDream.App/Rendering/StaticMeshRenderer.cs b/src/AcDream.App/Rendering/StaticMeshRenderer.cs index 12b7a8b..424eb8b 100644 --- a/src/AcDream.App/Rendering/StaticMeshRenderer.cs +++ b/src/AcDream.App/Rendering/StaticMeshRenderer.cs @@ -73,7 +73,7 @@ public sealed unsafe class StaticMeshRenderer : IDisposable }; } - public void Draw(OrbitCamera camera, IEnumerable entities) + public void Draw(ICamera camera, IEnumerable entities) { _shader.Use(); _shader.SetMatrix4("uView", camera.View); diff --git a/src/AcDream.App/Rendering/TerrainRenderer.cs b/src/AcDream.App/Rendering/TerrainRenderer.cs index c82eda0..11cd851 100644 --- a/src/AcDream.App/Rendering/TerrainRenderer.cs +++ b/src/AcDream.App/Rendering/TerrainRenderer.cs @@ -55,7 +55,7 @@ public sealed unsafe class TerrainRenderer : IDisposable _landblocks.Add(gpu); } - public void Draw(OrbitCamera camera) // ICamera in Task 5 + public void Draw(ICamera camera) { _shader.Use(); _shader.SetMatrix4("uView", camera.View);