import type { Able, AbleRegistry } from './able';
import type { Entity } from './entity';
import { EntityAbles } from './entity-ables';
import { Disposable, DisposableCollection, Emitter } from '@gedit/utils';
export interface AbleDispatchEvent
{
payloadKey: string | Symbol;
payload: P;
entityChangedKeys: string[];
}
export declare class AbleManager implements Disposable {
readonly toDispose: DisposableCollection;
private schedule;
protected onAbleChangedEmitter: Emitter;
protected onAbleDispatchEmitter: Emitter>;
/**
* Able的类缓存,便于在fromJSON时候查找对应的类
*/
protected registryMap: Map;
/**
* ableType -> Set
*/
protected entityDataMapByAble: Map;
/**
* payload -> Set
*/
protected payloadAbleMap: Map;
/**
* able对应的类型被更改
*/
readonly onAbleChanged: import("@gedit/utils").Event;
readonly onAbleDispatch: import("@gedit/utils").Event>;
constructor();
createAble(Registry: AbleRegistry, entity: Entity): Able;
/**
* 存储Able注册器
* @param Registry
*/
registerAble(Registry: AbleRegistry): void;
getRegistryByType(type: string): AbleRegistry | undefined;
/**
* 触发able,如果命中entity并使得entity数据变化,则返回true
* @param payloadKey
* @param payload
* @return 修改的 entity id
*/
dispatch(payloadKey: string | Symbol, payload: P): string[];
createAbleMap(entity: Entity): EntityAbles;
/**
* 通过able查找entity
* @param registry
*/
getEntitiesByAble(registry: AbleRegistry): T[];
getEntitiesByAbles(...registries: AbleRegistry[]): T[];
/**
* 获取单个实体
* @param registry
*/
getEntityByAble(registry: AbleRegistry): T | undefined;
protected fireAbleChanged(type: string): void;
dispose(): void;
}
//# sourceMappingURL=able-manager.d.ts.map