MoonTools.ECS/src/Filter.cs

38 lines
1.1 KiB
C#

using System;
using System.Collections.Generic;
namespace MoonTools.ECS
{
public class Filter
{
internal FilterSignature Signature;
private FilterStorage FilterStorage;
internal Filter(FilterStorage filterStorage, HashSet<int> included, HashSet<int> excluded)
{
FilterStorage = filterStorage;
Signature = new FilterSignature(included, excluded);
}
public ReverseSpanEnumerator<Entity> Entities => FilterStorage.FilterEntities(Signature);
public RandomEntityEnumerator EntitiesInRandomOrder => FilterStorage.FilterEntitiesRandom(Signature);
public Entity RandomEntity => FilterStorage.FilterRandomEntity(Signature);
public int Count => FilterStorage.FilterCount(Signature);
public bool Empty => Count == 0;
// WARNING: this WILL crash if the index is out of range!
public Entity NthEntity(int index) => FilterStorage.FilterNthEntity(Signature, index);
public void RegisterAddCallback(Action<Entity> callback)
{
FilterStorage.RegisterAddCallback(Signature, callback);
}
public void RegisterRemoveCallback(Action<Entity> callback)
{
FilterStorage.RegisterRemoveCallback(Signature, callback);
}
}
}