import { ServerConfig } from "../config/ServerConfig"; import LoginCommand from "../login/LoginCommand"; import { MapCityData } from "../map/MapCityProxy"; import MapCommand from "../map/MapCommand"; import { NetManager } from "../network/socket/NetManager"; import ArmyProxy, { ArmyCmd, ArmyData } from "./ArmyProxy"; import GeneralCommand from "./GeneralCommand"; import { GenaralLevelConfig, GeneralConfig, GeneralData } from "./GeneralProxy"; import { EventMgr } from "../utils/EventMgr"; export default class ArmyCommand { //单例 protected static _instance: ArmyCommand; public static getInstance(): ArmyCommand { if (this._instance == null) { this._instance = new ArmyCommand(); } return this._instance; } public static destory(): boolean { if (this._instance) { this._instance.onDestory(); this._instance = null; return true; } return false; } //数据model protected _proxy: ArmyProxy = new ArmyProxy(); constructor() { EventMgr.on(ServerConfig.army_myList, this.onQryArmyList, this); EventMgr.on(ServerConfig.army_myOne, this.onQryArmyOne, this); EventMgr.on(ServerConfig.army_dispose, this.onGeneralDispose, this); EventMgr.on(ServerConfig.army_conscript, this.onGeneralConscript, this); EventMgr.on(ServerConfig.army_assign, this.onGeneralAssignArmy, this); EventMgr.on(ServerConfig.army_push, this.onGeneralArmyStatePush, this); EventMgr.on(ServerConfig.nationMap_scanBlock, this.onNationMapScanBlock, this); //定时检测自己的军队是否有武将已经征兵完,如果是请求刷新 setInterval(() => { let myCity: MapCityData = MapCommand.getInstance().cityProxy.getMyMainCity(); if (myCity != null){ let armyList: ArmyData[] = this.proxy.getArmyList(myCity.cityId); if (armyList == null){ return } for (let i: number = 0; i < armyList.length; i++) { var army = armyList[i]; if (army != null && army.isGenConEnd()){ console.log("有武将征兵完了"); this.qryArmyOne(army.cityId, army.order); } } } }, 1000); } public onDestory(): void { EventMgr.targetOff(this); } public clearData(): void { this._proxy.clearData(); } public get proxy(): ArmyProxy { return this._proxy; } /**军队列表回调*/ protected onQryArmyList(data: any, otherData: any): void { console.log("onQryArmyList", data); if (data.code == 0) { let armyDatas: ArmyData[] = this._proxy.updateArmys(data.msg.cityId, data.msg.armys); EventMgr.emit("update_army_list", armyDatas); } } protected onQryArmyOne(data: any, otherData: any): void { console.log("onQryArmyOne", data); if (data.code == 0) { let armyData = this._proxy.updateArmy(data.msg.army.cityId, data.msg.army); let armyDatas: ArmyData[] = this._proxy.getArmyList(data.msg.army.cityId); EventMgr.emit("update_army_list", armyDatas); EventMgr.emit("update_army", armyData); } } /**配置将领回调*/ protected onGeneralDispose(data: any, otherData: any): void { console.log("onGeneralDispose", data); if (data.code == 0) { let armyData: ArmyData = this._proxy.updateArmy(data.msg.army.cityId, data.msg.army); console.log("armyData", armyData); EventMgr.emit("update_army", armyData); } } /**征兵回调*/ protected onGeneralConscript(data: any, otherData: any): void { console.log("onGeneralConscript", data); if (data.code == 0) { LoginCommand.getInstance().proxy.saveEnterData(data.msg); EventMgr.emit("upate_my_roleRes"); let armyData: ArmyData = this._proxy.updateArmy(data.msg.army.cityId, data.msg.army); EventMgr.emit("update_army", armyData); EventMgr.emit("conscript_army_success"); } } /**出征回调*/ protected onGeneralAssignArmy(data: any, otherData: any): void { console.log("onGeneralAssignArmy", data); if (data.code == 0) { let armyData: ArmyData = this._proxy.updateArmy(data.msg.army.cityId, data.msg.army); EventMgr.emit("update_army", armyData); EventMgr.emit("update_army_assign"); } } /**军队状态变更*/ protected onGeneralArmyStatePush(data: any): void { console.log("onGeneralArmyState", data); if (data.code == 0) { let armyData: ArmyData = this._proxy.updateArmy(data.msg.cityId, data.msg); EventMgr.emit("update_army", armyData); } } protected onNationMapScanBlock(data: any): void { if (data.code == 0) { for (let i: number = 0; i < data.msg.armys.length; i++) { let armyData: ArmyData = this._proxy.updateArmy(data.msg.armys[i].cityId, data.msg.armys[i]); EventMgr.emit("update_army", armyData); } } } /**我的角色属性*/ public updateMyProperty(datas: any[]): void { if (datas.length > 0) { let armyDatas: ArmyData[] = this._proxy.updateArmys(datas[0].cityId, datas); EventMgr.emit("update_army_list", armyDatas); } } /**获取军队当前体力*/ public getArmyPhysicalPower(armyData: ArmyData): number { let minPower: number = 100; for (let i: number = 0; i < armyData.generals.length; i++) { let general: GeneralData = GeneralCommand.getInstance().proxy.getMyGeneral(armyData.generals[i]); if (general && minPower > general.physical_power) { minPower = general.physical_power; } } return minPower; } /**获取军队将领列表*/ public getArmyGenerals(armyData: ArmyData): GeneralData[] { let list: GeneralData[] = []; for (let i: number = 0; i < armyData.generals.length; i++) { let general: GeneralData = GeneralCommand.getInstance().proxy.getMyGeneral(armyData.generals[i]); list.push(general); } return list; } /**根据将领列表获取军队体力*/ public getArmyPhysicalPowerByGenerals(generals: GeneralData[]): number { let minPower: number = 100; for (let i: number = 0; i < generals.length; i++) { if (generals[i] && minPower > generals[i].physical_power) { minPower = generals[i].physical_power; } } return minPower; } /**获取军队当前士兵数*/ public getArmyCurSoldierCnt(armyData: ArmyData): number { let cnt: number = 0; for (let i: number = 0; i < armyData.soldiers.length; i++) { cnt += armyData.soldiers[i]; } return cnt; } /**根据将领列表获取军队总士兵数*/ public getArmyTotalSoldierCntByGenerals(generals: GeneralData[]): number { let cnt: number = 0; let levelCfg: GenaralLevelConfig = null; for (let i: number = 0; i < generals.length; i++) { if (generals[i]) { levelCfg = GeneralCommand.getInstance().proxy.getGeneralLevelCfg(generals[i].level); cnt += levelCfg.soldiers; } } return cnt; } /**获取速度**/ public getArmySpeed(generals: GeneralData[]): number { let empyt: boolean = true; let speed: number = 1000000; let cfg: GeneralConfig = null; for (let i: number = 0; i < generals.length; i++) { if (generals[i]) { cfg = GeneralCommand.getInstance().proxy.getGeneralCfg(generals[i].cfgId); speed = Math.min(speed, GeneralData.getPrValue(cfg.speed, cfg.speed_grow*generals[i].level, generals[i].speed_added)); empyt = false; } } if (empyt){ return 0; }else{ return speed; } } public getArmyDestroy(generals: GeneralData[]): number { let empyt: boolean = true; let destory: number = 0; let cfg: GeneralConfig = null; for (let i: number = 0; i < generals.length; i++) { if (generals[i]) { cfg = GeneralCommand.getInstance().proxy.getGeneralCfg(generals[i].cfgId); destory += GeneralData.getPrValue(cfg.destroy, cfg.destroy_grow*generals[i].level, generals[i].destroy_added); empyt = false; } } if (empyt){ return 0; }else{ return destory; } } /**根据将领列表获取军队阵营*/ public getArmyCamp(generals: GeneralData[]): number { let cnt: number = 0; let lastCamp: number = 0; for (let i: number = 0; i < generals.length; i++) { if (generals[i] && (generals[i].config.camp == lastCamp || lastCamp == 0)) { lastCamp = generals[i].config.camp; cnt++; } else { break; } } if (cnt >= 3) { return lastCamp; } return 0; } public getArmyStateDes(armyData: ArmyData): string { let stateStr: string = ""; if (armyData.state > 0) { if (armyData.cmd == ArmyCmd.Return) { stateStr = "[撤退]"; } else { stateStr = "[行军]"; } } else { if (armyData.cmd == ArmyCmd.Idle) { stateStr = "[待命]"; } else if (armyData.cmd == ArmyCmd.Reclaim) { stateStr = "[屯田]"; } else if (armyData.cmd == ArmyCmd.Conscript) { stateStr = "[征兵]"; } else if (armyData.cmd == ArmyCmd.Garrison) { stateStr = "[驻守]"; }else { stateStr = "[停留]"; } } return stateStr; } /**请求自己的军队信息*/ public qryArmyList(cityId: number): void { let sendData: any = { name: ServerConfig.army_myList, msg: { cityId: cityId } }; NetManager.getInstance().send(sendData); } public qryArmyOne(cityId: number, order: number): void { let sendData: any = { name: ServerConfig.army_myOne, msg: { cityId: cityId, order:order, } }; NetManager.getInstance().send(sendData); } /**给军队配置将领*/ public generalDispose(cityId: number = 0, generalId: number = 0, order: number = 0, position: number = 0, otherData: any): void { let sendData: any = { name: ServerConfig.army_dispose, msg: { cityId: cityId, generalId: generalId, order: order, position: position, } }; NetManager.getInstance().send(sendData, otherData); } /**给军队征兵*/ public generalConscript(armyId: number = 0, cnts: number[] = [], otherData: any): void { let sendData: any = { name: ServerConfig.army_conscript, msg: { armyId: armyId, cnts: cnts, } }; NetManager.getInstance().send(sendData, otherData); } /**出兵*/ public generalAssignArmy(armyId: number = 0, cmd: number = 0, x: number = 0, y: Number = 0, otherData: any = null): void { let sendData: any = { name: ServerConfig.army_assign, msg: { armyId: armyId, cmd: cmd, x: x, y: y, } }; NetManager.getInstance().send(sendData, otherData); } }