public BehaviorAssaultWalls(Formation formation)
     : base(formation)
 {
     this.BehaviorCoherence     = 0.0f;
     this.behaviorSide          = formation.AI.Side;
     this._teamAISiegeComponent = (TeamAISiegeComponent)formation.Team.TeamAI;
     this._behaviourState       = BehaviorAssaultWalls.BehaviorState.Deciding;
     this.ResetOrderPositions();
     this.CurrentOrder = this._stopOrder;
 }
 protected internal override void TickOccasionally()
 {
     this._behaviourState = this.CheckAndChangeState();
     this.CalculateCurrentOrder();
     foreach (IPrimarySiegeWeapon primarySiegeWeapon in this._primarySiegeWeapons)
     {
         UsableMachine usable = primarySiegeWeapon as UsableMachine;
         if (!usable.IsDeactivated && !primarySiegeWeapon.HasCompletedAction() && !this.formation.IsUsingMachine(usable))
         {
             this.formation.StartUsingMachine(primarySiegeWeapon as UsableMachine);
         }
     }
     if (this._behaviourState == BehaviorAssaultWalls.BehaviorState.MoveToGate)
     {
         CastleGate innerGate = this._teamAISiegeComponent.InnerGate;
         if (innerGate != null && !innerGate.IsGateOpen && !innerGate.IsDestroyed)
         {
             if (!this.formation.IsUsingMachine((UsableMachine)innerGate))
             {
                 this.formation.StartUsingMachine((UsableMachine)innerGate);
             }
         }
         else
         {
             CastleGate outerGate = this._teamAISiegeComponent.OuterGate;
             if (outerGate != null && !outerGate.IsGateOpen && (!outerGate.IsDestroyed && !this.formation.IsUsingMachine((UsableMachine)outerGate)))
             {
                 this.formation.StartUsingMachine((UsableMachine)outerGate);
             }
         }
     }
     else
     {
         if (this.formation.Detachments.Contains((IDetachment)this._teamAISiegeComponent.OuterGate))
         {
             this.formation.StopUsingMachine((UsableMachine)this._teamAISiegeComponent.OuterGate);
         }
         if (this.formation.Detachments.Contains((IDetachment)this._teamAISiegeComponent.InnerGate))
         {
             this.formation.StopUsingMachine((UsableMachine)this._teamAISiegeComponent.InnerGate);
         }
     }
     this.formation.MovementOrder    = this.CurrentOrder;
     this.formation.FacingOrder      = this.CurrentFacingOrder;
     this.formation.ArrangementOrder = this.CurrentArrangementOrder;
 }
 internal override void OnValidBehaviorSideSet()
 {
     base.OnValidBehaviorSideSet();
     this.ResetOrderPositions();
     this._behaviourState = BehaviorAssaultWalls.BehaviorState.Deciding;
 }