Esempio n. 1
0
 public override void OnMissionTick(float dt)
 {
     if (!this.CheckTimer(dt))
     {
         return;
     }
     if (this._checkState == SallyOutEndLogic.EndConditionCheckState.Deactive)
     {
         foreach (Team team in this.Mission.Teams.Where <Team>((Func <Team, bool>)(t => t.Side == BattleSideEnum.Defender)))
         {
             foreach (Formation formation in team.FormationsIncludingSpecial)
             {
                 if (!TeamAISiegeComponent.IsFormationInsideCastle(formation, true, 0.1f))
                 {
                     this._checkState = SallyOutEndLogic.EndConditionCheckState.Active;
                     return;
                 }
             }
         }
     }
     else
     {
         if (this._checkState != SallyOutEndLogic.EndConditionCheckState.Idle)
         {
             return;
         }
         this._checkState = SallyOutEndLogic.EndConditionCheckState.Active;
     }
 }
Esempio n. 2
0
        public override bool MissionEnded(ref MissionResult missionResult)
        {
            if (this.IsSallyOutOver)
            {
                missionResult = MissionResult.CreateSuccessful((IMission)this.Mission);
                return(true);
            }
            if (this._checkState != SallyOutEndLogic.EndConditionCheckState.Active)
            {
                return(false);
            }
            foreach (Team team in (ReadOnlyCollection <Team>) this.Mission.Teams)
            {
                switch (team.Side)
                {
                case BattleSideEnum.Defender:
                    if (team.FormationsIncludingSpecial.Any <Formation>() && team.Formations.Any <Formation>((Func <Formation, bool>)(f => !TeamAISiegeComponent.IsFormationInsideCastle(f, false, 0.9f))))
                    {
                        this._checkState = SallyOutEndLogic.EndConditionCheckState.Idle;
                        return(false);
                    }
                    continue;

                case BattleSideEnum.Attacker:
                    if (TeamAISiegeComponent.IsFormationGroupInsideCastle(team.FormationsIncludingSpecial, false, 0.1f))
                    {
                        this._checkState = SallyOutEndLogic.EndConditionCheckState.Idle;
                        return(false);
                    }
                    continue;

                default:
                    continue;
                }
            }
            this.IsSallyOutOver = true;
            missionResult       = MissionResult.CreateSuccessful((IMission)this.Mission);
            return(true);
        }