public void PlanBattleDeployment( Path spawnPath = null, float spawnPathOffset = 0.0f, int reinforcementBattleSize = 25) { if (this.IsPlanMade) { this.ClearPlan(); } BattleSideDeploymentPlan sideDeploymentPlan1 = this._battleSideDeploymentPlans[1]; BattleSideDeploymentPlan sideDeploymentPlan2 = this._battleSideDeploymentPlans[0]; int battleSize1 = Math.Min(sideDeploymentPlan1.TroopCount, sideDeploymentPlan2.TroopCount); bool isFieldBattle = this._mission.IsFieldBattle; if ((NativeObject)spawnPath != (NativeObject)null) { Vec2 attackerPosition1; Vec2 attackerDirection1; Vec2 defenderPosition1; Vec2 defenderDirection1; MissionDeploymentPlan.GetSpawnPathPositionsForBattleSides(spawnPath, spawnPathOffset, battleSize1, out attackerPosition1, out attackerDirection1, out defenderPosition1, out defenderDirection1); sideDeploymentPlan1.PlanFieldBattleDeploymentAtPosition(attackerPosition1, attackerDirection1); sideDeploymentPlan2.PlanFieldBattleDeploymentAtPosition(defenderPosition1, defenderDirection1); if (reinforcementBattleSize > 0) { int battleSize2 = battleSize1 + reinforcementBattleSize; Vec2 attackerPosition2; Vec2 attackerDirection2; Vec2 defenderPosition2; Vec2 defenderDirection2; MissionDeploymentPlan.GetSpawnPathPositionsForBattleSides(spawnPath, spawnPathOffset, battleSize2, out attackerPosition2, out attackerDirection2, out defenderPosition2, out defenderDirection2); sideDeploymentPlan1.PlanFieldBattleDeploymentAtPosition(attackerPosition2, attackerDirection2, true); sideDeploymentPlan2.PlanFieldBattleDeploymentAtPosition(defenderPosition2, defenderDirection2, true); } } else if (isFieldBattle) { if (this._formationSceneEntries == null) { this.ReadFormationSpawnEntitiesFromScene(true); } sideDeploymentPlan1.PlanFieldBattleDeploymentFromSceneData(battleSize1, this._formationSceneEntries); sideDeploymentPlan2.PlanFieldBattleDeploymentFromSceneData(battleSize1, this._formationSceneEntries); if (reinforcementBattleSize > 0) { int battleSize2 = battleSize1 + reinforcementBattleSize; sideDeploymentPlan1.PlanFieldBattleDeploymentFromSceneData(battleSize2, this._formationSceneEntries, true); sideDeploymentPlan2.PlanFieldBattleDeploymentFromSceneData(battleSize2, this._formationSceneEntries, true); } } else { if (this._formationSceneEntries == null) { this.ReadFormationSpawnEntitiesFromScene(false); } sideDeploymentPlan1.PlanBattleDeploymentFromSceneData(this._formationSceneEntries); sideDeploymentPlan2.PlanBattleDeploymentFromSceneData(this._formationSceneEntries); } this.IsPlanMade = true; }
public void PlanBattleDeploymentFromSceneData(FormationSceneEntry[,] formationSceneEntries) { if (formationSceneEntries == null || formationSceneEntries.GetLength(0) != 2 || formationSceneEntries.GetLength(1) != this._formationDeploymentPlans.Length) { return; } int side = (int)this.Side; for (int index = 0; index < this._formationDeploymentPlans.Length; ++index) { GameEntity defaultEntity = formationSceneEntries[side, index].DefaultEntity; WorldFrame?frame1 = (NativeObject)defaultEntity != (NativeObject)null ? new WorldFrame?(BattleSideDeploymentPlan.GetFrameFromFormationSpawnEntity(defaultEntity)) : new WorldFrame?(); this._formationDeploymentPlans[index].SetFrame(frame1, false); GameEntity reinforcementEntity = formationSceneEntries[side, index].ReinforcementEntity; WorldFrame?frame2 = (NativeObject)reinforcementEntity != (NativeObject)null ? new WorldFrame?(BattleSideDeploymentPlan.GetFrameFromFormationSpawnEntity(reinforcementEntity)) : frame1; this._formationDeploymentPlans[index].SetFrame(frame2, true); } }