194 lines
4.0 KiB
JavaScript
194 lines
4.0 KiB
JavaScript
"use strict";
|
|
cc._RF.push(module, '5526aLX405Ol5a8gFH3zR0X', 'tip.mod');
|
|
// Scripts/nx/mods/tip/tip.mod.js
|
|
|
|
"use strict";
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* 全局提示管理
|
|
*
|
|
*
|
|
*
|
|
* 2020.08.31
|
|
******************************************************************************/
|
|
|
|
var MOD = require("nx.mod");
|
|
var TPDefine = require("tip.define");
|
|
var TipManager = cc.Class({
|
|
"extends": MOD,
|
|
name: "TipManager",
|
|
// 初始化
|
|
initialize: function initialize(_args) {
|
|
// USPER
|
|
this._super(_args);
|
|
|
|
// 插件
|
|
nx.plugin.add(this, ["view"]);
|
|
|
|
// 视图创建
|
|
this.vbuild(TPDefine.ViewTips);
|
|
|
|
// 重置
|
|
this.reset();
|
|
|
|
// 访问接口(设置)
|
|
nx.mTip = this;
|
|
return true;
|
|
},
|
|
// 销毁
|
|
uninitialize: function uninitialize() {
|
|
// 访问接口(关闭)
|
|
nx.mTip = null;
|
|
|
|
// USPER
|
|
return this._super();
|
|
},
|
|
// 通告: 进入游戏
|
|
onEnter: function onEnter() {
|
|
// 开启
|
|
this.vset("opened", true);
|
|
},
|
|
// 重置
|
|
reset: function reset() {
|
|
// 提示链重置
|
|
this.chain = nx.dt.objClone(TPDefine.TipChains);
|
|
this.close(this.chain);
|
|
},
|
|
// 递归关闭
|
|
close: function close(_chain) {
|
|
// 自身关闭
|
|
if (nx.dt.strNEmpty(_chain.key)) {
|
|
this.vset(_chain.key, false);
|
|
}
|
|
|
|
// 链条递归
|
|
if (nx.dt.objGood(_chain.sub)) {
|
|
for (var i in _chain.sub) {
|
|
this.close(_chain.sub[i]);
|
|
}
|
|
}
|
|
},
|
|
// 设置某项
|
|
openTip: function openTip(_key, _open) {
|
|
// 查询
|
|
var ifo = this.queryByKey(_key);
|
|
if (!ifo) {
|
|
nx.error("$Tip:无效的标记:" + _key);
|
|
return;
|
|
}
|
|
|
|
// 重复设置
|
|
if (this.vget(ifo.key) == _open) {
|
|
return;
|
|
}
|
|
|
|
// 非终端节点提示
|
|
if (nx.dt.objNEmpty(ifo.sub)) {
|
|
nx.error("$Tip:非终端标记,暂不支持!" + _key);
|
|
return;
|
|
}
|
|
|
|
// 设置
|
|
this.vset(ifo.key, _open);
|
|
|
|
// 刷新链条
|
|
this.freshChain(_key);
|
|
},
|
|
// 追加提示链
|
|
append: function append(_subchain) {
|
|
if (nx.dt.objEmpty(_subchain)) {
|
|
return;
|
|
}
|
|
|
|
// 已经存在先重置
|
|
var key = _subchain.key;
|
|
if (nx.dt.objNEmpty(this.chain.sub[key])) {
|
|
this.close(this.chain.sub[key]);
|
|
}
|
|
|
|
// 追加
|
|
this.chain.sub[key] = _subchain;
|
|
this.close(this.chain.sub[key]);
|
|
},
|
|
// 追加提示链
|
|
subAppend: function subAppend(_rootKey, _key, _tree) {
|
|
if (nx.dt.objEmpty(_tree)) {
|
|
return;
|
|
}
|
|
var chain = this.queryByKey(_rootKey);
|
|
if (!chain) {
|
|
nx.error("$Tip:追加提示链失败,路径无效!" + _rootKey);
|
|
return;
|
|
}
|
|
|
|
// 已经存在先重置
|
|
if (nx.dt.objNEmpty(chain.sub[_key])) {
|
|
this.close(chain.sub[_key]);
|
|
}
|
|
|
|
// 追加
|
|
chain.sub[_key] = _tree;
|
|
this.close(chain.sub[_key]);
|
|
},
|
|
// 查找某项
|
|
queryByKey: function queryByKey(_key) {
|
|
var arr = _key.split(".");
|
|
return this.queryByChain(arr);
|
|
},
|
|
// 查找某项
|
|
queryByChain: function queryByChain(_arr) {
|
|
var chain = this.chain;
|
|
if (!nx.dt.objNEmpty(chain)) {
|
|
return null;
|
|
}
|
|
for (var i = 0; i < _arr.length; ++i) {
|
|
var key = _arr[i];
|
|
chain = chain.sub ? chain.sub[key] : null;
|
|
if (!nx.dt.objNEmpty(chain)) {
|
|
return null;
|
|
}
|
|
}
|
|
return chain;
|
|
},
|
|
// 刷新链条
|
|
freshChain: function freshChain(_key) {
|
|
var self = this;
|
|
|
|
// 单级刷新
|
|
var fresh = function fresh(_arr) {
|
|
var ifo = self.queryByChain(_arr);
|
|
if (!ifo) {
|
|
return;
|
|
}
|
|
|
|
// 没有子节点保持原样
|
|
if (nx.dt.objEmpty(ifo.sub)) {
|
|
return;
|
|
}
|
|
|
|
// 根据子节点开关刷新
|
|
var open = false;
|
|
for (var id in ifo.sub) {
|
|
var s = ifo.sub[id];
|
|
if (s && self.vget(s.key)) {
|
|
open = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 更新
|
|
self.vset(ifo.key, open);
|
|
};
|
|
var arr = _key.split(".");
|
|
while (arr.length > 0) {
|
|
fresh(arr);
|
|
arr.splice(arr.length - 1, 1);
|
|
}
|
|
}
|
|
});
|
|
|
|
// 模块导出
|
|
module.exports = TipManager;
|
|
|
|
cc._RF.pop(); |