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