Пример #1
0
        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);
        }