using System; using System.Collections.Generic; namespace Encompass { internal class RenderManager { private readonly EntityManager entityManager; private readonly DrawLayerManager drawLayerManager; private readonly Dictionary> drawComponentTypeToOrderedRenderer = new Dictionary>(256); public RenderManager(EntityManager entityManager, DrawLayerManager drawLayerManager) { this.entityManager = entityManager; this.drawLayerManager = drawLayerManager; } public void RegisterOrderedRenderer(Action renderAction) where TComponent : struct, IComponent { drawComponentTypeToOrderedRenderer.Add(typeof(TComponent), renderAction); drawLayerManager.RegisterOrderedDrawable(); } public void RegisterGeneralRendererWithLayer(GeneralRenderer renderer, int layer) { drawLayerManager.RegisterGeneralRendererWithLayer(renderer, layer); } public void Draw() { foreach (var layer in drawLayerManager.LayerOrder) { var generalRendererSet = drawLayerManager.GeneralRenderersByLayer(layer); foreach (var (entityID, componentType, component) in drawLayerManager.AllInLayer(layer)) { if (drawComponentTypeToOrderedRenderer.ContainsKey(componentType)) { var internalRenderAction = drawComponentTypeToOrderedRenderer[componentType]; internalRenderAction(entityManager.GetEntity(entityID), component); } } foreach (var generalRenderer in generalRendererSet) { generalRenderer.Render(); } } } } }