예제 #1
0
        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;
        }
예제 #2
0
        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);
            }
        }