From e8d4767b6dc8ce94c9c7e792db543eff77946c2a Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Thu, 6 May 2021 15:27:30 +0300 Subject: [PATCH] Height of terrains is now defined by a unique --- android/assets/jsons/Civ V - Vanilla/Terrains.json | 11 +++++++---- core/src/com/unciv/logic/map/TileInfo.kt | 11 +++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/android/assets/jsons/Civ V - Vanilla/Terrains.json b/android/assets/jsons/Civ V - Vanilla/Terrains.json index 673191d5bd..9f87722f4d 100644 --- a/android/assets/jsons/Civ V - Vanilla/Terrains.json +++ b/android/assets/jsons/Civ V - Vanilla/Terrains.json @@ -64,7 +64,8 @@ "name": "Mountain", "type": "Land", "impassable": true, - "RGB": [120, 120, 120] + "RGB": [120, 120, 120], + "uniques":["Has an elevation of [4] for visibility calculations"] }, { "name": "Snow", @@ -85,7 +86,8 @@ "defenceBonus": 0.25, "RGB": [105,125,72], "occursOn": ["Tundra","Plains","Grassland","Desert","Snow"], - "uniques": ["Rough terrain", "[+5] Strength for cities built on this terrain", "[+1] Sight for [Land] units"] + "uniques": ["Rough terrain", "[+5] Strength for cities built on this terrain", + "[+1] Sight for [Land] units", "Has an elevation of [2] for visibility calculations"] }, { "name": "Forest", @@ -97,7 +99,8 @@ "unbuildable": true, "defenceBonus": 0.25, "occursOn": ["Tundra","Plains","Grassland","Hill"], - "uniques": ["Provides a one-time Production bonus to the closest city when cut down", "Rough terrain"] + "uniques": ["Provides a one-time Production bonus to the closest city when cut down", "Rough terrain", + "Has an elevation of [1] for visibility calculations"] }, { "name": "Jungle", @@ -108,7 +111,7 @@ "unbuildable": true, "defenceBonus": 0.25, "occursOn": ["Plains","Grassland"], - "uniques": ["Rough terrain"] + "uniques": ["Rough terrain", "Has an elevation of [1] for visibility calculations"] }, { "name": "Marsh", diff --git a/core/src/com/unciv/logic/map/TileInfo.kt b/core/src/com/unciv/logic/map/TileInfo.kt index e6ef0f8239..0385b04dfa 100644 --- a/core/src/com/unciv/logic/map/TileInfo.kt +++ b/core/src/com/unciv/logic/map/TileInfo.kt @@ -163,6 +163,13 @@ open class TileInfo { // and the toSequence so that aggregations (like neighbors.flatMap{it.units} don't take up their own space fun getHeight(): Int { + if (ruleset.terrains.values.asSequence().flatMap { it.uniqueObjects } + .any { it.placeholderText == "Has an elevation of [] for visibility calculations" }) + return getAllTerrains().flatMap { it.uniqueObjects } + .filter { it.placeholderText == "Has an elevation of [] for visibility calculations" } + .map { it.params[0].toInt() }.sum() + + // Old method - deprecated 3.14.7 if (baseTerrain == Constants.mountain) return 4 if (isHill()) return 2 if (terrainFeatures.contains(Constants.forest) || terrainFeatures.contains(Constants.jungle)) return 1 @@ -382,12 +389,12 @@ open class TileInfo { || filter == "River" && isAdjacentToRiver() || terrainFeatures.contains(filter) || baseTerrainObject.uniques.contains(filter) - || terrainFeatures.isNotEmpty() && getTerrainFeatures().last().uniques.contains(filter) || improvement == filter - || civInfo != null && hasViewableResource(civInfo) && resource == filter || filter == "Water" && isWater || filter == "Land" && isLand || filter == naturalWonder + || terrainFeatures.isNotEmpty() && getTerrainFeatures().last().uniques.contains(filter) + || civInfo != null && hasViewableResource(civInfo) && resource == filter || filter == "Foreign Land" && civInfo!=null && !isFriendlyTerritory(civInfo) || filter == "Friendly Land" && civInfo!=null && isFriendlyTerritory(civInfo) }