import { _decorator, instantiate, Label, Node, Sprite } from 'cc'; import { BaseView } from '../../../framework/layer/BaseView'; import { ServerItem } from './ServerItem'; import { AudioID } from '../../../framework/config/AudioConf'; import { Framework } from '../../../framework/Framework'; import { UserData } from '../../data/UserData'; import { LoginMgr } from '../../common/LoginManager'; const { ccclass, property } = _decorator; @ccclass('ServerList') export class ServerList extends BaseView { private server_list = [] private Server_data = null; private tabulation = 'recently_login'; protected onLoad() { super.onLoad(); } protected onDestroy() { } //UI开打时会调用,如果有初始化代码应该放到此函数 onOpen(game, data?) { let choose_server = UserData.save_locally('choose_server', null, {}) this.server_list.push(choose_server) this.Node.close.active = game; // 调用获取服务器裂变 if (!game) { LoginMgr.getServerList((data) => { if (data) { this.Server_data = data; let num = 0; let idx = 1; for (let list in data.server_list) { num++ if (!this.server_list[idx]) { this.server_list[idx] = [] } if (num == 10) { idx++ num = 0; if (idx > 1) { let newTab = instantiate(this.Node.serverTab.getChildByName('10')); newTab.name = String(idx * 10); this.Node.serverTab.addChild(newTab) } } this.server_list[idx].push(data.server_list[list]) } if (Object.keys(this.server_list[0]).length < 1) { let idx = this.server_list.length - 1 let choosePic = this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame; this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame = this.Node.serverTab.getChildByName(String(idx * 10)).getComponent(Sprite).spriteFrame; this.Node.serverTab.getChildByName(String(idx * 10)).getComponent(Sprite).spriteFrame = choosePic; this.tabulation = String(idx * 10); this.List.server.numItems = this.server_list[idx].length } else { this.List.server.numItems = 0; } } }, data) } } // 列表渲染 onServerListEvent(item, idx) { let nowList = (this.tabulation == 'recently_login') ? this.server_list[0] : this.server_list[Number(this.tabulation) / 10][Math.abs(idx)]; item.getComponent(ServerItem).init(nowList, this.Server_data) } serverTab(event: Event) { if (!this.Server_data) { Framework.tips.setTips('完蛋,服务器开小差了') return; } let target: any = event.target; let choosePic = this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame; this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame = target.getComponent(Sprite).spriteFrame; target.getComponent(Sprite).spriteFrame = choosePic; this.tabulation = target.name; if (target.name == 'recently_login') { if (Object.keys(UserData.save_locally('choose_server', null, {})).length > 0) { this.List.server.numItems = 1 } else { this.List.server.numItems = 0; } } else { this.List.server.numItems = this.server_list[target.name / 10].length } } //UI关闭时会调用,该函数在onDestroy前调用 onClose() { } //框架管理UI层级时会调用,可根据UI情况修改 onShow() { super.onShow(); } //框架管理UI层级时会调用,可根据UI情况修改 onHide() { super.onHide(); } //UI事件处理 private onTouchButton(event: Event, str) { Framework.audio.playEffect(AudioID.Click); let target: any = event.target; if (target.name == 'serverItem') { let idx = target.getChildByName('Index').getComponent(Label).string } else if (target.name == 'Node.close') { Framework.layer.close(this) } } }