v1.4.0: improved target switching behaviour for ranged chars

This commit is contained in:
Evan Debenham
2022-08-09 12:35:35 -04:00
parent 452bb77c70
commit 35b1fed388
@@ -349,12 +349,16 @@ public abstract class Mob extends Char {
if (enemies.isEmpty()){ if (enemies.isEmpty()){
return null; return null;
} else { } else {
//go after the closest potential enemy, preferring the hero if two are equidistant //go after the closest potential enemy, preferring enemies that can be attacked, and the hero if two are equidistant
Char closest = null; Char closest = null;
for (Char curr : enemies){ for (Char curr : enemies){
if (closest == null if (closest == null){
|| Dungeon.level.distance(pos, curr.pos) < Dungeon.level.distance(pos, closest.pos) closest = curr;
|| Dungeon.level.distance(pos, curr.pos) == Dungeon.level.distance(pos, closest.pos) && curr == Dungeon.hero){ } else if (canAttack(closest) && !canAttack(curr)){
continue;
} else if ((canAttack(curr) && !canAttack(closest))
|| (Dungeon.level.distance(pos, curr.pos) < Dungeon.level.distance(pos, closest.pos))
|| (Dungeon.level.distance(pos, curr.pos) == Dungeon.level.distance(pos, closest.pos) && curr == Dungeon.hero)){
closest = curr; closest = curr;
} }
} }