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); }
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)); }
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)"); } }
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); }
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); }
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()); } }
public AbilityInfo AbilityByIndex(CachedMob mob, int index) { return(Abilities[mob.MobInfo.Abilities[index]]); }
public static bool IsAbilityUsable(GameInstance game, CachedMob mob, CachedMob target, int abilityId) { return(IsTargetable(game, mob, target) && IsAbilityUsableApRangeCheck(game, mob, target, abilityId)); }