136 lines
4.1 KiB
JavaScript
136 lines
4.1 KiB
JavaScript
/*=============== 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);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|