/// <summary> /// 开始回放 /// </summary> /// <param name="vo"></param> public static void StartReplay(BattleReplayVO vo) { #if UNITY_EDITOR BattleManager.logClear(); #endif // UNITY_EDITOR BattleManager.Instance.BattleStartTime = DateTimeUtil.UnixTimestampMSToDateTime(vo.battleStartTime); _recordData = vo; _operation.Clear(); // REMARK:把List转换为LinkedList,提高remove的效率。 foreach (var op in vo.battleInputs) { _operation.AddLast(new OpPlaceSoldier() { frame = op.frame, operationId = op.battleOperationType, x = op.battleOperationPlaceSoldierVO.x, y = op.battleOperationPlaceSoldierVO.y, soldierId = op.battleOperationPlaceSoldierVO.cid }); } // 设置随机数种子(TODO:类型不一致) BattleRandom.SetSeed((int)vo.seed); // 从0帧开始 _frame = 0; _battleEnded = false; }
/// <summary> /// 开始录像 /// </summary> /// <param name="attacker"></param> /// <param name="defender"></param> public static void StartRecord() { #if UNITY_EDITOR BattleManager.logClear(); #endif // UNITY_EDITOR BattleManager.Instance.BattleStartTime = ServerTime.Instance.Now(); _battleEnded = false; _frame = 0; _recordData = new BattleReplayVO() { seed = BattleRandom.Range(0, 0xffff), battleStartTime = DateTimeUtil.DateTimeToUnixTimestampMS(BattleManager.Instance.BattleStartTime), }; BattleRandom.SetSeed((int)_recordData.seed); }
public void Create(WorldType worldType, CampVO defender = null, CampVO attacker = null, BattleReplayVO replayVO = null) { this.worldType = worldType; IsoMap.Instance.Clear(); GameBulletManager.Instance.Init(); GameEffectManager.Instance.Init(); GameSkillManager.Instance.Init(); UpdateManager.Instance.Clear(); DelayManager.Instance.Init(); BattleManager.Instance.Init(); PoolManager.Instance.Clear(); ResourceManager.Instance.ClearCache(); // 初始化数据 if (defender != null) { DataCenter.Instance.Defender = defender; } if (attacker != null) { DataCenter.Instance.Attacker = attacker; } // REMARK:录像模式或回放模式从这里开始处理(之前的模块释放完毕,开始放置建筑之前。) if (worldType == WorldType.Battle) { GameRecord.StartRecord(); } else if (worldType == WorldType.Replay) { Assert.Should(replayVO != null); DataCenter.Instance.Attacker = replayVO.attacker; DataCenter.Instance.Defender = replayVO.defender; GameRecord.StartReplay(replayVO); } // 添加建筑 for (int i = 0; i < DataCenter.Instance.Defender.buildings.Count; i++) { var buildingVO = DataCenter.Instance.Defender.buildings[i]; var entityModel = DataCenter.Instance.FindEntityModelById(buildingVO.cid); Assert.Should(entityModel != null); var tileEntity = TileEntity.Create(OwnerType.Defender, entityModel); tileEntity.buildingVO = buildingVO; tileEntity.SetTilePosition(new TilePoint(buildingVO.x, buildingVO.y)); IsoMap.Instance.ForceAddEntity(tileEntity); } // 添加工人,士兵(仅在建造模式下) if (worldType == WorldType.Home) { foreach (var armyVo in DataCenter.Instance.Defender.armies) { for (int i = 0; i < armyVo.amount; i++) { var actor = DataCenter.Instance.FindEntityModelById(armyVo.cid); var tileEntity = TileEntity.Create(OwnerType.Defender, actor); tileEntity.SetTilePosition(new TilePoint(0, 0)); IsoMap.Instance.ForceAddEntity(tileEntity); } } // TODO:临时 for (int i = 0; i < DataCenter.Instance.Defender.player.maxWorker; i++) { var actor = DataCenter.Instance.FindEntityModelByResourceName("Pworker"); var tileEntity = TileEntity.Create(OwnerType.Defender, actor); tileEntity.SetTilePosition(new TilePoint(5, 5)); IsoMap.Instance.ForceAddEntity(tileEntity); tileEntity.HideEntity(); } //计算最大人口 DataCenter.Instance.TotalSpace = 0; foreach (var buildingVo in DataCenter.Instance.Defender.buildings) { var model = DataCenter.Instance.FindEntityModelById(buildingVo.cid); if (EntityTypeUtil.IsBarracks(model)) { DataCenter.Instance.TotalSpace += model.spaceProvide; } } //计算已使用人口 DataCenter.Instance.SpaceUsed = 0; foreach (var armyVo in DataCenter.Instance.Defender.armies) { var model = DataCenter.Instance.FindEntityModelById(armyVo.cid); DataCenter.Instance.SpaceUsed += model.spaceUse * armyVo.amount; } } //把资源平均分配到资源库 AverageResourceStorageComponents(ResourceType.Gold); AverageResourceStorageComponents(ResourceType.Oil); switch (worldType) { case WorldType.Battle: IsoMap.Instance.InitGuardAreaMap(); IsoMap.Instance.ShowGuardAreaMap(false); CurrentWorldMode = new IsoWorldModeAttack(); BattleManager.Instance.PreStartBattle(); BattleUIManager.Instance.ShowBattleUI(); break; case WorldType.Replay: CurrentWorldMode = new IsoWorldModeReplay(); BattleManager.Instance.PreStartBattle(); BattleManager.Instance.StartBattle(); // TODO:暂时先放这里 BattleUIManager.Instance.ShowReplayUI(); break; case WorldType.Visit: CurrentWorldMode = new IsoWorldModeVisit(); break; case WorldType.Home: CurrentWorldMode = new IsoWorldModeBuilder(); HomeLandManager.Instance.ShowMyHomeLandUI(); break; } }
public BattleResultCommand(BattleResultVO battleResult, BattleReplayVO battleReplay) { this.battleResult = battleResult; this.battleReplay = battleReplay; }