encompass-cs/encompass-cs/RenderManager.cs

53 lines
1.9 KiB
C#
Raw Normal View History

2019-06-19 21:14:44 +00:00
using System;
using System.Collections.Generic;
namespace Encompass
2019-06-20 17:46:15 +00:00
{
2019-06-19 21:14:44 +00:00
internal class RenderManager
{
2020-03-20 07:09:57 +00:00
private readonly EntityManager _entityManager;
private readonly DrawLayerManager _drawLayerManager;
2019-06-19 21:14:44 +00:00
private readonly Dictionary<Type, Action<Entity>> _drawComponentTypeToOrderedRenderer = new Dictionary<Type, Action<Entity>>(256);
2019-06-19 21:14:44 +00:00
public RenderManager(EntityManager entityManager, DrawLayerManager drawLayerManager)
2019-06-19 21:14:44 +00:00
{
2020-03-20 07:09:57 +00:00
_entityManager = entityManager;
_drawLayerManager = drawLayerManager;
2019-06-19 21:14:44 +00:00
}
2020-03-20 22:45:58 +00:00
public void RegisterOrderedRenderer<TComponent>(Action<Entity> renderAction) where TComponent : unmanaged
2019-06-19 21:14:44 +00:00
{
2020-03-20 07:09:57 +00:00
_drawComponentTypeToOrderedRenderer.Add(typeof(TComponent), renderAction);
_drawLayerManager.RegisterOrderedDrawable<TComponent>();
2019-06-19 21:14:44 +00:00
}
public void RegisterGeneralRendererWithLayer(GeneralRenderer renderer, int layer)
{
2020-03-20 07:09:57 +00:00
_drawLayerManager.RegisterGeneralRendererWithLayer(renderer, layer);
2019-06-19 21:14:44 +00:00
}
public void Draw()
{
2020-03-20 07:09:57 +00:00
foreach (var layer in _drawLayerManager.LayerOrder)
2019-06-19 21:14:44 +00:00
{
2020-03-20 07:09:57 +00:00
var generalRendererSet = _drawLayerManager.GeneralRenderersByLayer(layer);
2019-06-19 21:14:44 +00:00
foreach (var (entityID, componentType) in _drawLayerManager.AllInLayer(layer))
2019-06-19 21:14:44 +00:00
{
2020-03-20 07:09:57 +00:00
if (_drawComponentTypeToOrderedRenderer.ContainsKey(componentType))
2019-06-19 21:14:44 +00:00
{
2020-03-20 07:09:57 +00:00
var internalRenderAction = _drawComponentTypeToOrderedRenderer[componentType];
internalRenderAction(_entityManager.GetEntity(entityID));
2019-06-19 21:14:44 +00:00
}
}
foreach (var generalRenderer in generalRendererSet)
{
generalRenderer.Render();
}
}
}
}
}