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; } }