encompass-cs/encompass-cs/Renderers/EntityRenderer.cs

55 lines
1.8 KiB
C#
Raw Normal View History

2019-06-19 21:14:44 +00:00
using System;
2019-06-19 23:13:02 +00:00
using System.Reflection;
2019-06-19 21:14:44 +00:00
using System.Collections.Generic;
namespace Encompass
{
2019-06-19 23:13:02 +00:00
public abstract class EntityRenderer : Renderer, IEntityTracker
2019-06-19 21:14:44 +00:00
{
private readonly List<Type> componentTypes = new List<Type>();
2019-06-20 17:46:15 +00:00
private readonly EntityTracker entityTracker = new EntityTracker();
2019-06-19 21:14:44 +00:00
2019-06-19 23:13:02 +00:00
public IEnumerable<Type> ComponentTypes { get { return componentTypes; } }
public Type DrawComponentType { get; }
2019-06-19 21:14:44 +00:00
public abstract void Render(Entity entity);
2019-06-20 17:46:15 +00:00
protected EntityRenderer()
2019-06-19 23:13:02 +00:00
{
var rendersAttribute = GetType().GetCustomAttribute<Renders>(false);
if (rendersAttribute != null)
{
componentTypes = rendersAttribute.componentTypes;
DrawComponentType = rendersAttribute.drawComponentType;
}
}
bool IEntityTracker.CheckAndTrackEntity(Guid entityID)
2019-06-19 21:14:44 +00:00
{
var entity = GetEntity(entityID);
var shouldTrack = CheckEntity(entity);
if (shouldTrack) { entityTracker.TrackEntity(entityID); }
return shouldTrack;
}
bool IEntityTracker.CheckAndUntrackEntity(Guid entityID)
2019-06-19 21:14:44 +00:00
{
var entity = GetEntity(entityID);
var shouldUntrack = !CheckEntity(entity);
2019-06-19 21:14:44 +00:00
if (shouldUntrack) { entityTracker.UntrackEntity(entityID); }
return shouldUntrack;
}
public bool IsTracking(Guid entityID)
{
return entityTracker.IsTracking(entityID);
}
private bool CheckEntity(Entity entity)
2019-06-19 21:14:44 +00:00
{
2019-07-17 18:24:21 +00:00
return EntityChecker.CheckEntity(componentManager, entity, componentTypes)
&& componentManager.EntityHasComponentOfType(entity.ID, DrawComponentType);
2019-06-19 21:14:44 +00:00
}
}
}