"use strict"; cc._RF.push(module, '2127eKwFn1MN4u+/GC+G1GT', 'wnd.message'); // Scripts/nx/cmp/message/wnd.message.js "use strict"; /******************************************************************************* * * 消息UI管理 * * * * 2021.12.10 ******************************************************************************/ var SEC_FadeIn = 0.3; var SEC_Delay = 0.7; var SEC_FadeOut = 2; cc.Class({ "extends": cc.Component, properties: { nodTmp: { "default": null, type: cc.Node, displayName: "样本层" }, rootBox: { "default": null, type: cc.Node, displayName: "弹框层" }, rootTips: { "default": null, type: cc.Node, displayName: "轻提示层" }, maxTipWidth: { "default": 0.7, displayName: "宽度限制" } }, // 载入 onLoad: function onLoad() { // 全局服务 nx.msgUI = this; // 界面初始化 this.nodTmp.active = false; // 基本变量 this.tipCur = ""; // 当前轻提示 this.boxQueue = []; // 弹框队列 this.tipQueue = []; // 轻提示队列 // 蒙版控制 this.rootBox.on("child-added", this._onFreshMask, this); this.rootBox.on("child-removed", this._onFreshMask, this); this._onFreshMask(); }, // 销毁 onDestroy: function onDestroy() { if (window.nx) { // 全局服务 nx.msgUI = null; } // 全部关闭 // this.closeAll(); }, // 全部关闭 closeAll: function closeAll() { // 计时器销毁 this.unscheduleAllCallbacks(); this.tipCur = ""; this.boxQueue = []; this.tipQueue = []; this.rootBox.removeAllChildren(); this.rootTips.removeAllChildren(); }, /*** * ********************************************************************* * 弹窗 * ********************************************************************* */ // 弹窗提示 popBox: function popBox(_text, _btns, _cb, _skey) { if (_skey === void 0) { _skey = ""; } var boxes = this.rootBox.children; // 唯一性查找 if (nx.dt.strNEmpty(_skey) && boxes.length > 0) { for (var i in boxes) { if (boxes[i].skey == _skey) { nx.warn("重复弹窗:" + _skey); return; } } } // 新建 var temp = nx.gui.find(this.nodTmp, "mbox"); if (!temp || nx.dt.strEmpty(_text + '')) { nx.error("创建弹窗提示失败,条件不足!"); return; } var box = cc.instantiate(temp); if (!box) { nx.error("创建弹窗提示失败!"); return; } box.position = cc.Vec2.ZERO; box.parent = this.rootBox; box.skey = _skey; var cmp = box.getComponent("cmp.message.box"); cmp.show(_text + '', _btns, _cb, function () {}); }, // 指定关闭弹框 closeBox: function closeBox(_skey) { if (nx.dt.strEmpty(_skey)) { return; } var boxes = this.rootBox.children; for (var i in boxes) { var box = boxes[i]; if (box && box.skey == _skey) { box.removeFromParent(true); break; } } }, // 蒙版刷新 _onFreshMask: function _onFreshMask() { var count = this.rootBox.childrenCount; nx.gui.setActive(this.rootBox, "mask", count > 1); }, /*** * ********************************************************************* * 轻态 * ********************************************************************* */ // 轻态提示 popTip: function popTip(_text) { // 空处理 if (nx.dt.strEmpty(_text)) { nx.error("创建轻态提示失败,条件不足!"); return; } // 去重 var txt = nx.text.getKey(_text); if (nx.dt.arrMember(this.tipQueue, txt)) { nx.warn("提示去重:", txt); return; } // 压入队列 this.tipQueue.push(txt); if (nx.dt.strEmpty(this.tipCur)) { this._nextTip(); } }, // 弹出提示 _nextTip: function _nextTip() { var _this = this; // 空结束 if (nx.dt.arrEmpty(this.tipQueue)) { this.tipCur = ""; this.tipQueue = []; return; } // 位置规划 if (!this.popPath) { this.popPath = { start: this.rootTips.getChildByName("start"), stay: this.rootTips.getChildByName("stay"), end: this.rootTips.getChildByName("end") }; } // 弹出一条 var txt = this.tipQueue.shift(); if (nx.dt.strEmpty(txt)) { this._nextTip(); return; } // 弹出有效 && 实例化 this.tipCur = txt; // 弹窗处理 var pos = Math.max(txt.search("/>"), txt.search("