Files
fc/dev/project/library/imports/b4/b49c634e-e522-40ec-ac3a-3532160282a9.js
2026-05-24 10:21:26 +08:00

606 lines
16 KiB
JavaScript

"use strict";
cc._RF.push(module, 'b49c6NO5SJA7Kw6NTIWAoKp', 'nx.gui');
// Scripts/nx/kernel/nx.gui.js
"use strict";
var _cc$Class;
/*******************************************************************************
*
* Nx UI相关方法
*
*
*
* 2021.12.10
******************************************************************************/
var NxObject = require("nx.object");
var nxGUI = cc.Class((_cc$Class = {
"extends": NxObject,
name: "nxGUI",
// 初始化
initialize: function initialize(_args) {
// USPER
if (!this._super(_args)) {
return false;
}
// 全局服务开启
nx.gui = this;
return true;
},
// 销毁
uninitialize: function uninitialize() {
// 全局服务关闭
nx.gui = null;
// USPER
return this._super();
},
// 子节点查找
// _names为cc.find参数格式 若_names空,则为_refnode
find: function find(_refnode, _names) {
if (!_refnode || !_refnode.isValid) {
return null;
}
if (_refnode instanceof cc.Component) {
_refnode = _refnode.node;
}
if (typeof _names != "string" || _names === "") {
return _refnode;
}
return cc.find(_names, _refnode);
},
// 获取子节点组件
getComponent: function getComponent(_refnode, _names, _cmpName, _create) {
if (_create === void 0) {
_create = false;
}
var node = this.find(_refnode, _names);
if (!node) {
return null;
}
var cmp = node.getComponent(_cmpName);
if (!cmp && _create) {
cmp = node.addComponent(_cmpName);
}
return cmp;
},
// 节点是否可见
isActive: function isActive(_refnode, _names) {
var node = this.find(_refnode, _names);
return node ? node.active : false;
},
// 节点有效
setActive: function setActive(_refnode, _names, _active) {
var node = this.find(_refnode, _names);
if (node) {
node.active = !!_active;
}
return node;
},
// 节点透明度
setOpacity: function setOpacity(_refnode, _names, _opacity) {
var node = this.find(_refnode, _names);
if (node) {
node.opacity = _opacity;
}
return node;
},
// 设置是否有效
setEnable: function setEnable(_refnode, _name, _enable) {
// 按钮
var btn = this.getComponent(_refnode, _name, cc.Button);
if (btn) {
btn.enabled = _enable;
return btn.node;
}
return null;
},
// 位置设定
setPosition: function setPosition(_refnode, _names, _pos) {
var node = this.find(_refnode, _names);
if (node) {
node.setPosition(_pos);
}
return node;
},
// 是否屏幕内可见
// _ofs[上,下,左,右]
isInFrameView: function isInFrameView(_refnode, _names, _ofs) {
var node = this.find(_refnode, _names);
if (!node) {
return false;
}
_ofs = _ofs || [0, 0, 0, 0];
var range = cc.view.getVisibleSize();
var pos = node.convertToWorldSpaceAR(cc.Vec2.ZERO);
var top = pos.y - node.height / 2;
var bottom = pos.y + node.height / 2;
var left = pos.x + node.width / 2;
var right = pos.x - node.height / 2;
return top <= range.height - _ofs[0] && bottom >= _ofs[1] && left >= _ofs[2] && right <= range.width - _ofs[3];
},
// 设置文本
setString: function setString(_refnode, _names, _text) {
var cmp = this.getComponent(_refnode, _names, cc.Label);
if (!cmp) {
cmp = this.getComponent(_refnode, _names, cc.RichText);
if (!cmp) {
cmp = this.getComponent(_refnode, _names, cc.EditBox);
}
}
if (cmp) {
_text += "";
cmp.string = _text || "";
}
return cmp;
},
// 设置富文本
setStringRich: function setStringRich(_refnode, _names, _text) {
var cmp = this.getComponent(_refnode, _names, cc.RichText);
if (cmp) {
_text += "";
cmp.string = _text == null ? "" : _text;
}
return cmp;
},
// 设置颜色
setColor: function setColor(_refnode, _names, _color) {
var node = this.find(_refnode, _names);
if (node) {
node.color = _color;
}
return node;
},
// 设置样式
setCSS: function setCSS(_refnode, _names, _cssKey) {
var cmp = this.getComponent(_refnode, _names, "nx.vb.theme");
if (cmp) {
cmp.setCSS(_cssKey);
}
return cmp;
},
// 设置描边色
setOutlineColor: function setOutlineColor(_refnode, _names, _color) {
var cmp = this.getComponent(_refnode, _names, cc.LabelOutline);
if (cmp) {
cmp.color = _color;
}
return cmp;
},
// 精灵褪色
fadeSpriteColor: function fadeSpriteColor(_refnode, _names, _isfade) {
var cmp = this.getComponent(_refnode, _names, cc.Sprite);
if (!cmp) {
return null;
}
cmp.setState(_isfade ? 1 : 0);
return cmp;
},
// 节点全色设置
setColorDeep: function setColorDeep(_refnode, _names, _color) {
var _setclr = function _setclr(_nd, _color) {
if (!_nd) {
return;
}
_nd.color = _color;
var children = _nd.children;
for (var i = 0; i < children.length; ++i) {
_setclr(children[i], _color);
}
};
var node = this.find(_refnode, _names);
if (node) {
_setclr(node, _color);
}
},
// 设置WEB图片
setWebImage: function setWebImage(_refnode, _names, _url, _ext) {
if (_ext === void 0) {
_ext = ".jpg";
}
var cmp = this.getComponent(_refnode, _names, cc.Sprite);
if (!cmp) {
return null;
}
cc.loader.load(_url, function (_err, _tex) {
if (_err) {
nx.warn("[远程]loadRemote加载失败:", _err.errorMessage || _err);
return;
}
nx.dt.trycatch(function () {
if (cmp) {
cmp.spriteFrame = new cc.SpriteFrame(_tex, new cc.Rect(0, 0, _tex.width, _tex.height), false, cc.Vec2.ZERO, new cc.Size(_tex.width, _tex.height));
}
});
});
return cmp;
},
// 设置精灵
setSpriteFrame: function setSpriteFrame(_refnode, _names, _sfkey, _cb) {
if (_cb === void 0) {
_cb = nx.dt.fnEmpty;
}
var sprite = this.getComponent(_refnode, _names, "nx.fx.sprite", true);
if (!sprite) {
nx.warn("[GUI]设置精灵失败,不是有效组件:%s", _names);
return null;
}
sprite.setSpriteFrame(_sfkey, _cb);
return this.getComponent(sprite, "", cc.Sprite);
},
// 设置合图精灵
setAtlasFrame: function setAtlasFrame(_refnode, _names, _sfkey, _opacity) {
if (_opacity === void 0) {
_opacity = false;
}
var cmp = this.getComponent(_refnode, _names, cc.Sprite);
if (!cmp) {
return null;
}
// 直接设置返回
if (typeof _sfkey != "string") {
cmp.spriteFrame = _sfkey;
return cmp;
}
// 频繁设置
if (cmp.loading) {
nx.warn("[GUI]设置合图频繁:");
nx.warn("\t\t进行中:", nx.dt.enjson(cmp.loading));
nx.warn("\t\t顶替为:", nx.dt.enjson({
names: _names,
rkey: _sfkey
}));
cmp.loading = null;
}
// 记录
cmp.loading = {
names: _names,
rkey: _sfkey
};
if (_opacity) {
cmp.node.opacity = op;
}
nx.res.loadAtlasFrame(_sfkey, function (_error, _sframe) {
// 记录还原
cmp.loading = null;
if (_opacity) {
cmp.node.opacity = op;
}
cmp.spriteFrame = _sframe;
});
return cmp;
},
// 设置子图
setLocAtlas: function setLocAtlas(_refnode, _names, _key) {
var cmp = this.getComponent(_refnode, _names, "xLocalAtlas");
if (!cmp) {
nx.warn("子图设定失败,错误的组件:" + _key);
return null;
}
cmp.set(_key);
return cmp;
},
// 设置本地文本
setLocText: function setLocText(_refnode, _names, _key) {
var cmp = this.getComponent(_refnode, _names, "xLocalText");
if (!cmp) {
nx.warn("文本设定失败,错误的组件:" + _key);
return null;
}
cmp.set(_key);
return cmp;
},
// 按钮锁&解锁
setLocked: function setLocked(_refnode, _names, _locked) {
var cmp = this.getComponent(_refnode, _names, "nx.fx.button");
if (!cmp) {
cmp = this.getComponent(_refnode, _names, "nx.fx.button.wnd");
if (!cmp) {
nx.warn("按钮锁&解锁,错误的组件:" + _locked);
return null;
}
}
cmp.lock(!!_locked);
return cmp;
},
setCdTxt: function setCdTxt(_node, _names, _sec, _endCall) {
var cmp = nx.gui.getComponent(_node, _names, "nx.fx.cd", true);
if (!cmp) {
nx.warn("计时组件不存在:" + _names);
return;
}
cmp.setSecs(_sec, _endCall);
return cmp;
},
// 子节点全隐藏
hideAllChildren: function hideAllChildren(_refnode, _names) {
var parent = this.find(_refnode, _names);
if (parent) {
for (var i = 0; i < parent.childrenCount; i++) {
this.setActive(parent.children[i], null, false);
}
}
return parent;
},
// 清空子节点
cleanAllChildren: function cleanAllChildren(_refnode, _names) {
var parent = this.find(_refnode, _names);
if (parent) {
var chd = parent.children;
if (chd.length > 0) {
for (var i = 0; i < chd.length; i++) {
if (chd[i]) {
chd[i].destroy();
}
}
}
}
return parent;
},
// 子节点批量补全
gocChildren: function gocChildren(_refnode, _names, _count, _prefab, _justHide) {
if (_justHide === void 0) {
_justHide = true;
}
var parent = this.find(_refnode, _names);
if (!parent) {
nx.error("子节点补全失败,无效父节点!");
return;
}
// 需要补全
if (_count >= parent.childrenCount) {
_prefab = _prefab || parent.children[0];
if (!_prefab) {
nx.error("子节点补全失败,无效模板!");
return;
}
// 实例化缺少数量的节点
var cloneCount = _count - parent.childrenCount;
for (var i = 0; i < cloneCount; i++) {
parent.addChild(cc.instantiate(_prefab));
}
if (_justHide) {
parent.children.forEach(function (_node) {
if (!_node.active) {
_node.active = true;
}
});
}
return;
}
// 统计多余的个数
if (_justHide) {
for (var _i in parent.children) {
var node = parent.children[_i];
node.active = _i < _count;
}
} else {
var nodes = [];
var count = parent.childrenCount - _count;
for (var _i2 = 1; _i2 <= count; ++_i2) {
var idx = parent.children.length - _i2;
nodes.push(parent.children[idx]);
}
nodes.forEach(function (_nd) {
_nd.removeFromParent(true);
});
}
},
// 执行某方法
doSth: function doSth(_refnode, _names, _func, _data) {
var node = this.find(_refnode, _names);
if (node && nx.dt.fnGood(_func)) {
_func(node, _data);
}
return node;
},
// 对齐方式
// Key: center, lt, ld, rt, rd
setAligment: function setAligment(_refnod, _names, _key, _p1, _p2) {
if (_p1 === void 0) {
_p1 = 0;
}
if (_p2 === void 0) {
_p2 = 0;
}
var widget = nx.gui.getComponent(_refnod, _names, cc.Widget);
if (!widget) {
nx.error("[GUI]对齐失败,找不到Widget组件!");
return;
}
switch (_key) {
case "lt":
{
widget.isAlignLeft = true;
widget.isAlignTop = true;
widget.isAlignBottom = false;
widget.isAlignRight = false;
widget.left = _p1 || 0;
widget.top = _p2 || 0;
}
break;
case "ld":
{
widget.isAlignLeft = true;
widget.isAlignTop = false;
widget.isAlignBottom = true;
widget.isAlignRight = false;
widget.left = _p1 || 0;
widget.bottom = _p2 || 0;
}
break;
case "rt":
{
widget.isAlignLeft = false;
widget.isAlignTop = true;
widget.isAlignBottom = false;
widget.isAlignRight = true;
widget.right = _p1 || 0;
widget.top = _p2 || 0;
}
break;
case "rd":
{
widget.isAlignLeft = false;
widget.isAlignTop = false;
widget.isAlignBottom = true;
widget.isAlignRight = true;
widget.right = _p1 || 0;
widget.bottom = _p2 || 0;
}
break;
default:
{
widget.isAlignVerticalCenter = true;
widget.isAlignHorizontalCenter = true;
widget.horizontalCenter = _p1 || 0;
widget.verticalCenter = _p2 || 0;
}
break;
}
widget.updateAlignment();
return widget;
},
// 按钮无效化
// 背景褪色,子节点调整透明度
btnFadeColorAndAlphaChildren: function btnFadeColorAndAlphaChildren(_refnode, _names, _isfade) {
var nd = this.find(_refnode, _names);
nd.color = _isfade ? cc.Color.GRAY : cc.Color.WHITE;
// 子节点调整透明度
var children = nd.children;
for (var i = 0; i < children.length; ++i) {
if (children[i].name !== "bg") {
children[i].opacity = _isfade ? 100 : 255;
}
}
},
// 按钮锁定(用于QA模式,避免重复触发)
lockButton: function lockButton(_refnode, _names, _uifunc) {
var cmp = this.getComponent(_refnode, _names, "xButton");
if (cmp) {
cmp.setInteract(false, _uifunc || this.btnFadeColorAndAlphaChildren.bind(this));
}
return cmp;
},
// 按钮解锁(用于QA模式,避免重复触发)
unlockButton: function unlockButton(_refnode, _names, _uifunc) {
var cmp = this.getComponent(_refnode, _names, "xButton");
if (cmp) {
cmp.setInteract(true, _uifunc || this.btnFadeColorAndAlphaChildren.bind(this));
}
return cmp;
},
// 视图绑定-文本
vbindText: function vbindText(_refnode, _names, _target, _key, _fmt) {
var cmp = this.getComponent(_refnode, _names, "nx.vb.text");
if (cmp) {
cmp.setTarget(_target, _key, _fmt);
}
return cmp;
},
// 视图绑定-富文本
vbindRichText: function vbindRichText(_refnode, _names, _target, _key, _fmt) {
var cmp = this.getComponent(_refnode, _names, "nx.vb.richText");
if (cmp) {
cmp.setTarget(_target, _key, _fmt);
}
return cmp;
},
// 视图绑定-图片
vbindImage: function vbindImage(_refnode, _names, _target, _key) {
var cmp = this.getComponent(_refnode, _names, "nx.vb.sprite");
if (cmp) {
cmp.setTarget(_target, _key);
}
return cmp;
},
// 视图绑定-进度条
vbindProgress: function vbindProgress(_refnode, _names, _target, _key1, _key2) {
var cmp = this.getComponent(_refnode, _names, "nx.vb.progress");
if (cmp) {
cmp.setTarget(_target, _key1, _key2);
}
return cmp;
},
// 视图绑定-显示控制
vbindVisible: function vbindVisible(_refnode, _names, _target, _key) {
var cmp = this.getComponent(_refnode, _names, "nx.vb.visible");
if (cmp) {
cmp.setTarget(_target, _key);
}
return cmp;
}
}, _cc$Class["setAtlasFrame"] = function setAtlasFrame(_refnode, _names, _sfkey) {
var cmp = this.getComponent(_refnode, _names, cc.Sprite);
if (!cmp) {
return null;
}
if (typeof _sfkey == "string") {
nx.res.loadAtlasFrame(_sfkey, function (_error, _sframe) {
cmp.spriteFrame = _sframe;
});
} else {
cmp.spriteFrame = _sfkey;
}
return cmp;
}, _cc$Class.setFrameAnimation = function setFrameAnimation(_refnode, _names, _rkey, _cb, _loop, _speed) {
if (_loop === void 0) {
_loop = true;
}
if (_speed === void 0) {
_speed = 0;
}
var cmp = this.getComponent(_refnode, _names, "nx.fx.animFrames", true);
if (!cmp) {
nx.error("[GUI]找不到帧动画播放组件!");
return null;
}
// 播放
cmp.isLoop = _loop;
if (_speed > 0) {
cmp.speed = _speed;
}
cmp.load2Play(_rkey, _cb);
return cmp;
}, _cc$Class.playDragonDones = function playDragonDones(_refnode, _names, _rkey, _action, _cb, _loop) {
if (_loop === void 0) {
_loop = true;
}
var cmp = this.getComponent(_refnode, _names, "nx.fx.dragonBones", true);
if (!cmp) {
nx.error("[GUI]找不到DragonBones组件!");
return null;
}
// 播放
cmp.play(_rkey, _action, _cb, _loop);
return cmp;
}, _cc$Class.playSpine = function playSpine(_refnode, _names, _rkey, _action, _cb, _loop) {
if (_loop === void 0) {
_loop = true;
}
var cmp = this.getComponent(_refnode, _names, "nx.fx.spine", true);
if (!cmp) {
nx.error("[GUI]找不到Spine组件!");
return null;
}
// 播放
cmp.play(_rkey, _action, _cb, _loop);
return cmp;
}, _cc$Class));
// 模块导出
module.exports = nxGUI;
cc._RF.pop();