コード例 #1
0
        private void DeployFormationsOfTeam(Team team)
        {
            foreach (Formation formation in team.Formations)
            {
                formation.IsAIControlled = true;
            }
            Mission.Current.AllowAiTicking        = true;
            Mission.Current.ForceTickOccasionally = true;
            team.ResetTactic();
            bool teleportingAgents = Mission.Current.IsTeleportingAgents;

            Mission.Current.IsTeleportingAgents = true;
            team.Tick(0.0f);
            Mission.Current.IsTeleportingAgents   = teleportingAgents;
            Mission.Current.AllowAiTicking        = false;
            Mission.Current.ForceTickOccasionally = false;
        }
コード例 #2
0
        public override void EarlyStart()
        {
            Mission.Current.MissionTeamAIType = this._teamAIType;
            switch (this._teamAIType)
            {
            case Mission.MissionTeamAITypeEnum.FieldBattle:
                using (IEnumerator <Team> enumerator = Mission.Current.Teams.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Team current = enumerator.Current;
                        current.AddTeamAI((TeamAIComponent) new TeamAIGeneral(this.Mission, current));
                    }
                    break;
                }

            case Mission.MissionTeamAITypeEnum.Siege:
                using (IEnumerator <Team> enumerator = Mission.Current.Teams.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Team current = enumerator.Current;
                        if (current.Side == BattleSideEnum.Attacker)
                        {
                            current.AddTeamAI((TeamAIComponent) new TeamAISiegeAttacker(this.Mission, current, 5f, 1f));
                        }
                        if (current.Side == BattleSideEnum.Defender)
                        {
                            current.AddTeamAI((TeamAIComponent) new TeamAISiegeDefender(this.Mission, current, 5f, 1f));
                        }
                    }
                    break;
                }

            case Mission.MissionTeamAITypeEnum.SallyOut:
                using (IEnumerator <Team> enumerator = Mission.Current.Teams.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Team current = enumerator.Current;
                        if (current.Side == BattleSideEnum.Attacker)
                        {
                            current.AddTeamAI((TeamAIComponent) new TeamAISallyOutDefender(this.Mission, current, 5f, 1f));
                        }
                        else
                        {
                            current.AddTeamAI((TeamAIComponent) new TeamAISallyOutAttacker(this.Mission, current, 5f, 1f));
                        }
                    }
                    break;
                }
            }
            if (!Mission.Current.Teams.Any <Team>())
            {
                return;
            }
            switch (Mission.Current.MissionTeamAIType)
            {
            case Mission.MissionTeamAITypeEnum.NoTeamAI:
                using (IEnumerator <Team> enumerator = Mission.Current.Teams.Where <Team>((Func <Team, bool>)(t => t.HasTeamAi)).GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Team current = enumerator.Current;
                        current.AddTacticOption((TacticComponent) new TacticCharge(current));
                    }
                    break;
                }

            case Mission.MissionTeamAITypeEnum.FieldBattle:
                using (IEnumerator <Team> enumerator = Mission.Current.Teams.Where <Team>((Func <Team, bool>)(t => t.HasTeamAi)).GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Team team = enumerator.Current;
                        int  num  = this._battleCombatants.Where <IBattleCombatant>((Func <IBattleCombatant, bool>)(bc => bc.Side == team.Side)).Max <IBattleCombatant>((Func <IBattleCombatant, int>)(bcs => bcs.GetTacticsSkillAmount()));
                        team.AddTacticOption((TacticComponent) new TacticCharge(team));
                        if ((double)num >= 20.0)
                        {
                            team.AddTacticOption((TacticComponent) new TacticFullScaleAttack(team));
                            if (team.Side == BattleSideEnum.Defender)
                            {
                                team.AddTacticOption((TacticComponent) new TacticDefensiveEngagement(team));
                                team.AddTacticOption((TacticComponent) new TacticDefensiveLine(team));
                            }
                            if (team.Side == BattleSideEnum.Attacker)
                            {
                                team.AddTacticOption((TacticComponent) new TacticRangedHarrassmentOffensive(team));
                            }
                        }
                        if ((double)num >= 50.0)
                        {
                            team.AddTacticOption((TacticComponent) new TacticFrontalCavalryCharge(team));
                            if (team.Side == BattleSideEnum.Defender)
                            {
                                team.AddTacticOption((TacticComponent) new TacticDefensiveRing(team));
                                team.AddTacticOption((TacticComponent) new TacticHoldChokePoint(team));
                            }
                            if (team.Side == BattleSideEnum.Attacker)
                            {
                                team.AddTacticOption((TacticComponent) new TacticCoordinatedRetreat(team));
                            }
                        }
                    }
                    break;
                }

            case Mission.MissionTeamAITypeEnum.Siege:
                using (IEnumerator <Team> enumerator = Mission.Current.Teams.Where <Team>((Func <Team, bool>)(t => t.HasTeamAi)).GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Team current = enumerator.Current;
                        if (current.Side == BattleSideEnum.Attacker)
                        {
                            current.AddTacticOption((TacticComponent) new TacticBreachWalls(current));
                        }
                        if (current.Side == BattleSideEnum.Defender)
                        {
                            current.AddTacticOption((TacticComponent) new TacticDefendCastle(current));
                        }
                    }
                    break;
                }

            case Mission.MissionTeamAITypeEnum.SallyOut:
                using (IEnumerator <Team> enumerator = Mission.Current.Teams.Where <Team>((Func <Team, bool>)(t => t.HasTeamAi)).GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Team current = enumerator.Current;
                        if (current.Side == BattleSideEnum.Defender)
                        {
                            current.AddTacticOption((TacticComponent) new TacticSallyOutHitAndRun(current));
                        }
                        if (current.Side == BattleSideEnum.Attacker)
                        {
                            current.AddTacticOption((TacticComponent) new TacticSallyOutDefense(current));
                        }
                        current.AddTacticOption((TacticComponent) new TacticCharge(current));
                    }
                    break;
                }
            }
            foreach (Team team in (ReadOnlyCollection <Team>) this.Mission.Teams)
            {
                team.QuerySystem.Expire();
                team.ResetTactic();
            }
        }