module es { export class Matcher{ protected allSet = new BitSet(); protected exclusionSet = new BitSet(); protected oneSet = new BitSet(); public static empty(){ return new Matcher(); } public getAllSet(){ return this.allSet; } public getExclusionSet(){ return this.exclusionSet; } public getOneSet(){ return this.oneSet; } public IsIntersted(e: Entity){ if (!this.allSet.isEmpty()){ for (let i = this.allSet.nextSetBit(0); i >= 0; i = this.allSet.nextSetBit(i + 1)){ if (!e.componentBits.get(i)) return false; } } if (!this.exclusionSet.isEmpty() && this.exclusionSet.intersects(e.componentBits)) return false; if (!this.oneSet.isEmpty() && !this.oneSet.intersects(e.componentBits)) return false; return true; } public all(...types: any[]): Matcher{ types.forEach(type => { this.allSet.set(ComponentTypeManager.getIndexFor(type)); }); return this; } public exclude(...types: any[]){ types.forEach(type => { this.exclusionSet.set(ComponentTypeManager.getIndexFor(type)); }); return this; } public one(...types: any[]){ types.forEach(type => { this.oneSet.set(ComponentTypeManager.getIndexFor(type)); }); return this; } } }