/*=============== cls_flowMgr2: 流程管理类 =============== 注意: 1,子游戏开发人员不能修改该文件。 =========================================================*/ var cls_flowMgr2 = { //创建实例 new: function(){ object = {}; //流程库 object.lib = []; //流程配置 object.steplist = []; //当前流程,即steplist的数组下标 object.idx = -1; object.method = {}; //在流程库中添加一个流程 object.method.addflow = function(id, name, func_start, func_over, time, flag1, flag2){ /*参数说明: id : 流程id,必须唯一 name : 流程名,主要起到说明和备注的作用 func_start: 进入该流程时执行的函数(先完成本流程的开始处理,再根据time开启定时器) func_over : 该流程结束时执行的函数(先完成本流程的结束处理,再进入下一流程) time : 进入该流程后开启的定时器(自动触发func_over结束该流程)时长,毫秒 -1: 不需要开启定时器,需要用户触发func_over结束流程 0: 不需要开启定时器,执行完func_start后立即执行func_over结束流程 >0: 需要开启定时器,定时器自动触发func_over结束流程 flag1: 进入流程时执行完func_start后,是否由子游戏开启本流程的定时器,默认为0 0: 由流程管理对象管理 1: 由子游戏管理 flag2: 结束流程时执行完func_over后,是否由子游戏关闭定时器并进入下一流程,默认为0 0: 由流程管理对象管理 1: 由子游戏管理*/ return cls_flowMgr2.addflow(object, id, name, func_start, func_over, time, flag1, flag2); } //设置流程。参数steplist为流程配置,是一个流程id数组,如[2,1,1,3,2,4] object.method.set = function(steplist){ object.steplist = steplist; } //获取当前流程 object.method.currflow = function(){ cls_flowMgr2.currflow(object); } //开始按流程配置执行 object.method.startflow = function(){ cls_flowMgr2.startflow(object); } //进入下一流程 object.method.nextflow = function(){ cls_flowMgr2.nextflow(object); } return object; }, //在流程库中添加一个流程 addflow: function(o_flowMgr, id, name, func_start, func_over, time, flag1, flag2){ var o_flow = {}; o_flow.id = id; //流程id o_flow.name = name; //流程名 o_flow.func_start = func_start; //进入该流程是执行的函数 o_flow.func_over = func_over; //该流程结束时执行的函数 o_flow.time = time; //进入该流程后开启的定时器时长 o_flow.flag1 = flag1; o_flow.flag2 = flag2; o_flow.timer = null; //定时器id o_flowMgr.lib.push(o_flow); return o_flow; }, //获取当前流程 currflow: function(o_flowMgr){ if (!o_flowMgr.steplist || o_flowMgr.steplist.length == 0){ return null; } if (o_flowMgr.idx == -1 || o_flowMgr.idx >= o_flowMgr.steplist.length){ return null; } var flowid = o_flowMgr.steplist[o_flowMgr.idx]; var flowidx = min_ary_indexof(o_flowMgr.lib, flowid, "id"); if (flowidx == -1){ return null; } return o_flowMgr.lib[flowidx]; }, //开始按流程配置执行程序 startflow: function(o_flowMgr){ if (o_flowMgr.lib.length == 0){ return; } if (o_flowMgr.steplist.length == 0){ return; } o_flowMgr.idx = 0; this.exec(o_flowMgr); }, //进入下一流程 nextflow: function(o_flowMgr){ var o_flow = this.currflow(o_flowMgr); if (o_flow){ if (o_flow.func_over) { o_flow.func_over(); } if (!o_flow.flag2){ if (o_flow.timer){ clearTimeout(o_flow.timer); o_flow.timer = null; } } } o_flowMgr.idx = o_flowMgr.idx + 1; this.exec(o_flowMgr); }, //执行当前流程 exec: function(o_flowMgr){ var o_flow = this.currflow(o_flowMgr); if (!o_flow){ return; } if (!o_flow.func_start){ return; } o_flow.func_start(); if (o_flow.time == 0) { this.nextflow(o_flowMgr); } else if (o_flow.time > 0) { //需要开启定时器 if (!o_flow.flag1) { if (o_flow.func_over) { o_flow.timer = setTimeout(o_flow.func_over, o_flow.time); } } } } }