import { Game } from './Game.js'; import { Archetype } from './Archetype.js'; import { Filter } from './filters.js'; import { EntityImpostorFor, QueryIterator } from './QueryIterator.js'; import { EventSubscriber } from '@a-type/utils'; import { ComponentHandle } from './Component2.js'; export type QueryComponentFilter = Array | ComponentHandle>; export type QueryEvents = { entityAdded(entityId: number): void; entityRemoved(entityId: number): void; destroy(): void; }; type ExtractQueryDef> = Q extends Query ? Def : never; export type QueryIteratorFn, Returns = void> = { (ent: EntityImpostorFor>): Returns; }; export declare class Query extends EventSubscriber { private game; filter: Filter[]; readonly archetypes: Archetype[]; private trackedEntities; private addedThisFrame; private removedThisFrame; private changesThisFrame; private addedIterable; private unsubscribes; private unsubscribeArchetypes; private _generation; get generation(): number; constructor(game: Game); private processDef; initialize(def: FilterDef): void; private matchArchetype; reset: () => void; iterator: QueryIterator; [Symbol.iterator](): QueryIterator; first: () => EntityImpostorFor | null; private handleEntityAdded; private handleEntityRemoved; toString(): string; get archetypeIds(): string[]; get entities(): readonly number[]; get addedIds(): readonly number[]; get added(): { [Symbol.iterator]: () => AddedIterator; }; get removedIds(): readonly number[]; get count(): number; private addToList; private removeFromList; private resetStepTracking; private processAddRemove; private emitAdded; private emitRemoved; destroy: () => void; } declare class AddedIterator implements Iterator> { private game; private query; private index; private result; constructor(game: Game, query: Query); next(): IteratorResult, any>; } export {};