v0.6.2: improved hero fov logic

This commit is contained in:
Evan Debenham 2017-09-17 17:43:20 -04:00
parent ab847c9e1b
commit 70a39f4229
2 changed files with 15 additions and 13 deletions

View File

@ -173,9 +173,6 @@ public class Dungeon {
public static int gold;
public static HashSet<Integer> chapters;
// Hero's field of view
public static boolean[] visible;
public static SparseArray<ArrayList<Item>> droppedItems;

View File

@ -468,7 +468,17 @@ public class Hero extends Char {
@Override
public boolean act() {
super.act();
//calls to dungeon.observe will also update hero's local FOV.
fieldOfView = Dungeon.level.heroFOV;
//do a full observe (including fog update) if not resting.
if (!resting || buff(MindVision.class) != null || buff(Awareness.class) != null) {
Dungeon.observe();
} else {
//otherwise just directly re-calculate FOV
Dungeon.level.updateFieldOfView( this, fieldOfView );
}
checkVisibleMobs();
if (paralysed > 0) {
@ -478,11 +488,6 @@ public class Hero extends Char {
return false;
}
checkVisibleMobs();
if (!resting || buff(MindVision.class) != null || buff(Awareness.class) != null) {
Dungeon.observe();
}
if (curAction == null) {
if (resting) {
@ -980,7 +985,7 @@ public class Hero extends Char {
Mob target = null;
for (Mob m : Dungeon.level.mobs) {
if (Dungeon.level.heroFOV[ m.pos ] && m.hostile) {
if (fieldOfView[ m.pos ] && m.hostile) {
visible.add(m);
if (!visibleEnemies.contains( m )) {
newMob = true;
@ -998,7 +1003,7 @@ public class Hero extends Char {
if (target != null && (QuickSlotButton.lastTarget == null ||
!QuickSlotButton.lastTarget.isAlive() ||
!Dungeon.level.heroFOV[QuickSlotButton.lastTarget.pos])){
!fieldOfView[QuickSlotButton.lastTarget.pos])){
QuickSlotButton.target(target);
}
@ -1135,7 +1140,7 @@ public class Hero extends Char {
curAction = new HeroAction.Alchemy( cell );
} else if (Dungeon.level.heroFOV[cell] && (ch = Actor.findChar( cell )) instanceof Mob) {
} else if (fieldOfView[cell] && (ch = Actor.findChar( cell )) instanceof Mob) {
if (ch instanceof NPC) {
curAction = new HeroAction.Interact( (NPC)ch );
@ -1508,7 +1513,7 @@ public class Hero extends Char {
for (int y = ay; y <= by; y++) {
for (int x = ax, p = ax + y * Dungeon.level.width(); x <= bx; x++, p++) {
if (Dungeon.level.heroFOV[p] && p != pos) {
if (fieldOfView[p] && p != pos) {
if (intentional) {
sprite.parent.addToBack( new CheckedCell( p ) );