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