protected override void CalculateCurrentOrder()
 {
     BehaviorWaitForLadders.BehaviourState behaviourState = this._followOrder != (object)null ? BehaviorWaitForLadders.BehaviourState.Follow : BehaviorWaitForLadders.BehaviourState.Stop;
     if (behaviourState == this._behaviourState)
     {
         return;
     }
     if (behaviourState == BehaviorWaitForLadders.BehaviourState.Follow)
     {
         this.CurrentOrder = this._followOrder;
         if (this._followTacticalPosition != null)
         {
             this.CurrentFacingOrder = FacingOrder.FacingOrderLookAtDirection(this._followTacticalPosition.Direction);
         }
         else
         {
             this.CurrentFacingOrder = FacingOrder.FacingOrderLookAtEnemy;
         }
     }
     else
     {
         this.CurrentOrder       = this._stopOrder;
         this.CurrentFacingOrder = FacingOrder.FacingOrderLookAtEnemy;
     }
     this._behaviourState = behaviourState;
 }
        internal override void OnValidBehaviorSideSet()
        {
            base.OnValidBehaviorSideSet();
            this._ladders = Mission.Current.ActiveMissionObjects.Where <MissionObject>((Func <MissionObject, bool>)(amo => amo is SiegeLadder)).Select <MissionObject, SiegeLadder>((Func <MissionObject, SiegeLadder>)(amo => amo as SiegeLadder)).ToList <SiegeLadder>();
            this._ladders.RemoveAll((Predicate <SiegeLadder>)(l => l.IsDeactivated || l.WeaponSide != this.behaviorSide));
            SiegeLane siegeLane = TeamAISiegeComponent.SiegeLanes.FirstOrDefault <SiegeLane>((Func <SiegeLane, bool>)(sl => sl.LaneSide == this.behaviorSide));

            this._breachedWallSegment = (siegeLane != null ? siegeLane.DefensePoints.FirstOrDefault <ICastleKeyPosition>((Func <ICastleKeyPosition, bool>)(dp => dp is WallSegment && (dp as WallSegment).IsBreachedWall)) : (ICastleKeyPosition)null) as WallSegment;
            this.ResetFollowOrder();
            this._behaviourState = BehaviorWaitForLadders.BehaviourState.Unset;
        }
        public BehaviorWaitForLadders(Formation formation)
            : base(formation)
        {
            this.behaviorSide = formation.AI.Side;
            this._ladders     = Mission.Current.ActiveMissionObjects.Where <MissionObject>((Func <MissionObject, bool>)(amo => amo is SiegeLadder)).Select <MissionObject, SiegeLadder>((Func <MissionObject, SiegeLadder>)(amo => amo as SiegeLadder)).ToList <SiegeLadder>();
            this._ladders.RemoveAll((Predicate <SiegeLadder>)(l => l.IsDeactivated || l.WeaponSide != this.behaviorSide));
            this._teamAISiegeComponent = (TeamAISiegeComponent)formation.Team.TeamAI;
            SiegeLane siegeLane = TeamAISiegeComponent.SiegeLanes.FirstOrDefault <SiegeLane>((Func <SiegeLane, bool>)(sl => sl.LaneSide == this.behaviorSide));

            this._breachedWallSegment = (siegeLane != null ? siegeLane.DefensePoints.FirstOrDefault <ICastleKeyPosition>((Func <ICastleKeyPosition, bool>)(dp => dp is WallSegment && (dp as WallSegment).IsBreachedWall)) : (ICastleKeyPosition)null) as WallSegment;
            this.ResetFollowOrder();
            this._stopOrder = MovementOrder.MovementOrderStop;
            if (this._followOrder != (object)null)
            {
                this.CurrentOrder    = this._followOrder;
                this._behaviourState = BehaviorWaitForLadders.BehaviourState.Follow;
            }
            else
            {
                this.CurrentOrder    = this._stopOrder;
                this._behaviourState = BehaviorWaitForLadders.BehaviourState.Stop;
            }
        }