MoonTools.ECS/src/Rev2/FilterBuilder.cs

43 lines
956 B
C#
Raw Normal View History

2023-10-25 01:44:41 +00:00
using System.Collections.Generic;
namespace MoonTools.ECS.Rev2
{
public ref struct FilterBuilder
{
World World;
HashSet<ComponentId> Included;
HashSet<ComponentId> Excluded;
internal FilterBuilder(World world)
{
World = world;
Included = new HashSet<ComponentId>();
Excluded = new HashSet<ComponentId>();
}
private FilterBuilder(World world, HashSet<ComponentId> included, HashSet<ComponentId> excluded)
{
World = world;
Included = included;
Excluded = excluded;
}
public FilterBuilder Include<T>() where T : unmanaged
{
Included.Add(World.TypeToComponentId[typeof(T)]);
return new FilterBuilder(World, Included, Excluded);
}
public FilterBuilder Exclude<T>() where T : unmanaged
{
Excluded.Add(World.TypeToComponentId[typeof(T)]);
return new FilterBuilder(World, Included, Excluded);
}
public Filter Build()
{
return new Filter(World.EmptyArchetype, Included, Excluded);
}
}
}