v0.6.0: Fixed weird fog of war behaviour in some cases

This commit is contained in:
Evan Debenham 2017-04-13 15:46:16 -04:00
parent 01b4653938
commit 73c10be912

View File

@ -175,15 +175,23 @@ public class FogOfWar extends Image {
if (DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell])){ if (DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell])){
//internal wall tiles //internal wall tiles
if (cell + mapWidth >= mapLength if (cell + mapWidth >= mapLength){
|| DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell + mapWidth])){ fillCell(j, i, FOG_COLORS[INVISIBLE][brightness]);
} else if (DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell + mapWidth])){
//these tiles need to check both the left and right side, to account for only one half of them being seen //these tiles need to check both the left and right side, to account for only one half of them being seen
if (cell % mapWidth != 0){ if (cell % mapWidth != 0){
//picks the darkest fog between current tile, left, and below-left(if left is a wall). //picks the darkest fog between current tile, left, and below-left(if left is a wall).
if (cell + mapWidth < mapLength && DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell - 1])){ if (cell + mapWidth < mapLength && DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell - 1])){
//if below-left is also a wall, then we should be dark no matter what.
if (DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell + mapWidth - 1])){
colorArray[0] = colorArray[2] = FOG_COLORS[INVISIBLE][brightness];
} else {
colorArray[0] = colorArray[2] = FOG_COLORS[Math.max(getCellFog(cell), Math.max(getCellFog(cell + mapWidth - 1), getCellFog(cell - 1)))][brightness]; colorArray[0] = colorArray[2] = FOG_COLORS[Math.max(getCellFog(cell), Math.max(getCellFog(cell + mapWidth - 1), getCellFog(cell - 1)))][brightness];
}
} else { } else {
colorArray[0] = colorArray[2] = FOG_COLORS[Math.max(getCellFog(cell), getCellFog(cell - 1))][brightness]; colorArray[0] = colorArray[2] = FOG_COLORS[Math.max(getCellFog(cell), getCellFog(cell - 1))][brightness];
@ -197,7 +205,13 @@ public class FogOfWar extends Image {
//picks the darkest fog between current tile, right, and below-right(if right is a wall). //picks the darkest fog between current tile, right, and below-right(if right is a wall).
if (cell + mapWidth < mapLength && DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell + 1])){ if (cell + mapWidth < mapLength && DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell + 1])){
//if below-right is also a wall, then we should be dark no matter what.
if (DungeonTileSheet.wallStitcheable(Dungeon.level.map[cell + mapWidth + 1])){
colorArray[1] = colorArray[3] = FOG_COLORS[INVISIBLE][brightness];
} else {
colorArray[1] = colorArray[3] = FOG_COLORS[Math.max(getCellFog(cell), Math.max(getCellFog(cell + mapWidth + 1), getCellFog(cell + 1)))][brightness]; colorArray[1] = colorArray[3] = FOG_COLORS[Math.max(getCellFog(cell), Math.max(getCellFog(cell + mapWidth + 1), getCellFog(cell + 1)))][brightness];
}
} else { } else {
colorArray[1] = colorArray[3] = colorArray[1] = colorArray[3] =