/* eslint-disable @typescript-eslint/no-explicit-any */ import type { EntityData, EntityDataRegistry } from './entity-data'; import { DisposableImpl } from '@gedit/utils'; import type { Entity } from './entity'; import { getHandleParams } from './playground-decorator-helper'; import type { EntityManager } from './entity-manager'; interface AbleHandle
{ handle(data1: EntityData, payload: P): void handle(data1: EntityData, data2: EntityData, payload: P): void handle(data1: EntityData, data2: EntityData, data3: EntityData, payload: P): void handle(data1: EntityData, data2: EntityData, data3: EntityData, data4: EntityData, payload: P): void handle(data1: EntityData, data2: EntityData, data3: EntityData, data4: EntityData, data5: EntityData, payload: P): void } // eslint-disable-next-line @typescript-eslint/no-explicit-any export abstract class Able
extends DisposableImpl implements AbleHandle
{
static type = 'Able';
constructor(
protected entity: Entity
) {
super();
this.entityManager = entity.entityManager;
}
/**
* 类型名称
*/
get type(): string {
if (!(this.constructor as any).type) {
throw new Error('Able Registry need a type: ' + this.constructor.name);
}
return (this.constructor as any).type;
}
payload: P;
/**
* handle 和 before 执行之前, 且只执行一次
* @param entities - 所有绑定该able的实体列表
* @param payload
* @return 返回新的payload, undefined则会阻断handle执行
*/
static globalBefore?(entities: Entity[], payload: any): any | undefined
/**
* handle执行之前, 每个实体都是执行
* @return 返回新的payload, undefined则会阻断handle执行
*/
before?(payload: P): P | undefined
/**
* 消费payload
*/
abstract handle(...args: any[]): void;
/**
* handle执行之后
*/
after?(payload: P): void
/**
* handle 和 before 执行之后, 且只执行一次
* @param payload
* @param entities - 所有绑定该able的实体列表
*/
static globalAfter?(entities: Entity[], payload: any): void
/**
* 获取当前Able注册的数据
* @param registry
*/
getParam