internal override void OnValidBehaviorSideSet()
 {
     base.OnValidBehaviorSideSet();
     this._primarySiegeWeapons = Mission.Current.ActiveMissionObjects.FindAllWithType <UsableMachine>().ToList <UsableMachine>();
     this._primarySiegeWeapons.RemoveAll((Predicate <UsableMachine>)(uM => !(uM is IPrimarySiegeWeapon) || (uM as IPrimarySiegeWeapon).WeaponSide != this.behaviorSide));
     this.RecreateFollowEntityOrder();
     this._behaviourState = BehaviorUseSiegeMachines.BehaviourState.Unset;
 }
        protected internal override void TickOccasionally()
        {
            base.TickOccasionally();
            this._primarySiegeWeapons.RemoveAll((Predicate <UsableMachine>)(psw => psw.IsDestroyed));
            IEnumerable <UsableMachine> source = this._primarySiegeWeapons.Where <UsableMachine>((Func <UsableMachine, bool>)(psw => !psw.IsDeactivated && !(psw as IPrimarySiegeWeapon).HasCompletedAction()));

            if (source.IsEmpty <UsableMachine>())
            {
                this.CurrentOrder = this._stopOrder;
            }
            else
            {
                BehaviorUseSiegeMachines.BehaviourState behaviourState = !source.Any <UsableMachine>((Func <UsableMachine, bool>)(uw => uw is SiegeTower)) || !(source.FirstOrDefault <UsableMachine>((Func <UsableMachine, bool>)(uw => uw is SiegeTower)) as SiegeTower).HasArrivedAtTarget ? (this._followEntityOrder != (object)null ? BehaviorUseSiegeMachines.BehaviourState.Follow : BehaviorUseSiegeMachines.BehaviourState.Stop) : BehaviorUseSiegeMachines.BehaviourState.ClimbSiegeTower;
                if (behaviourState != this._behaviourState)
                {
                    switch (behaviourState)
                    {
                    case BehaviorUseSiegeMachines.BehaviourState.Follow:
                        this.CurrentOrder = this._followEntityOrder;
                        break;

                    case BehaviorUseSiegeMachines.BehaviourState.ClimbSiegeTower:
                        this.RecreateFollowEntityOrder();
                        this.CurrentOrder = this._followEntityOrder;
                        break;

                    default:
                        this.CurrentOrder = this._stopOrder;
                        break;
                    }
                    this._behaviourState = behaviourState;
                    if (this._behaviourState == BehaviorUseSiegeMachines.BehaviourState.ClimbSiegeTower || !this.formation.QuerySystem.HasShield)
                    {
                        this.formation.ArrangementOrder = ArrangementOrder.ArrangementOrderLine;
                    }
                    else
                    {
                        this.formation.ArrangementOrder = ArrangementOrder.ArrangementOrderShieldWall;
                    }
                }
                if (this.formation.AI.ActiveBehavior == this)
                {
                    foreach (UsableMachine usable in source)
                    {
                        if (!this.formation.IsUsingMachine(usable))
                        {
                            this.formation.StartUsingMachine(usable);
                        }
                    }
                }
                this.formation.MovementOrder = this.CurrentOrder;
            }
        }
 public BehaviorUseSiegeMachines(Formation formation)
     : base(formation)
 {
     this.behaviorSide         = formation.AI.Side;
     this._primarySiegeWeapons = Mission.Current.ActiveMissionObjects.FindAllWithType <UsableMachine>().ToList <UsableMachine>();
     this._primarySiegeWeapons.RemoveAll((Predicate <UsableMachine>)(uM => !(uM is IPrimarySiegeWeapon) || (uM as IPrimarySiegeWeapon).WeaponSide != this.behaviorSide));
     this._teamAISiegeComponent = (TeamAISiegeComponent)formation.Team.TeamAI;
     this.BehaviorCoherence     = 0.0f;
     this._stopOrder            = MovementOrder.MovementOrderStop;
     this.RecreateFollowEntityOrder();
     if (this._followEntityOrder != (object)null)
     {
         this._behaviourState = BehaviorUseSiegeMachines.BehaviourState.Follow;
         this.CurrentOrder    = this._followEntityOrder;
     }
     else
     {
         this._behaviourState = BehaviorUseSiegeMachines.BehaviourState.Stop;
         this.CurrentOrder    = this._stopOrder;
     }
 }