Allow "[stats]" unique on terrains (#10324)

* Allow "[stats]" unique on terrains

* send stateForCondtitionals in method call
This commit is contained in:
SeventhM
2023-10-23 00:02:58 -07:00
committed by GitHub
parent 2dfac21004
commit b687d84e54
2 changed files with 12 additions and 6 deletions

View File

@ -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()

View File

@ -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),