//流程模式 export enum GFSMProcessMode{ Execute,//正常运行 WaitExecute,//等待执行 } //流程信息 export interface GFSMProcessInfo{ //备注 title:string; //模式 mode?:GFSMProcessMode; //执行方法 execute?:() => number; //前往 to?:number[]; } //状态机基类 export default class GFSMBase{ //状态流程图 process:{[key:number]:GFSMProcessInfo} = {}; //开始流程Id start:number = 0; //当前流程 current:number = 0; //状态机刷新 onUpdate(dt:number){ if(!this.start) this.start = 0; if(!this.current) this.current = 0; //运行流程 this.execute(this.process[this.current]); } //执行流程 execute(process:GFSMProcessInfo){ if(!process) return; process.mode = process.mode || GFSMProcessMode.Execute; process.to = process.to || []; let next:number; let isReset:boolean = true; //执行流程 switch(process.mode){ case GFSMProcessMode.Execute: //执行方法 next = process.to[process.execute()-1]; break; case GFSMProcessMode.WaitExecute: //执行等待方法 let state = process.execute(); //如果 状态 -1 则 不重置 下一次状态从当前开始流程执行 if(state == -1){ isReset = false; }else{ next = state; } break; } if(!this.process[next]) next = null; if(next){ this.current = next; //运行下一个流程 this.execute(this.process[next]); }else{ if(isReset){ //重置 this.current = this.start; } } } }