using MoonTools.ECS.Collections; namespace MoonTools.ECS { public struct FilterBuilder { World World; IndexableSet Included; IndexableSet Excluded; internal FilterBuilder(World world) { World = world; Included = new IndexableSet(); Excluded = new IndexableSet(); } private FilterBuilder(World world, IndexableSet included, IndexableSet excluded) { World = world; Included = included; Excluded = excluded; } public FilterBuilder Include() where T : unmanaged { Included.Add(World.GetComponentTypeId()); return new FilterBuilder(World, Included, Excluded); } public FilterBuilder Exclude() where T : unmanaged { Excluded.Add(World.GetComponentTypeId()); return new FilterBuilder(World, Included, Excluded); } public Filter Build() { var signature = new FilterSignature(Included, Excluded); return World.GetFilter(signature); } } }