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 Guid GetEntityIDByComponentID(Guid componentID) { return componentManager.GetEntityIDByComponentID(componentID); } 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().Select(tuple => tuple.Item2); } protected IEnumerable<(TComponent, Entity)> ReadComponentsIncludingEntity() where TComponent : struct, IComponent { return componentManager.GetComponentsByType().Select(tuple => (tuple.Item2, GetEntity(GetEntityIDByComponentID(tuple.Item1)))); } 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).Item2; } protected bool HasComponent(Entity entity) where TComponent : struct, IComponent { return componentManager.EntityHasComponentOfType(entity); } protected bool SomeComponent() where TComponent : struct, IComponent { return componentManager.ComponentOfTypeExists(); } } }