import DateUtil from "../utils/DateUtil"; /**军队命令*/ export class ArmyCmd { static Idle: number = 0;//空闲 static Attack: number = 1;//攻击 static Garrison: number = 2;//驻军 static Reclaim: number = 3;//屯田 static Return: number = 4;//撤退 static Conscript: number = 5;//征兵 static Transfer: number = 6;//调动 } /**军队数据*/ export class ArmyData { id: number = 0; cityId: number = 0; order: number = 0; generals: number[] = []; soldiers: number[] = []; conTimes: number[] = []; conCnts: number[] = []; cmd: number = 0; state: number = 0; fromX: number = 0; fromY: number = 0; toX: number = 0; toY: number = 0; startTime: number = 0; endTime: number = 0; x: number = 0; y: number = 0; static createFromServer(serverData: any, armyData: ArmyData = null): ArmyData { let data: ArmyData = armyData; if (armyData == null) { data = new ArmyData(); } data.id = serverData.id; data.cityId = serverData.cityId; data.order = serverData.order; data.generals = serverData.generals; data.soldiers = serverData.soldiers; data.conTimes = serverData.con_times; data.conCnts = serverData.con_cnts; data.state = serverData.state; data.cmd = serverData.cmd; if (data.cmd == ArmyCmd.Return) { //返回的时候 坐标是反的 data.fromX = serverData.to_x; data.fromY = serverData.to_y; data.toX = serverData.from_x; data.toY = serverData.from_y; } else { data.fromX = serverData.from_x; data.fromY = serverData.from_y; data.toX = serverData.to_x; data.toY = serverData.to_y; } if (data.cmd == ArmyCmd.Idle || data.cmd == ArmyCmd.Conscript) { //代表是停留在城池中 data.x = data.fromX; data.y = data.fromY; } else { data.x = data.toX; data.y = data.toY; } data.startTime = serverData.start * 1000; data.endTime = serverData.end * 1000; return data; } public isGenConEnd():boolean { for (let index = 0; index < this.conTimes.length; index++) { const conTime = this.conTimes[index]; if (conTime == 0) { continue } if (DateUtil.isAfterServerTime(conTime*1000)){ return true; } } return false } } export default class ArmyProxy { protected _maxArmyCnt: number = 5;//一个城池最大军队数量 //武将基础配置数据 protected _armys: Map = new Map(); public clearData(): void { this._armys.clear(); } public getArmyList(cityId: number): ArmyData[] { if (this._armys.has(cityId) == false) { return null; } return this._armys.get(cityId); } public updateArmys(cityId: number, datas: any[]): ArmyData[] { let list: ArmyData[] = this.getArmyList(cityId); if (list == null) { list = new Array(this._maxArmyCnt); this._armys.set(cityId, list); } for (var i = 0; i < datas.length; i++) { let armyData: ArmyData = ArmyData.createFromServer(datas[i]); list[armyData.order - 1] = armyData; } return list; } public updateArmy(cityId: number, data: any): ArmyData { let list: ArmyData[] = this.getArmyList(cityId); if (list == null) { list = new Array(this._maxArmyCnt); this._armys.set(cityId, list); } let armyData: ArmyData = list[data.order - 1]; list[data.order - 1] = ArmyData.createFromServer(data, armyData); return list[data.order - 1]; } public updateArmysNoCity(datas: any): ArmyData[] { let list: ArmyData[] = []; for(var i = 0; i < datas.length ;i++){ let armyData: ArmyData = ArmyData.createFromServer(datas[i]); this.updateArmy(armyData.cityId,armyData); list.push(armyData) } return list; } /**根据id获取军队*/ public getArmyById(id: number, cityId: number): ArmyData { let list: ArmyData[] = this.getArmyList(cityId); if (list) { for (let i: number = 0; i < list.length; i++) { if (list[i] && list[i].id == id) { return list[i]; } } } return null; } /**根据位置获取军队*/ public getArmyByOrder(order: number, cityId: number): ArmyData { let list: ArmyData[] = this.getArmyList(cityId); console.log("getArmyByOrder", order, cityId, list); if (list) { return list[order - 1]; } return null; } public getAllArmys(): ArmyData[] { let list:ArmyData[] = []; this._armys.forEach((datas:ArmyData[]) => { list = list.concat(datas); }) return list; } public getArmysByPos(x: number, y: number) { let list:ArmyData[] = []; this._armys.forEach((armys:ArmyData[]) => { armys.forEach(army => { if (army.fromX == x && army.fromY == y){ list.push(army); } }); }) return list; } }