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