Esempio n. 1
0
        private FormationAI.BehaviorSide DetermineGatheringSide()
        {
            this.DetermineMostImportantInvadingEnemyFormation();
            if (this._targetEnemyFormation == null)
            {
                if (this._behaviourState == BehaviorEliminateEnemyInsideCastle.BehaviourState.Attacking)
                {
                    this._behaviourState = BehaviorEliminateEnemyInsideCastle.BehaviourState.UnSet;
                }
                return(this.behaviorSide);
            }
            int connectedSides = TeamAISiegeComponent.QuerySystem.DeterminePositionAssociatedSide(this._targetEnemyFormation.QuerySystem.MedianPosition.GetNavMeshVec3());
            IEnumerable <SiegeLane> source1 = TeamAISiegeComponent.SiegeLanes.Where <SiegeLane>((Func <SiegeLane, bool>)(sl => sl.LaneState != SiegeLane.LaneStateEnum.Conceited && !SiegeQuerySystem.AreSidesRelated(sl.LaneSide, connectedSides)));

            FormationAI.BehaviorSide behaviorSide = this.behaviorSide;
            if (source1.Any <SiegeLane>())
            {
                if (source1.Count <SiegeLane>() > 1)
                {
                    int leastDangerousLaneState     = source1.Min <SiegeLane>((Func <SiegeLane, int>)(pgl => (int)pgl.LaneState));
                    IEnumerable <SiegeLane> source2 = source1.Where <SiegeLane>((Func <SiegeLane, bool>)(pgl => pgl.LaneState == (SiegeLane.LaneStateEnum)leastDangerousLaneState));
                    behaviorSide = source2.Count <SiegeLane>() <= 1 ? source2.First <SiegeLane>().LaneSide : source2.MinBy <SiegeLane, int>((Func <SiegeLane, int>)(ldl => SiegeQuerySystem.SideDistance(1 << connectedSides, 1 << (int)(ldl.LaneSide & (FormationAI.BehaviorSide) 31)))).LaneSide;
                }
                else
                {
                    behaviorSide = source1.First <SiegeLane>().LaneSide;
                }
            }
            return(behaviorSide);
        }
Esempio n. 2
0
 public BehaviorEliminateEnemyInsideCastle(Formation formation)
     : base(formation)
 {
     this._teamAISiegeDefender = formation.Team.TeamAI as TeamAISiegeDefender;
     this._behaviourState      = BehaviorEliminateEnemyInsideCastle.BehaviourState.UnSet;
     this.behaviorSide         = formation.AI.Side;
     this.ResetOrderPositions();
 }