type Action = { check: () => boolean, entry: () => void, do: (dt: number) => void, dispose: () => void }; export type ActionCreat = (...args: any) => Action; export default function get_new_action_center(): ActionCenter { return new ActionCenter(); } /**行为机*/ class ActionCenter { private _list: Action[] = []; private _current: Action; /**加入一个创建行为的闭包的函数 * ActionCreat = (...args: any) => Action; * Action ={check:() => boolean,entry:() => void,do:(dt:number)=>void} */ public add(actionCreat: ActionCreat, ...args: any): void { this._list.push(actionCreat(...args)); } /**检测和进入行为*/ public check_entry(): void { if (this._current?.check()) return; for (let i = 0; i < this._list.length; i++) { if (this._current != this._list[i] && this._list[i].check()) { this._current = this._list[i]; this._current.entry(); return; } } this._current = null; } /**是否有正在执行的行为 */ public get isAction(): boolean { return this._current != null; } /**执行行为*/ public do(dt: number): void { if (this._current) this._current.do(dt); } /**清除所有行为*/ public clean(): void { for (let i = 0; i < this._list.length; i++) { this._list[i].dispose(); } this._list.length = 0; this._current = null; } /*例子 public test():void{ const who={state:0}; this.add((who:{state:number})=>{ const w = who; let time:number=0; return{ check:()=>{ if(w.state==0){ return true; } return false; }, entry:()=>{ time=0; console.log("entry 行为1",time); }, do:(dt:number)=>{ time+=dt; if(time>=2){ console.log("do",time); w.state=1; }; } } },who); this.add((who:{state:number})=>{ const w = who; let time:number=0; return{ check:()=>{ if(w.state==1){ return true; } return false; }, entry:()=>{ time=0; console.log("entry 行为2",time); }, do:(dt:number)=>{ time+=dt; if(time>=2){ console.log("do",time); w.state=0; }; } } },who); }*/ }