using System; using System.Collections.Generic; using System.Linq; namespace Encompass { public abstract class Renderer { internal EntityManager entityManager; internal ComponentManager componentManager; internal void AssignEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } internal void AssignComponentManager(ComponentManager componentManager) { this.componentManager = componentManager; } internal Entity GetEntity(Guid entityID) { return entityManager.GetEntity(entityID); } protected IEnumerable ReadEntities() where TComponent : struct, IComponent { return ReadComponentsIncludingEntity().Select(tuple => tuple.Item2); } protected Entity ReadEntity() where TComponent : struct, IComponent { return ReadComponentIncludingEntity().Item2; } protected IEnumerable ReadComponents() where TComponent : struct, IComponent { return componentManager.GetComponentsByType(); } protected IEnumerable<(TComponent, Entity)> ReadComponentsIncludingEntity() where TComponent : struct, IComponent { return componentManager.GetComponentsIncludingEntity(); } protected TComponent ReadComponent() where TComponent : struct, IComponent { return ReadComponents().First(); } protected (TComponent, Entity) ReadComponentIncludingEntity() where TComponent : struct, IComponent { return ReadComponentsIncludingEntity().First(); } protected TComponent GetComponent(Entity entity) where TComponent : struct, IComponent { return componentManager.GetComponentByEntityAndType(entity); } protected bool HasComponent(Entity entity) where TComponent : struct, IComponent { return componentManager.EntityHasComponentOfType(entity); } protected bool SomeComponent() where TComponent : struct, IComponent { return componentManager.ComponentOfTypeExists(); } } }