using System.Collections.Generic; 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; } protected IEnumerable ReadEntities() where TComponent : struct, IComponent { foreach (var pair in ReadComponentsIncludingEntity()) { yield return pair.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 { var enumerator = ReadComponents().GetEnumerator(); enumerator.MoveNext(); return enumerator.Current; } protected (TComponent, Entity) ReadComponentIncludingEntity() where TComponent : struct, IComponent { var enumerator = ReadComponentsIncludingEntity().GetEnumerator(); enumerator.MoveNext(); return enumerator.Current; } 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(); } } }