334 lines
8.8 KiB
JavaScript
334 lines
8.8 KiB
JavaScript
|
|
"use strict";
|
||
|
|
cc._RF.push(module, '1dfde1WLUtHSqoqdibGq5yl', 'cmp.personal.clerk.wnd');
|
||
|
|
// Scripts/mod/personal/cmps/cmp.personal.clerk.wnd.js
|
||
|
|
|
||
|
|
"use strict";
|
||
|
|
|
||
|
|
/******************************************************************
|
||
|
|
*
|
||
|
|
* 秘书组
|
||
|
|
*
|
||
|
|
******************************************************************/
|
||
|
|
|
||
|
|
var BridgeWindow = require("bridge.window");
|
||
|
|
var FxTogs = require("nx.fx.togs");
|
||
|
|
var FxSVC = require("nx.fx.sv.expand");
|
||
|
|
var Clerk = require("partner.clerk.mod");
|
||
|
|
var TipsController = require("tips_controller");
|
||
|
|
var RoleController = require("role_controller");
|
||
|
|
var HeroConst = require("hero_const");
|
||
|
|
var HeroControl = require("hero_controller");
|
||
|
|
var HCT = HeroConst.CampType;
|
||
|
|
cc.Class({
|
||
|
|
"extends": BridgeWindow,
|
||
|
|
properties: {
|
||
|
|
pageGroup: {
|
||
|
|
"default": null,
|
||
|
|
type: cc.Node
|
||
|
|
},
|
||
|
|
pageSelect: {
|
||
|
|
"default": null,
|
||
|
|
type: cc.Node
|
||
|
|
},
|
||
|
|
togCamp: {
|
||
|
|
"default": null,
|
||
|
|
type: FxTogs
|
||
|
|
},
|
||
|
|
svcList: {
|
||
|
|
"default": null,
|
||
|
|
type: FxSVC
|
||
|
|
},
|
||
|
|
nodCount: {
|
||
|
|
"default": null,
|
||
|
|
type: cc.Node
|
||
|
|
}
|
||
|
|
},
|
||
|
|
// 加载
|
||
|
|
onLoad: function onLoad() {
|
||
|
|
this.skins = {};
|
||
|
|
this.selects = [];
|
||
|
|
|
||
|
|
// 视图监听
|
||
|
|
this.vbind([["clerkList", this.onFreshGroup.bind(this)]]);
|
||
|
|
|
||
|
|
// 获取秘书组信息
|
||
|
|
Clerk.getInstance().reqFetch();
|
||
|
|
|
||
|
|
// 切换秘书页
|
||
|
|
this.showGroupPage();
|
||
|
|
},
|
||
|
|
// 销毁
|
||
|
|
onDestroy: function onDestroy() {
|
||
|
|
// 视图监听释放
|
||
|
|
this.vunbind();
|
||
|
|
},
|
||
|
|
// ============================================================
|
||
|
|
// 秘书页
|
||
|
|
// ============================================================
|
||
|
|
|
||
|
|
// 切换秘书页
|
||
|
|
showGroupPage: function showGroupPage() {
|
||
|
|
this.pageGroup.active = true;
|
||
|
|
this.pageSelect.active = false;
|
||
|
|
},
|
||
|
|
// 重置
|
||
|
|
onFreshGroup: function onFreshGroup(_clerks, _old, _init) {
|
||
|
|
if (_init) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
var conds = game.configs.secretary_data.data_secretary_info;
|
||
|
|
var role = RoleController.getInstance().getRoleVo();
|
||
|
|
|
||
|
|
// 单设
|
||
|
|
var count = 0,
|
||
|
|
max = 0;
|
||
|
|
var reset = function reset(_node, _data, _rank) {
|
||
|
|
var _nx$bridge$partner;
|
||
|
|
// 未解锁
|
||
|
|
var rank = _rank || 1;
|
||
|
|
var limit = conds[rank] || 0;
|
||
|
|
var locked = role.lev < limit;
|
||
|
|
if (locked) {
|
||
|
|
nx.gui.setActive(_node, "empty", false);
|
||
|
|
nx.gui.setActive(_node, "normal", false);
|
||
|
|
nx.gui.setActive(_node, "locked", true);
|
||
|
|
nx.gui.setString(_node, "locked/txt", nx.text.format("UnLockedLevel", limit));
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 解锁数量
|
||
|
|
++max;
|
||
|
|
|
||
|
|
// 空缺
|
||
|
|
if (nx.dt.objEmpty(_data)) {
|
||
|
|
nx.gui.setActive(_node, "empty", true);
|
||
|
|
nx.gui.setActive(_node, "normal", false);
|
||
|
|
nx.gui.setActive(_node, "locked", false);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 秘书验证
|
||
|
|
var args = _data.resource_id.split("_");
|
||
|
|
var key = args[0] + "_" + args[1];
|
||
|
|
var clerk = gdata("partner_data", "data_partner_star", key);
|
||
|
|
if (!clerk) {
|
||
|
|
nx.error("秘书无效!", _data.resource_id);
|
||
|
|
nx.gui.setActive(_node, "empty", true);
|
||
|
|
nx.gui.setActive(_node, "normal", false);
|
||
|
|
nx.gui.setActive(_node, "locked", false);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
++count;
|
||
|
|
|
||
|
|
// 有角色
|
||
|
|
nx.gui.setActive(_node, "empty", false);
|
||
|
|
nx.gui.setActive(_node, "locked", false);
|
||
|
|
var node = nx.gui.setActive(_node, "normal", true);
|
||
|
|
var cfgs = game.configs.partner_data.data_partner_base[clerk.bid];
|
||
|
|
|
||
|
|
// 阵营标记
|
||
|
|
var camp = cfgs ? cfgs.camp_type : HCT.eWater;
|
||
|
|
var path = cc.path.join("coms/images", "camps" + camp);
|
||
|
|
nx.gui.setSpriteFrame(node, "head/camp", path);
|
||
|
|
|
||
|
|
// 阵营背景
|
||
|
|
path = cc.path.join("coms/camps", "bg" + camp);
|
||
|
|
nx.gui.setSpriteFrame(node, "bg", path);
|
||
|
|
|
||
|
|
// 阵营边框
|
||
|
|
path = cc.path.join("coms/camps", "frame" + camp);
|
||
|
|
nx.gui.setSpriteFrame(node, "frame", path);
|
||
|
|
|
||
|
|
// 角色
|
||
|
|
var info = (_nx$bridge$partner = nx.bridge.partner).parseShowInfo.apply(_nx$bridge$partner, args);
|
||
|
|
nx.gui.setSpriteFrame(node, "mask/img", info.img_half_nor, function (_ret) {
|
||
|
|
if (!_ret) {
|
||
|
|
nx.gui.setSpriteFrame(node, "mask/img", "resDB/empty/half_show2");
|
||
|
|
}
|
||
|
|
});
|
||
|
|
};
|
||
|
|
|
||
|
|
// 遍历填充
|
||
|
|
var chds = this.pageGroup.children;
|
||
|
|
for (var i = 0; i < chds.length; ++i) {
|
||
|
|
reset(chds[i], _clerks ? _clerks[i] : null, i + 1);
|
||
|
|
}
|
||
|
|
this.cntSelect = count;
|
||
|
|
this.maxSelect = max;
|
||
|
|
},
|
||
|
|
// 批量重选
|
||
|
|
reselectOnce: function reselectOnce() {
|
||
|
|
this.showSelectPage();
|
||
|
|
},
|
||
|
|
// 点击更换
|
||
|
|
onTouchChange: function onTouchChange(_rank) {
|
||
|
|
this.reselectOnce();
|
||
|
|
},
|
||
|
|
// 点击添加
|
||
|
|
onTouchAdd: function onTouchAdd(_rank) {
|
||
|
|
this.reselectOnce();
|
||
|
|
},
|
||
|
|
// 点击帮助
|
||
|
|
onTouchHelp: function onTouchHelp() {
|
||
|
|
var txt = game.configs.secretary_data.data_secretary_const.secretary_rule.des;
|
||
|
|
if (nx.dt.strNEmpty(txt)) {
|
||
|
|
var TC = TipsController.getInstance();
|
||
|
|
TC.showTextPanel("tip", txt);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
// ============================================================
|
||
|
|
// 选择页
|
||
|
|
// ============================================================
|
||
|
|
|
||
|
|
// 切换选择页
|
||
|
|
showSelectPage: function showSelectPage() {
|
||
|
|
var _this = this;
|
||
|
|
this.pageGroup.active = false;
|
||
|
|
this.pageSelect.active = true;
|
||
|
|
|
||
|
|
// 初始选择
|
||
|
|
this.selects = [];
|
||
|
|
var arr = nx.bridge.vget("clerkList") || [];
|
||
|
|
arr.forEach(function (_t) {
|
||
|
|
_this.selects.push(_t.resource_id);
|
||
|
|
});
|
||
|
|
|
||
|
|
// 初始化
|
||
|
|
if (!nx.dt.fnGood(this.togCamp.posTog)) {
|
||
|
|
this.togCamp.posTog = this.onTogCamp.bind(this);
|
||
|
|
this.togCamp.togTo(0);
|
||
|
|
this.scheduleOnce(function () {
|
||
|
|
_this.onTogCamp(HCT.eNone);
|
||
|
|
}, 0.01);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
// 整体刷新
|
||
|
|
freshClerks: function freshClerks() {
|
||
|
|
var _this2 = this;
|
||
|
|
// 获取当前秘书列表
|
||
|
|
var clerks = this.skins[this.curCamp];
|
||
|
|
if (!clerks) {
|
||
|
|
// 筛选当前阵营所有不同的皮肤资源
|
||
|
|
clerks = [];
|
||
|
|
var records = {};
|
||
|
|
var HC = HeroControl.getInstance();
|
||
|
|
var partners = HC.getModel().getHeroListByCamp(this.curCamp);
|
||
|
|
partners.sort(function (_a, _b) {
|
||
|
|
return _a.star - _b.star;
|
||
|
|
});
|
||
|
|
for (var i in partners) {
|
||
|
|
var pt = partners[i];
|
||
|
|
if (!pt) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
var key = pt.bid + "_" + pt.star + "_" + pt.use_skin;
|
||
|
|
var cfg = nx.bridge.partner.getShowInfo(pt);
|
||
|
|
if (!cfg || records[cfg.resid]) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
records[cfg.resid] = cfg;
|
||
|
|
clerks.push({
|
||
|
|
key: key,
|
||
|
|
partner: pt,
|
||
|
|
cfg: cfg
|
||
|
|
});
|
||
|
|
}
|
||
|
|
this.skins[this.curCamp] = clerks;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 排序
|
||
|
|
clerks.sort(function (_a, _b) {
|
||
|
|
var ain = nx.dt.arrMember(_this2.selects, _a.key);
|
||
|
|
var bin = nx.dt.arrMember(_this2.selects, _b.key);
|
||
|
|
if (ain != bin) {
|
||
|
|
return ain ? -1 : 1;
|
||
|
|
}
|
||
|
|
if (_a.cfg.star != _b.cfg.star) {
|
||
|
|
return _a.cfg.bid - _b.cfg.bid;
|
||
|
|
}
|
||
|
|
return _b.cfg.star - _a.cfg.star;
|
||
|
|
});
|
||
|
|
|
||
|
|
// 列表重置
|
||
|
|
nx.gui.setActive(this.svcList, "empty", nx.dt.arrEmpty(clerks));
|
||
|
|
this.svcList.rebuild(clerks);
|
||
|
|
|
||
|
|
// 当前选中统计
|
||
|
|
for (var k in clerks) {
|
||
|
|
var ck = clerks[k];
|
||
|
|
if (nx.dt.arrMember(this.selects, ck.key)) {
|
||
|
|
this.svcList.addFocus(k);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 刷新选择数量
|
||
|
|
this.freshCount();
|
||
|
|
},
|
||
|
|
// 刷新选择数量
|
||
|
|
freshCount: function freshCount() {
|
||
|
|
var txt = this.selects.length + "/" + this.maxSelect;
|
||
|
|
nx.gui.setString(this.nodCount, "txt", txt);
|
||
|
|
},
|
||
|
|
// 点击取消
|
||
|
|
onTouchCancel: function onTouchCancel() {
|
||
|
|
this.showGroupPage();
|
||
|
|
},
|
||
|
|
// 点击确认
|
||
|
|
onTouchConfirm: function onTouchConfirm() {
|
||
|
|
var _this3 = this;
|
||
|
|
var args = [];
|
||
|
|
for (var i = 0; i < this.selects.length; ++i) {
|
||
|
|
args.push({
|
||
|
|
resource_id: this.selects[i]
|
||
|
|
});
|
||
|
|
}
|
||
|
|
nx.bridge.clerks.reqModify(args, function () {
|
||
|
|
_this3.showGroupPage();
|
||
|
|
});
|
||
|
|
},
|
||
|
|
// 阵营切换
|
||
|
|
onTogCamp: function onTogCamp(_index) {
|
||
|
|
var idx = parseInt(_index) || 0;
|
||
|
|
if (this.curCamp == idx) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
nx.debug("[Hero]\u9635\u8425\u5207\u6362:" + this.curCamp + " -> " + idx);
|
||
|
|
this.curCamp = idx;
|
||
|
|
|
||
|
|
// 整体刷新
|
||
|
|
this.freshClerks();
|
||
|
|
},
|
||
|
|
// 选中切换
|
||
|
|
onFocusChanged: function onFocusChanged(_item) {
|
||
|
|
// 空
|
||
|
|
if (nx.dt.objEmpty(_item) || nx.dt.objEmpty(_item.mdata)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 取消聚焦
|
||
|
|
if (this.svcList.isFocus(_item.index)) {
|
||
|
|
this.svcList.removeFocus(_item.index);
|
||
|
|
nx.dt.arrDelete(this.selects, function (_t) {
|
||
|
|
return _item.mdata.key == _t;
|
||
|
|
});
|
||
|
|
this.freshCount();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 超限
|
||
|
|
if (this.selects.length >= this.maxSelect) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 聚焦
|
||
|
|
this.svcList.addFocus(_item.index);
|
||
|
|
this.selects.push(_item.mdata.key);
|
||
|
|
this.freshCount();
|
||
|
|
},
|
||
|
|
close: function close() {
|
||
|
|
this._super();
|
||
|
|
nx.bridge.createPanel("WndPersonal");
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
cc._RF.pop();
|