From 31acb7e469bb5f0c0607b4e738db6ebac29c2743 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 15 Jan 2023 11:05:19 +0200 Subject: [PATCH] Tiles 1 step out of bounds of visibility are visible if they're higher than current tile --- core/src/com/unciv/logic/map/TileMap.kt | 6 +++- .../com/unciv/logic/map/VisibilityTests.kt | 34 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/core/src/com/unciv/logic/map/TileMap.kt b/core/src/com/unciv/logic/map/TileMap.kt index 49dc16aff4..377a0c2a8b 100644 --- a/core/src/com/unciv/logic/map/TileMap.kt +++ b/core/src/com/unciv/logic/map/TileMap.kt @@ -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() @@ -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: diff --git a/tests/src/com/unciv/logic/map/VisibilityTests.kt b/tests/src/com/unciv/logic/map/VisibilityTests.kt index f7a01bd4b0..87a3737913 100644 --- a/tests/src/com/unciv/logic/map/VisibilityTests.kt +++ b/tests/src/com/unciv/logic/map/VisibilityTests.kt @@ -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)) + } + }