Exemplo n.º 1
0
        public static bool IsTargetableNoSource(GameInstance game, CachedMob mob, CachedMob target)
        {
            bool isTargetAlive = target.MobInstance.Hp > 0;
            bool isEnemy       = mob.MobInfo.Team != target.MobInfo.Team;

            return(isTargetAlive && isEnemy);
        }
Exemplo n.º 2
0
        public static bool IsTargetable(GameInstance game, CachedMob mob, CachedMob target,
                                        bool checkVisibility = true)
        {
            bool isVisible = !checkVisibility || game.Map.IsVisible(mob.MobInstance.Coord, target.MobInstance.Coord);


            return(isVisible && IsTargetableNoSource(game, mob, target));
        }
Exemplo n.º 3
0
        public static void AssertMobPlayable(GameInstance game, CachedMob mob)
        {
            if (mob.MobInstance.Hp <= 0)
            {
                ReplayRecorder.Instance.SaveAndClear(game, 0);

                throw new InvariantViolationException("Trying to play with a dead mob (currentMob.HP == 0)");
            }
        }
Exemplo n.º 4
0
        public static bool IsAbilityUsableApRangeCheck(GameInstance game, CachedMob mob, CachedMob target,
                                                       int abilityId)
        {
            var abilityInfo = game.MobManager.Abilities[abilityId];

            bool enoughAp      = mob.MobInstance.Ap >= abilityInfo.Cost;
            bool withinRange   = mob.MobInstance.Coord.Distance(target.MobInstance.Coord) <= abilityInfo.Range;
            bool notOnCooldown = game.State.Cooldowns[abilityId] == 0;

            return(enoughAp && withinRange && notOnCooldown);
        }
Exemplo n.º 5
0
        public static bool IsAbilityUsableFrom(GameInstance game, CachedMob mob, AxialCoord from, CachedMob target,
                                               int abilityId)
        {
            var ability = game.MobManager.Abilities[abilityId];

            int remainingAp = mob.MobInstance.Ap - game.Pathfinder.Distance(mob.MobInstance.Coord, from);

            bool withinRange   = ability.Range >= from.Distance(target.MobInstance.Coord);
            bool enoughAp      = remainingAp >= ability.Cost;
            bool notOnCooldown = game.State.Cooldowns[abilityId] == 0;

            return(withinRange && enoughAp && notOnCooldown);
        }
Exemplo n.º 6
0
        public static UctAction CanMoveTo(GameInstance game, CachedMob mob, AxialCoord coord)
        {
            bool isEmpty = game.Map[coord] == HexType.Empty && game.State.AtCoord(coord, true) == null;

            int  distance    = game.Pathfinder.Distance(mob.MobInstance.Coord, coord);
            int  remainingAp = mob.MobInstance.Ap - distance;
            bool enoughAp    = remainingAp >= 0;

            if (isEmpty && enoughAp)
            {
                return(UctAction.MoveAction(mob.MobId, coord));
            }
            else
            {
                return(UctAction.NullAction());
            }
        }
Exemplo n.º 7
0
 public AbilityInfo AbilityByIndex(CachedMob mob, int index)
 {
     return(Abilities[mob.MobInfo.Abilities[index]]);
 }
Exemplo n.º 8
0
 public static bool IsAbilityUsable(GameInstance game, CachedMob mob, CachedMob target, int abilityId)
 {
     return(IsTargetable(game, mob, target) && IsAbilityUsableApRangeCheck(game, mob, target, abilityId));
 }