2022-04-08 05:52:03 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2023-10-13 20:42:22 +00:00
|
|
|
|
using MoonTools.ECS.Collections;
|
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;
|
2023-01-10 00:41:00 +00:00
|
|
|
|
private FilterStorage FilterStorage;
|
2022-03-06 06:12:27 +00:00
|
|
|
|
|
2023-10-13 20:42:22 +00:00
|
|
|
|
internal Filter(FilterStorage filterStorage, IndexableSet<int> included, IndexableSet<int> excluded)
|
2022-04-08 05:52:03 +00:00
|
|
|
|
{
|
2023-01-10 00:41:00 +00:00
|
|
|
|
FilterStorage = filterStorage;
|
2022-04-08 05:52:03 +00:00
|
|
|
|
Signature = new FilterSignature(included, excluded);
|
|
|
|
|
}
|
2022-04-02 08:00:48 +00:00
|
|
|
|
|
2023-01-10 00:41:00 +00:00
|
|
|
|
public ReverseSpanEnumerator<Entity> Entities => FilterStorage.FilterEntities(Signature);
|
2023-04-06 21:54:20 +00:00
|
|
|
|
public RandomEntityEnumerator EntitiesInRandomOrder => FilterStorage.FilterEntitiesRandom(Signature);
|
2023-01-10 00:41:00 +00:00
|
|
|
|
public Entity RandomEntity => FilterStorage.FilterRandomEntity(Signature);
|
2022-04-08 05:52:03 +00:00
|
|
|
|
|
2023-01-10 00:41:00 +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!
|
2023-01-10 00:41:00 +00:00
|
|
|
|
public Entity NthEntity(int index) => FilterStorage.FilterNthEntity(Signature, index);
|
2023-01-27 00:34:15 +00:00
|
|
|
|
|
|
|
|
|
public void RegisterAddCallback(Action<Entity> callback)
|
|
|
|
|
{
|
|
|
|
|
FilterStorage.RegisterAddCallback(Signature, callback);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RegisterRemoveCallback(Action<Entity> callback)
|
|
|
|
|
{
|
|
|
|
|
FilterStorage.RegisterRemoveCallback(Signature, callback);
|
|
|
|
|
}
|
2022-04-08 05:52:03 +00:00
|
|
|
|
}
|
2022-03-06 06:12:27 +00:00
|
|
|
|
}
|