using System.Collections.Generic; using Engine.Core; namespace Engine.Systems.Graphics; public class TriangleBatcher : Behaviour, IFirstFrameUpdate, IDraw { private static Comparer SortByAscendingPriority() => Comparer.Create((x, y) => x.CompareTo(y)); private static System.Func GetPriority() => (b) => b.Priority; private ITriangleBatch triangleBatch = null!; private ICamera camera = null!; private readonly ActiveBehaviourCollectorOrdered drawableShapes = new(GetPriority(), SortByAscendingPriority()); public void FirstActiveFrame() { camera = Universe.FindRequiredBehaviour(); triangleBatch = Universe.FindRequiredBehaviour(); drawableShapes.Unassign(); drawableShapes.Assign(Universe); } public void Draw() { triangleBatch.Begin(camera.ViewMatrix, camera.ProjectionMatrix); for (int i = 0; i < drawableShapes.Count; i++) drawableShapes[i].Draw(triangleBatch); triangleBatch.End(); } }