encompass-cs/encompass-cs/RenderManager.cs

73 lines
2.6 KiB
C#
Raw Normal View History

2019-06-19 21:14:44 +00:00
using System;
using System.Reflection;
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
{
2019-06-20 17:46:15 +00:00
private readonly EntityManager entityManager;
private readonly ComponentManager componentManager;
private readonly DrawLayerManager drawLayerManager;
2019-06-19 21:14:44 +00:00
2019-06-20 17:46:15 +00:00
private readonly Dictionary<Type, EntityRenderer> drawComponentTypeToEntityRenderer = new Dictionary<Type, EntityRenderer>();
2019-06-19 21:14:44 +00:00
public RenderManager(
EntityManager entityManager,
ComponentManager componentManager,
DrawLayerManager drawLayerManager
)
2019-06-19 21:14:44 +00:00
{
this.entityManager = entityManager;
this.componentManager = componentManager;
this.drawLayerManager = drawLayerManager;
2019-06-19 21:14:44 +00:00
}
public void RegisterEntityRenderer(EntityRenderer renderer)
{
var rendersAttribute = renderer.GetType().GetCustomAttribute<Renders>(false);
if (rendersAttribute != null)
{
drawComponentTypeToEntityRenderer.Add(rendersAttribute.drawComponentType, renderer);
}
}
public void RegisterGeneralRendererWithLayer(GeneralRenderer renderer, int layer)
{
drawLayerManager.RegisterGeneralRendererWithLayer(renderer, layer);
2019-06-19 21:14:44 +00:00
}
public void Draw()
{
foreach (var layer in drawLayerManager.LayerOrder)
2019-06-19 21:14:44 +00:00
{
var componentIDSet = drawLayerManager.ComponentIDsByLayer(layer);
var generalRendererSet = drawLayerManager.GeneralRenderersByLayer(layer);
2019-06-19 21:14:44 +00:00
foreach (var componentID in componentIDSet)
{
var component = componentManager.GetComponentByID(componentID);
var componentType = componentManager.GetComponentTypeByID(componentID);
if (drawComponentTypeToEntityRenderer.ContainsKey(componentType))
{
var renderer = drawComponentTypeToEntityRenderer[componentType];
var entityID = componentManager.GetEntityIDByComponentID(componentID);
2019-06-19 21:14:44 +00:00
if (renderer.IsTracking(entityID) && entityManager.EntityExists(entityID))
2019-06-19 21:14:44 +00:00
{
var entity = entityManager.GetEntity(entityID);
renderer.Render(entity);
}
}
}
foreach (var generalRenderer in generalRendererSet)
{
generalRenderer.Render();
}
}
}
}
}