namespace MoonTools.ECS; public abstract class EntityComponentReader { internal EntityStorage EntityStorage; internal ComponentDepot ComponentDepot; protected FilterBuilder FilterBuilder => new FilterBuilder(ComponentDepot); internal void RegisterEntityStorage(EntityStorage entityStorage) { EntityStorage = entityStorage; } internal void RegisterComponentDepot(ComponentDepot componentDepot) { ComponentDepot = componentDepot; } // TODO: is this faster or slower than a single-component Filter? protected ReadOnlySpan ReadEntities() where TComponent : struct { return ComponentDepot.ReadEntities(); } protected ReadOnlySpan ReadComponents() where TComponent : struct { return ComponentDepot.ReadComponents(); } protected bool Has(in Entity entity) where TComponent : struct { return ComponentDepot.Has(entity.ID); } protected bool Some() where TComponent : struct { return ComponentDepot.Some(); } protected ref readonly TComponent Get(in Entity entity) where TComponent : struct { return ref ComponentDepot.Get(entity.ID); } protected ref readonly TComponent Get() where TComponent : struct { return ref ComponentDepot.Get(); } protected ref readonly Entity GetEntity() where TComponent : struct { return ref ComponentDepot.GetEntity(); } }