Files
fc/dev/project/library/imports/46/465b87d4-6537-4ac4-9138-9792231bf823.js
T
2026-05-24 10:21:26 +08:00

263 lines
6.8 KiB
JavaScript

"use strict";
cc._RF.push(module, '465b8fUZTdKxJE4l5IjG/gj', 'cmp.personal.figure.wnd');
// Scripts/mod/personal/cmps/cmp.personal.figure.wnd.js
"use strict";
/******************************************************************
*
* 形象设置
*
******************************************************************/
var BridgeWindow = require("bridge.window");
var RoleController = require("role_controller");
var FxTogs = require("nx.fx.togs");
var FxSVC = require("nx.fx.sv.expand");
// 菜单标签
var MenuTags = {
Partner: 0,
Skin: 1
};
cc.Class({
"extends": BridgeWindow,
properties: {
togMenu: {
"default": null,
type: FxTogs
},
nodShow: {
"default": null,
type: cc.Node
},
lstPartners: {
"default": null,
type: FxSVC
}
},
// 重载:参数打开
onOpenConfigs: function onOpenConfigs(_params) {
// 当前拥有
this.library = [];
this.idxPartner = -1;
this.use_id = _params.use_id || 0;
this.figures = _params.list || [];
// Tog监听
this.togMenu.posTog = this.onTogMenu.bind(this);
this.togMenu.togTo(MenuTags.Partner);
this.onTogMenu(MenuTags.Partner);
},
// 重载:关闭前
onPreClosed: function onPreClosed() {
this.lstPartners.rebuild([]);
},
// 等级切换
onTogMenu: function onTogMenu(_index) {
var _this = this;
this.tagMenu = _index;
// 重置
this.idxPartner = -1;
this.partners = this.queryFigureList(this.tagMenu);
this.lstPartners.rebuild(this.partners);
// 聚焦
this.lstPartners.cleanFocus();
this.scheduleOnce(function () {
_this.setUsedPartner(_this.use_id);
_this.onPartnerChanged({
index: 0,
mdata: _this.partners[0]
});
}, 0.1);
},
// 设置展示角色
setCurrent: function setCurrent(_info) {
// 置空
if (nx.dt.objEmpty(_info)) {
nx.gui.setActive(this.nodShow, "show", false);
nx.gui.setActive(this.nodShow, "cond", false);
nx.gui.setActive(this.nodShow, "props", false);
return;
}
// 模型
nx.gui.setActive(this.nodShow, "show", true);
var model = nx.gui.getComponent(this.nodShow, "show", "nx.fx.spine");
if (model) {
var path = PathTool.getSpinePath(_info.model, _info.model, false);
model.load(path, function (_e) {
if (!_e) {
model.action("stand2", true);
} else {
model.stop();
}
});
}
// 属性
var text = "FigureNoProps";
nx.gui.setActive(this.nodShow, "props", true);
if (nx.dt.arrNEmpty(_info.attr)) {
text = nx.bridge.attrs.strAttributes(_info.attr);
}
nx.gui.setString(this.nodShow, "props/txt", nx.text.getKey(text));
// 解锁
text = "FigureUnlocked";
nx.gui.setActive(this.nodShow, "cond", true);
if (!_info.unlock) {
text = _info.tip;
}
nx.gui.setString(this.nodShow, "cond/txt", nx.text.getKey(text));
},
// ================================================================
// 伙伴相关
// ================================================================
// 设置当前使用的伙伴形象
setUsedPartner: function setUsedPartner(_id) {
this.use_id = _id;
var chds = this.lstPartners.bindSCV.content.children;
for (var i = 0; i < chds.length; ++i) {
var node = chds[i];
if (node && node.svItem) {
nx.gui.setActive(node.svItem, "used", node.svItem.mdata.id == _id);
}
}
},
// 选中切换
onPartnerChanged: function onPartnerChanged(_item) {
// 空 / 当前使用中
if (!_item || !_item.mdata || _item.index == this.idxPartner) {
return;
}
// 聚焦
this.lstPartners.cleanFocus();
this.lstPartners.addFocus(_item.index);
// 展示信息
this.idxPartner = _item.index;
this.setCurrent(_item.mdata);
// 操作刷新
var ok = _item.mdata.unlock && _item.mdata.id != this.use_id;
nx.gui.setLocked(this, "panel/confirm", !ok);
},
// 点击确认
onTouchConfirm: function onTouchConfirm() {
var _this2 = this;
var partner = this.partners[this.idxPartner];
if (!partner) {
return;
}
var RC = RoleController.getInstance();
RC.reqUseFigure(partner.id, function (_ret, _data) {
if (!_ret) {
nx.tbox(_data);
return;
}
_this2.setUsedPartner(partner.id);
nx.gui.setLocked(_this2, "panel/confirm", true);
});
},
// 获取形象列表
queryFigureList: function queryFigureList(_type) {
// 统计全形象
if (nx.dt.arrEmpty(this.library)) {
this.library = [];
var LOOKS = game.configs.looks_data.data_data;
var SKINS = game.configs.partner_skin_data.data_skin_info;
for (var id in LOOKS) {
var ifo = LOOKS[id];
var cfgs = game.configs.partner_data.data_partner_base[ifo.partner_id];
if (nx.dt.objEmpty(cfgs)) {
nx.error("无效形象配置:", id);
continue;
}
var item = {
id: ifo.id,
icon: 0,
skin: ifo.skin_id,
name: ifo.name,
model: ifo.model,
partner: ifo.partner_id,
unlock: false,
tip: ifo.unlock_tip,
attr: ifo.attr
};
// 如果是皮肤
if (nx.dt.numPositive(ifo.skin_id, false)) {
var sfo = SKINS[ifo.skin_id];
if (nx.dt.objNEmpty(sfo)) {
item.name = sfo.skin_name;
item.attr = sfo.skin_attr;
item.model = sfo.res_id;
item.icon = sfo.head_id;
item.tip = sfo.source_tip;
}
} else {
var tf = gitemdata(cfgs.item_id);
if (tf) {
item.icon = tf.icon;
}
}
this.library.push(item);
}
}
// 是否解锁
var self = this;
var isUnlocked = function isUnlocked(_id) {
for (var i in self.figures) {
var tm = self.figures[i];
if (tm && tm.id == _id) {
return true;
}
}
return false;
};
// 重建
var partners = [];
for (var i = 0; i < this.library.length; ++i) {
var partner = this.library[i];
partner.unlock = isUnlocked(partner.id);
// 有效皮肤列表
if (_type == MenuTags.Skin && partner.skin > 0) {
partners.push(partner);
continue;
}
// 有效伙伴列表
if (_type == MenuTags.Partner && partner.skin == 0) {
partners.push(partner);
continue;
}
}
// 排序
partners.sort(function (_p1, _p2) {
// 聚焦首位
if (_p1.id == self.use_id || _p2.id == self.use_id) {
return _p1.id == self.use_id ? -1 : 1;
}
// 解锁优先
if (_p1.unlock || _p2.unlock) {
return _p1.unlock ? -1 : 1;
}
// ID排序
return _p1.id - _p2.id;
});
return partners;
}
});
cc._RF.pop();