public override bool IsActive(Microsoft.Xna.Framework.GameTime gameTime, Levels.Level level) { if (Entity.IsDead) { return(false); } _currentTarget = level.EntityCloserTo(Entity, TargetCategory); if (_currentTarget != null && (MaxDistance == null || _currentTarget.Distance < MaxDistance)) { return(true); } Walk(gameTime, level, Vector2.Zero); return(false); }
public override bool IsActive(GameTime gameTime, Level level) { if (OverrideRelativeTo == null || OverrideRelativeTo.IsDead || !level.ContainsEntity(OverrideRelativeTo)) { OverrideRelativeTo = null; } var relativeTo = OverrideRelativeTo ?? Entity; if (relativeTo == null) { return(false); } if (OverrideTarget == null || OverrideTarget.IsDead || !level.ContainsEntity(OverrideTarget)) { OverrideTarget = null; } if (OverrideTarget != null) { CurrentTarget = relativeTo.PreviewEnemyLocation(gameTime, level, OverrideTarget, SpeedToEnemy); } else { CurrentTarget = (from ent in level.GetEntities(TargetCategory) let position = ent.CenterPosition - relativeTo.CenterPosition let distance = position.Length() where MinDistance == null || distance > MinDistance where MaxDistance == null || distance < MaxDistance orderby distance select relativeTo.PreviewEnemyLocation(gameTime, level, ent, SpeedToEnemy)) .FirstOrDefault(); } if (CurrentTarget == null || CurrentTarget.Entity.IsDead || !level.ContainsEntity(CurrentTarget.Entity)) { CurrentTarget = null; } return(CurrentTarget != null); }