"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();