diff --git a/core/src/com/unciv/logic/map/tile/TileStatFunctions.kt b/core/src/com/unciv/logic/map/tile/TileStatFunctions.kt index 339681c147..a371d26de1 100644 --- a/core/src/com/unciv/logic/map/tile/TileStatFunctions.kt +++ b/core/src/com/unciv/logic/map/tile/TileStatFunctions.kt @@ -21,11 +21,11 @@ class TileStatFunctions(val tile: Tile) { fun getTileStats(city: City?, observingCiv: Civilization?, localUniqueCache: LocalUniqueCache = LocalUniqueCache(false) ): Stats { - val stats = getTerrainStats() - var minimumStats = if (tile.isCityCenter()) Stats.DefaultCityCenterMinimum else Stats.ZERO - val stateForConditionals = StateForConditionals(civInfo = observingCiv, city = city, tile = tile) + val stats = getTerrainStats(stateForConditionals) + var minimumStats = if (tile.isCityCenter()) Stats.DefaultCityCenterMinimum else Stats.ZERO + if (city != null) { val statsFromTilesUniques = localUniqueCache.forCityGetMatchingUniques( @@ -93,13 +93,19 @@ class TileStatFunctions(val tile: Tile) { } /** Gets basic stats to start off [getTileStats] or [getTileStartYield], independently mutable result */ - private fun getTerrainStats(): Stats { + private fun getTerrainStats(stateForConditionals: StateForConditionals = StateForConditionals()): Stats { var stats: Stats? = null // allTerrains iterates over base, natural wonder, then features for (terrain in tile.allTerrains) { + for (unique in terrain.getMatchingUniques(UniqueType.Stats, stateForConditionals)) { + if (stats == null) { + stats = unique.stats + } + else stats.add(unique.stats) + } when { - terrain.hasUnique(UniqueType.NullifyYields) -> + terrain.hasUnique(UniqueType.NullifyYields, stateForConditionals) -> return terrain.cloneStats() terrain.overrideStats || stats == null -> stats = terrain.cloneStats() diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 5221b8f7f8..8b90bc81d2 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -16,7 +16,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: // region Stat providing uniques // Used for *global* bonuses and improvement/terrain bonuses - Stats("[stats]", UniqueTarget.Global, UniqueTarget.Improvement), + Stats("[stats]", UniqueTarget.Global, UniqueTarget.Improvement, UniqueTarget.Terrain), // Used for city-wide bonuses StatsPerCity("[stats] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief),