Files
youlegames/codes/games/server/class/class.flow2.js
2026-02-04 23:47:45 +08:00

136 lines
4.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*=============== 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);
}
}
}
}
}