From b687d84e54637f161edcd237eb8acedc8b79d54f Mon Sep 17 00:00:00 2001 From: SeventhM <127357473+SeventhM@users.noreply.github.com> Date: Mon, 23 Oct 2023 00:02:58 -0700 Subject: [PATCH] Allow "[stats]" unique on terrains (#10324) * Allow "[stats]" unique on terrains * send stateForCondtitionals in method call --- .../unciv/logic/map/tile/TileStatFunctions.kt | 16 +++++++++++----- .../unciv/models/ruleset/unique/UniqueType.kt | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) 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),