263 lines
6.8 KiB
JavaScript
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(); |