namespace MoonTools.ECS; public struct FilterBuilder { private ComponentDepot ComponentDepot; private HashSet Included; private HashSet Excluded; internal FilterBuilder(ComponentDepot componentDepot) { ComponentDepot = componentDepot; Included = new HashSet(); Excluded = new HashSet(); } private FilterBuilder(ComponentDepot componentDepot, HashSet included, HashSet excluded) { ComponentDepot = componentDepot; Included = included; Excluded = excluded; } public FilterBuilder Include() where TComponent : struct { ComponentDepot.Register(); Included.Add(typeof(TComponent)); return new FilterBuilder(ComponentDepot, Included, Excluded); } public FilterBuilder Exclude() where TComponent : struct { ComponentDepot.Register(); Excluded.Add(typeof(TComponent)); return new FilterBuilder(ComponentDepot, Included, Excluded); } public Filter Build() { return ComponentDepot.CreateFilter(Included, Excluded); } }