encompass-cs/encompass-cs/Renderer.cs

76 lines
2.6 KiB
C#
Raw Normal View History

2019-12-17 04:40:15 +00:00
using System.Collections.Generic;
2019-06-19 21:14:44 +00:00
namespace Encompass
{
public abstract class Renderer
{
2019-07-17 18:24:21 +00:00
internal EntityManager entityManager;
internal ComponentManager componentManager;
2019-06-19 21:14:44 +00:00
internal void AssignEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}
internal void AssignComponentManager(ComponentManager componentManager)
{
this.componentManager = componentManager;
}
protected IEnumerable<Entity> ReadEntities<TComponent>() where TComponent : struct, IComponent
{
2019-12-17 04:40:15 +00:00
foreach (var pair in ReadComponentsIncludingEntity<TComponent>())
{
yield return pair.Item2;
}
}
protected Entity ReadEntity<TComponent>() where TComponent : struct, IComponent
{
return ReadComponentIncludingEntity<TComponent>().Item2;
}
2019-11-21 03:01:29 +00:00
protected IEnumerable<TComponent> ReadComponents<TComponent>() where TComponent : struct, IComponent
{
2019-12-05 22:59:55 +00:00
return componentManager.GetComponentsByType<TComponent>();
}
2019-11-21 03:01:29 +00:00
protected IEnumerable<(TComponent, Entity)> ReadComponentsIncludingEntity<TComponent>() where TComponent : struct, IComponent
{
foreach (var (component, id) in componentManager.GetComponentsIncludingEntity<TComponent>())
{
yield return (component, entityManager.GetEntity(id));
}
}
2019-11-21 03:01:29 +00:00
protected TComponent ReadComponent<TComponent>() where TComponent : struct, IComponent
2019-06-19 21:14:44 +00:00
{
2019-12-17 04:40:15 +00:00
var enumerator = ReadComponents<TComponent>().GetEnumerator();
enumerator.MoveNext();
return enumerator.Current;
2019-06-19 21:14:44 +00:00
}
2019-11-21 03:01:29 +00:00
protected (TComponent, Entity) ReadComponentIncludingEntity<TComponent>() where TComponent : struct, IComponent
2019-06-19 21:14:44 +00:00
{
2019-12-17 04:40:15 +00:00
var enumerator = ReadComponentsIncludingEntity<TComponent>().GetEnumerator();
enumerator.MoveNext();
return enumerator.Current;
2019-06-19 21:14:44 +00:00
}
2019-07-17 18:24:21 +00:00
2019-11-21 03:01:29 +00:00
protected TComponent GetComponent<TComponent>(Entity entity) where TComponent : struct, IComponent
2019-07-17 18:24:21 +00:00
{
2019-12-29 21:54:08 +00:00
return componentManager.GetComponentByEntityAndType<TComponent>(entity.ID);
2019-07-17 18:24:21 +00:00
}
protected bool HasComponent<TComponent>(Entity entity) where TComponent : struct, IComponent
{
2019-12-29 21:54:08 +00:00
return componentManager.EntityHasComponentOfType<TComponent>(entity.ID);
}
protected bool SomeComponent<TComponent>() where TComponent : struct, IComponent
{
return componentManager.SomeExistingComponent<TComponent>();
}
2019-06-19 21:14:44 +00:00
}
}