"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();