From 924dbf70d0b266efd04ad7926b744c112147d239 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 15 Jan 2023 08:05:43 +0200 Subject: [PATCH] Added framework for tile visibility testing --- core/src/com/unciv/logic/map/TileMap.kt | 2 +- .../com/unciv/logic/map/VisibilityTests.kt | 111 ++++++++++++++++++ 2 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 tests/src/com/unciv/logic/map/VisibilityTests.kt diff --git a/core/src/com/unciv/logic/map/TileMap.kt b/core/src/com/unciv/logic/map/TileMap.kt index c0b24a581d..8fafe23975 100644 --- a/core/src/com/unciv/logic/map/TileMap.kt +++ b/core/src/com/unciv/logic/map/TileMap.kt @@ -36,7 +36,7 @@ class TileMap : IsPartOfGameInfoSerialization { var mapParameters = MapParameters() - private var tileList = ArrayList() + var tileList = ArrayList() /** Structure geared for simple serialization by Gdx.Json (which is a little blind to kotlin collections, especially HashSet) * @param position [Vector2] of the location diff --git a/tests/src/com/unciv/logic/map/VisibilityTests.kt b/tests/src/com/unciv/logic/map/VisibilityTests.kt new file mode 100644 index 0000000000..65b6e306d3 --- /dev/null +++ b/tests/src/com/unciv/logic/map/VisibilityTests.kt @@ -0,0 +1,111 @@ +// Taken from https://github.com/TomGrill/gdx-testing +package com.unciv.logic.map + +import com.badlogic.gdx.math.Vector2 +import com.unciv.logic.GameInfo +import com.unciv.logic.civilization.CivilizationInfo +import com.unciv.models.ruleset.* +import com.unciv.testing.GdxTestRunner +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(GdxTestRunner::class) +class VisibilityTests { + + private var civInfo = CivilizationInfo() + private var enemyCivInfo = CivilizationInfo() + private var ruleSet = Ruleset() + private var unit = MapUnit() + private var enemyUnit = MapUnit() + val tileMap = TileMap() + + @Before + fun initTheWorld() { + RulesetCache.loadRulesets() + ruleSet = RulesetCache.getVanillaRuleset() + civInfo.gameInfo = GameInfo() + civInfo.gameInfo.ruleSet = ruleSet + civInfo.nation = Nation().apply { name = "My nation" } + civInfo.gameInfo.civilizations.add(civInfo) + civInfo.gameInfo.civilizations.add(enemyCivInfo) + + unit.civInfo = civInfo + unit.owner = civInfo.civName + + enemyUnit.civInfo = enemyCivInfo + enemyUnit.owner = enemyCivInfo.civName + + tileMap.ruleset = ruleSet + } + + fun addTile(terrainName: String, position:Vector2) = addTile(listOf(terrainName), position) + + fun addTile(terrainNames: List, position:Vector2): TileInfo { + val tile = TileInfo() + tile.position = position + tile.baseTerrain = terrainNames.first() + tile.ruleset = ruleSet + tile.setTerrainTransients() + tile.setTerrainFeatures(terrainNames.subList(1,terrainNames.size)) + tile.tileMap = tileMap + tileMap.tileList.add(tile) + tileMap.tileMatrix.clear() + tileMap.setTransients() + return tile + } + + @Test + fun canSeeNearbyForest() { + val grassland = addTile("Grassland", Vector2(0f,0f)) + val forest = addTile(listOf("Grassland", "Forest"), Vector2(1f, 0f)) + val viewableTiles = grassland.getViewableTilesList(1) + assert(viewableTiles.contains(forest)) + } + + @Test + fun canSeeForestOverPlains() { + val grassland = addTile("Grassland", Vector2(0f,0f)) + addTile("Plains", Vector2(1f,0f)) + val forest = addTile(listOf("Grassland", "Forest"), Vector2(2f, 1f)) + val viewableTiles = grassland.getViewableTilesList(2) + assert(viewableTiles.contains(forest)) + } + + @Test + fun cannotSeePlainsOverForest() { + val grassland = addTile("Grassland", Vector2(0f,0f)) + addTile(listOf("Grassland", "Forest"), Vector2(1f, 1f)) + val plains = addTile("Plains", Vector2(2f,0f)) + val viewableTiles = grassland.getViewableTilesList(2) + assert(!viewableTiles.contains(plains)) + } + + @Test + fun cannotSeeForestOverForest() { + val grassland = addTile("Grassland", Vector2(0f,0f)) + addTile(listOf("Grassland", "Forest"), Vector2(1f, 1f)) + val plains = addTile(listOf("Plains", "Forest"), Vector2(2f,0f)) + val viewableTiles = grassland.getViewableTilesList(2) + assert(!viewableTiles.contains(plains)) + } + + @Test + fun canSeeHillOverPlains() { + val grassland = addTile("Grassland", Vector2(0f,0f)) + addTile("Plains", Vector2(1f,0f)) + val hill = addTile(listOf("Grassland", "Hill"), Vector2(2f, 1f)) + val viewableTiles = grassland.getViewableTilesList(2) + assert(viewableTiles.contains(hill)) + } + + @Test + fun cannotSeePlainsOverHill() { + val grassland = addTile("Grassland", Vector2(0f,0f)) + addTile(listOf("Grassland", "Hill"), Vector2(1f, 1f)) + val plains = addTile("Plains", Vector2(2f,0f)) + val viewableTiles = grassland.getViewableTilesList(2) + assert(!viewableTiles.contains(plains)) + } + +}