Files
fc/dev/project/library/imports/0e/0eb97023-1d7b-46b1-a8b6-424f6043c205.js
2026-05-24 10:21:26 +08:00

263 lines
6.9 KiB
JavaScript

"use strict";
cc._RF.push(module, '0eb97AjHXtGsai2Qk9gQ8IF', 'cmp.servers.wnd');
// Scripts/mod/login/cmp/cmp.servers.wnd.js
"use strict";
/******************************************************************
*
* 服务器列表
*
******************************************************************/
var BridgeWindow = require("bridge.window");
var LoginMod = require("login.mod");
var FxSVC = require("nx.fx.sv.expand");
cc.Class({
"extends": BridgeWindow,
properties: {
lstAreas: {
"default": null,
type: FxSVC
},
lstRoles: {
"default": null,
type: FxSVC
},
lstSrvs: {
"default": null,
type: cc.Node
}
},
// 关闭
onDisable: function onDisable() {
// 通告
nx.dt.fnInvoke(this.cb);
},
// 重载:参数打开
onOpenConfigs: function onOpenConfigs(_params) {
this.cb = _params.cb;
// 区列表重建
this.buildAreas();
// 服务列表组建
// this.buildServers();
},
// ==================================================
// 区相关
// ==================================================
// 区列表重建
buildAreas: function buildAreas() {
var _this = this;
// 推荐 + 已有角色 + 大区
this.areas = [];
this.areas.push({
reco: true,
name: "AreaReco"
});
this.areas.push({
roles: true,
name: "AreaMine"
});
var servers = nx.bridge.vget("allServers");
var others = Object.keys(servers).reverse();
others.forEach(function (_id) {
_this.areas.push({
id: _id,
name: "SG" + _id
});
});
// 重建
this.lstAreas.rebuild(this.areas);
// 默认推荐
this.scheduleOnce(function () {
_this.onAreaSelectChanged({
index: 0,
mdata: _this.areas[0]
});
}, 0.1);
},
// 选择改变
onAreaSelectChanged: function onAreaSelectChanged(_item) {
// 聚焦
this.lstAreas.cleanFocus();
this.lstAreas.addFocus(_item.index);
var info = _item.mdata;
if (nx.dt.objEmpty(info)) {
return;
}
// 选中已有角色
if (info.roles) {
nx.gui.setActive(this.lstRoles, "", true);
nx.gui.setActive(this.lstSrvs, "", false);
this.lstRoles.rebuild(nx.bridge.vget("allRoles"));
return;
}
nx.gui.setActive(this.lstRoles, "", false);
nx.gui.setActive(this.lstSrvs, "", true);
var servers = [];
if (info.reco) {
// 选中推荐
servers = nx.bridge.vget("recServers");
} else {
// 选中大区
servers = nx.bridge.vget("allServers")[info.id];
}
this.freshServerList(servers);
},
// ==================================================
// 服相关
// ==================================================
// 刷新服务器列表
freshServerList: function freshServerList(_servers) {
// 空
if (nx.dt.arrEmpty(_servers)) {
nx.gui.setActive(this.lstSrvs, "list", false);
nx.gui.setActive(this.lstSrvs, "empty", true);
return;
}
nx.gui.setActive(this.lstSrvs, "list", true);
nx.gui.setActive(this.lstSrvs, "empty", false);
// 单行设置
var setLine = function setLine(_node, _left, _right) {
// 左边
var cl = nx.gui.getComponent(_node, "header/a", "cmp.servers.server.item");
cl.build(_left, false);
// 右边
if (nx.dt.objEmpty(_right)) {
nx.gui.setActive(_node, "header/b", false);
} else {
nx.gui.setActive(_node, "header/b", true);
var cr = nx.gui.getComponent(_node, "header/b", "cmp.servers.server.item");
cr.build(_right, true);
}
// 下拉隐藏
nx.gui.setActive(_node, "header/mk");
nx.gui.setActive(_node, "roles", false);
};
// 列表创建
var count = Math.ceil(_servers.length / 2);
var root = nx.gui.find(this.lstSrvs, "list/view/content");
var chds = root.children;
nx.gui.gocChildren(root, "", count, chds[0]);
for (var i = 0; i < count; ++i) {
setLine(chds[i], _servers[2 * i], _servers[2 * i + 1]);
}
},
// 换服
onTouchServer: function onTouchServer(_item) {
var cmp = nx.gui.getComponent(_item, "", "cmp.servers.server.item");
if (!cmp) {
return;
}
// 维护中
if (cmp.data && cmp.data.is_close) {
nx.tbox("TipSelectClosed");
return;
}
// 收起来
if (this.current == cmp) {
var parent = _item.parent.parent;
nx.gui.setActive(_item.parent, "mk", false);
nx.gui.setActive(parent, "roles", false);
this.current = null;
return;
}
// 不同行先收起来
if (this.current && this.current.node.parent != _item.parent) {
nx.gui.setActive(this.current.node.parent, "mk", false);
nx.gui.setActive(this.current.node.parent.parent, "roles", false);
this.current = null;
}
var mk = nx.gui.find(_item.parent, "mk");
mk.active = true;
mk.x = cmp.right ? 350 : -55;
var list = nx.gui.find(_item.parent.parent, "roles");
list.active = true;
// 刷新角色列表
this.current = cmp;
this.freshRoles(list, cmp.data);
},
// ==================================================
// 角色相关
// ==================================================
// 角色列表
freshRoles: function freshRoles(_node, _info) {
var chds = _node.children;
// 空
var roles = _info.roles || [];
if (nx.dt.arrEmpty(roles)) {
nx.gui.gocChildren(_node, "", 1, chds[0]);
var cmp = nx.gui.getComponent(chds[0], "", "cmp.servers.role");
cmp.build({}, _info);
return;
}
// 构建
nx.gui.gocChildren(_node, "", roles.length, chds[0]);
for (var i = 0; i < roles.length; ++i) {
var _cmp = nx.gui.getComponent(chds[i], "", "cmp.servers.role");
_cmp.build(roles[i], _info);
}
},
// 点击角色
onTouchRole: function onTouchRole(_item) {
var cmp = nx.gui.getComponent(_item.parent, "", "cmp.servers.role");
if (cmp) {
this.enterGame(cmp.sinfo, cmp.data);
}
},
// 点击创建角色
onTouchCreateRole: function onTouchCreateRole(_item) {
var cmp = nx.gui.getComponent(_item.parent, "", "cmp.servers.role");
if (cmp) {
this.enterGame(cmp.sinfo, cmp.data);
}
},
// 点击已有角色项
onSelectRole: function onSelectRole(_item) {
if (!_item || nx.dt.objEmpty(_item.mdata)) {
return;
}
var server = LoginMod.getInstance().queryServer(_item.mdata.srv_id);
this.enterGame(server, _item.mdata);
},
// ==================================================
// 后续操作
// ==================================================
// 自动处理进入游戏
enterGame: function enterGame(_server, _role) {
if (nx.dt.objEmpty(_server)) {
nx.tbox("TipSelectServer");
return;
}
nx.bridge.vset("curServer", _server);
nx.bridge.vset("curRole", _role);
LoginMod.getInstance().autoEnter(function (_ret, _data, _code) {
if (!_ret) {
nx.tbox(_data);
return;
}
});
}
});
cc._RF.pop();