import Player from "../game/data/udata/Player"; import Main from "../main/Main"; import { GameViewType } from "../main/ViewManage"; import ViewObject from "../main/ViewObject"; import PlotHome from "../plot/PlotHome"; import PlotView from "../plot/PlotView"; import CHttp, { HttpStateType, ReveData } from "../util/CHttp"; import CMath from "../util/CMath"; import HistoryArea from "./HistoryArea"; import Tap_set_Ann from "./Tap_set_Ann"; /** * 游戏分区 */ export interface Zone { id: number, hardwareId: number, name: string, rec: boolean,//是否推荐 inew: boolean,//是否新区 } /** * 历史角色数据 */ export interface History_Role { zoneId: number, name: string, level: number, time: number,//最后登陆的时间 } /** * 选择分区界面 */ const { ccclass, property } = cc._decorator; @ccclass export default class Area extends ViewObject { @property(cc.Label) mZoneName: cc.Label = null;//服务器名字 public zones: Array = null; public roles: Array = null; public gameServer: string = null; onLoad() { this.loadZone(); } start(){ this.opentap_set_Ann() } public loadZone() { let http = this.main.loginHttp; let msg = { channel: this.main.profile.mChannel.toString(), userId: this.main.userData.id.toString() } this.main.startLoad(); http.sendForm('/getZone', msg, (state, reve: any) => { this.main.stopLoad(); if (state == HttpStateType.SUCCESS) { this.zones = reve.zones; this.roles = reve.roles; this.gameServer = reve.gameServer; this.init(); } else { this.main.showTips('网络异常'); } }) } public onclickBack() { this.exitDistroy(); } public init() { let optZone = this.getOptZone(); this.setOptZone(optZone); } public setOptZone(optZone) { this.main.userData.zone = optZone; this.mZoneName.string = optZone.name } public getZoneById(id: number) { if (this.zones == null) { return null; } for (let i = 0; i < this.zones.length; i++) { const element = this.zones[i]; if (element.id == id) { return element; } } return null; } /** * 获取最优化分区 */ public getOptZone(): Zone { let latelyZone = null; //最近玩过的分区 latelyZone = this.getLatelyZone(); if (latelyZone) { return latelyZone; } //推荐分区 latelyZone = this.getRecZone(); if (latelyZone) { return latelyZone; } //随机一个区 return this.zones[CMath.getRandom(0, this.zones.length - 1)];; } /** * 获取最近玩过的区 */ private getLatelyZone(): Zone { if (this.roles == null) { return null; } let latelyRole: History_Role = null; for (let i = 0; i < this.roles.length; i++) { const element = this.roles[i]; if (latelyRole == null) { latelyRole = element; } else { if (element.time > latelyRole.time) { latelyRole = element; } } } return this.getZoneById(latelyRole.zoneId); } /** * 获取推荐分区 */ private getRecZone(): Zone { if (this.zones == null) { return null; } let recs = []; for (let i = 0; i < this.zones.length; i++) { const element = this.zones[i]; if (element.rec) { recs.push(element); } } if (recs.length <= 0) { return null; } return recs[CMath.getRandom(0, recs.length - 1)]; } /** * 打开历史登陆的分区 */ public openHistoryArea() { this.main.startLoad(); this.main.viewManage.loadFunc(GameViewType.historyArea, (viewObject: ViewObject) => { let historyArea = viewObject as HistoryArea; historyArea.area = this; viewObject.show(); this.main.stopLoad(); }); } /** * 进入游戏 */ public onclickOK() { let userData = this.main.userData; let optZone = this.main.userData.zone let http: CHttp = new CHttp(this.gameServer + '/H' + optZone.hardwareId + '/'); let msg = { channel: this.main.profile.mChannel, channelAttr: '测试', id: userData.id, token: userData.token, zoneId: optZone.id } this.main.startLoad(); http.token = '08f0656590e33d39021d41714994383d'; http.sendJson('login', msg, (state, reve: ReveData) => { this.main.stopLoad(); if (state == HttpStateType.SUCCESS) { if (reve.retCode == 0) { this.main.player = new Player(reve.data); http.token = this.main.player.role.token; http.id = this.main.player.role.id; http.userId = this.main.userData.id; this.main.gameHttp = http; this.main.gameHttp.unshiftEvent(this.main.player); if (reve.data.isNew) { // if(true){ this.openPlot() } else { this.openHome(this.main); } } else { this.main.showTips(reve.message); } } else { this.main.showTips('网络异常'); } }); } public openHome(main: Main) { main.viewManage.loadFunc(GameViewType.home, (viewObject: ViewObject) => { this.__distroyAll(); let plotHome = viewObject.node.getComponent(PlotHome) plotHome.openMenu() viewObject.show(); }); } public openPlot() { let main = this.main; this.main.viewManage.loadFunc(GameViewType.plot_view, (viewObject: ViewObject) => { this.__distroyAll(); let plotView = viewObject as PlotView; plotView.setCloseCallback(() => { main.viewManage.loadFunc(GameViewType.home, (viewObject: ViewObject) => { let plotHome = viewObject.node.getComponent(PlotHome) plotHome.exDialog() viewObject.show(); }); }) viewObject.show(); }); } /** * 公告 */ public opentap_set_Ann() { this.main.viewManage.loadFunc(GameViewType.tap_set_Ann, (viewObject: ViewObject) => { viewObject.show(); }); } }