MoonTools.ECS/src/Filter.cs

28 lines
902 B
C#
Raw Normal View History

2022-04-08 05:52:03 +00:00
using System;
using System.Collections.Generic;
2022-03-06 06:12:27 +00:00
2022-04-08 05:52:03 +00:00
namespace MoonTools.ECS
2022-03-06 06:12:27 +00:00
{
2022-04-08 05:52:03 +00:00
public class Filter
2022-03-06 06:12:27 +00:00
{
2022-04-08 05:52:03 +00:00
internal FilterSignature Signature;
private FilterStorage FilterStorage;
2022-03-06 06:12:27 +00:00
internal Filter(FilterStorage filterStorage, HashSet<int> included, HashSet<int> excluded)
2022-04-08 05:52:03 +00:00
{
FilterStorage = filterStorage;
2022-04-08 05:52:03 +00:00
Signature = new FilterSignature(included, excluded);
}
public ReverseSpanEnumerator<Entity> Entities => FilterStorage.FilterEntities(Signature);
public LinearCongruentialEnumerator EntitiesInRandomOrder => FilterStorage.FilterEntitiesRandom(Signature);
public Entity RandomEntity => FilterStorage.FilterRandomEntity(Signature);
2022-04-08 05:52:03 +00:00
public int Count => FilterStorage.FilterCount(Signature);
2022-04-08 05:52:03 +00:00
public bool Empty => Count == 0;
2022-08-17 22:29:38 +00:00
// WARNING: this WILL crash if the index is out of range!
public Entity NthEntity(int index) => FilterStorage.FilterNthEntity(Signature, index);
2022-04-08 05:52:03 +00:00
}
2022-03-06 06:12:27 +00:00
}