示例#1
0
        public override bool CanProcessTurn(GameContext context, Hero hero)
        {
            var targetUnit = context.EnemyUnits.Where(u => MathUtils.GetDistance(u, hero) <= hero.AttackRange).OrderBy(u => u.Health).FirstOrDefault();

            if (targetUnit != null)
            {
                context.Attack(targetUnit.UnitId, hero.HeroType.ToString());
                return(true);
            }

            return(false);
        }
示例#2
0
        public override bool CanProcessTurn(GameContext context, Hero hero)
        {
            var targetUnit = context.MyUnits.Where(u => MathUtils.GetDistance(u, hero) <= hero.AttackRange).FirstOrDefault(u => u.Health <= hero.AttackDamage && u.Health < u.MaxHealth * 0.4);

            if (targetUnit != null)
            {
                context.Attack(targetUnit.UnitId, hero.HeroType.ToString());
                context.MyUnits.Remove(targetUnit);
                return(true);
            }

            return(false);
        }
示例#3
0
        public override bool CanProcessTurn(GameContext context, Hero hero)
        {
            if (context.EnemyUnits.Where(u => MathUtils.GetDistance(hero, u) < Constants.AggroDistance).Count() <= 2 &&
                hero.Health > hero.MaxHealth * 0.6)
            {
                var targetUnit = context.EnemyHeroes.Where(u => MathUtils.GetDistance(u, hero) <= hero.AttackRange).OrderBy(u => u.Health).FirstOrDefault();
                if (targetUnit != null)
                {
                    context.Attack(targetUnit.UnitId, hero.HeroType.ToString());
                    return(true);
                }
            }

            return(false);
        }
示例#4
0
        public override bool CanProcessTurn(GameContext context, Hero hero)
        {
            var targetHero = context.EnemyHeroes.FirstOrDefault(h => h.Health < hero.AttackDamage * 2);

            if (targetHero != null)
            {
                if (MathUtils.GetDistance(hero, targetHero) <= hero.AttackRange)
                {
                    context.Attack(targetHero.UnitId, hero.HeroType.ToString());
                    return(true);
                }
                else if (MathUtils.GetDistance(targetHero, hero) <= hero.MovementSpeed + hero.AttackRange)
                {
                    var position = MathUtils.GetPointAlongLine(hero.Position, targetHero.Position, hero.AttackRange);
                    context.MoveAttack(position, targetHero.UnitId);
                    return(true);
                }
            }

            return(false);
        }