v2.4.0: improved 'adjacent enemy' logic for swiftness
This commit is contained in:
@@ -346,11 +346,20 @@ public class Armor extends EquipableItem {
|
|||||||
|
|
||||||
if (hasGlyph(Swiftness.class, owner)) {
|
if (hasGlyph(Swiftness.class, owner)) {
|
||||||
boolean enemyNear = false;
|
boolean enemyNear = false;
|
||||||
PathFinder.buildDistanceMap(owner.pos, Dungeon.level.passable, 2);
|
//for each enemy, check if they are adjacent, or within 2 tiles and an adjacent cell is open
|
||||||
for (Char ch : Actor.chars()){
|
for (Char ch : Actor.chars()){
|
||||||
if ( PathFinder.distance[ch.pos] != Integer.MAX_VALUE && owner.alignment != ch.alignment){
|
if ( Dungeon.level.distance(ch.pos, owner.pos) <= 2 && owner.alignment != ch.alignment){
|
||||||
enemyNear = true;
|
if (Dungeon.level.adjacent(ch.pos, owner.pos)){
|
||||||
break;
|
enemyNear = true;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
for (int i : PathFinder.NEIGHBOURS8){
|
||||||
|
if (Dungeon.level.adjacent(owner.pos+i, ch.pos) && !Dungeon.level.solid[owner.pos+i]){
|
||||||
|
enemyNear = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!enemyNear) speed *= (1.2f + 0.04f * buffedLvl()) * glyph.procChanceMultiplier(owner);
|
if (!enemyNear) speed *= (1.2f + 0.04f * buffedLvl()) * glyph.procChanceMultiplier(owner);
|
||||||
|
|||||||
Reference in New Issue
Block a user