using System; using System.Collections.Generic; 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 : unmanaged { ComponentDepot.Register(); Included.Add(typeof(TComponent)); return new FilterBuilder(ComponentDepot, Included, Excluded); } public FilterBuilder Exclude() where TComponent : unmanaged { ComponentDepot.Register(); Excluded.Add(typeof(TComponent)); return new FilterBuilder(ComponentDepot, Included, Excluded); } public Filter Build() { return ComponentDepot.CreateFilter(Included, Excluded); } } }