Files

194 lines
4.0 KiB
JavaScript
Raw Permalink Normal View History

2026-05-24 10:21:26 +08:00
"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();