Tiles 1 step out of bounds of visibility are visible if they're higher than current tile

This commit is contained in:
Yair Morgenstern
2023-01-15 11:05:19 +02:00
parent d1a9caaa88
commit 31acb7e469
2 changed files with 39 additions and 1 deletions

View File

@ -338,7 +338,7 @@ class TileMap : IsPartOfGameInfoSerialization {
isAttackable = false
))
for (i in 1..sightDistance) { // in each layer,
for (i in 1..sightDistance+1) { // in each layer,
// This is so we don't use tiles in the same distance to "see over",
// that is to say, the "viewableTiles.contains(it) check will return false for neighbors from the same distance
val tilesToAddInDistanceI = ArrayList<ViewableTile>()
@ -346,6 +346,10 @@ class TileMap : IsPartOfGameInfoSerialization {
for (cTile in getTilesAtDistance(position, i)) { // for each tile in that layer,
val cTileHeight = cTile.tileHeight
// For the sightdistance+1 layer - that's "one out of sight" - it's only visible if it's higher than the current tile
if (i == sightDistance+1 && cTileHeight <= aUnitHeight)
continue
/*
Okay so, if we're looking at a tile from height a to one with height c with a MAXIMUM HEIGHT of b in the middle,
we have several scenarios:

View File

@ -163,4 +163,38 @@ class VisibilityTests {
assert(!viewableTiles.contains(hill))
}
@Test
fun cannotSee3TilesAwayPlain() {
val source = addTile("Grassland", Vector2(0f,0f))
addTile("Grassland", Vector2(1f,0f))
addTile("Grassland", Vector2(2f,0f))
val beyondSight = addTile("Grassland", Vector2(3f,0f))
val viewableTiles = source.getViewableTilesList(2)
assert(!viewableTiles.contains(beyondSight))
}
@Test
fun canSeeElevation3Tiles() {
val source = addTile("Grassland", Vector2(0f,0f))
addTile("Grassland", Vector2(1f,0f))
addTile("Grassland", Vector2(2f,0f))
val beyondSight = addTile(listOf("Grassland", "Hill"), Vector2(3f,0f))
val viewableTiles = source.getViewableTilesList(2)
assert(viewableTiles.contains(beyondSight))
}
@Test
fun cannotSeeHiddenElevation3Tiles() {
val source = addTile("Grassland", Vector2(0f,0f))
addTile("Grassland", Vector2(1f,0f))
addTile(listOf("Grassland", "Forest"), Vector2(2f,0f))
val beyondSight = addTile(listOf("Grassland", "Hill"), Vector2(3f,0f))
val viewableTiles = source.getViewableTilesList(2)
assert(!viewableTiles.contains(beyondSight))
}
}