Avoid modifying the ruleset object and unique stats (#11014)

This commit is contained in:
Yair Morgenstern 2024-01-26 15:15:16 +02:00 committed by GitHub
parent 67329cdabd
commit ec0cf575f4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -38,7 +38,7 @@ class TileStatFunctions(val tile: Tile) {
val percentageStats = getTilePercentageStats(observingCiv, city, localUniqueCache) val percentageStats = getTilePercentageStats(observingCiv, city, localUniqueCache)
for (stats in statsBreakdown) { for (stats in statsBreakdown) {
val tileType = when(stats.first) { val tileType = when (stats.first) {
improvement -> "Improvement" improvement -> "Improvement"
road.name -> "Road" road.name -> "Road"
else -> "Terrain" else -> "Terrain"
@ -121,11 +121,12 @@ class TileStatFunctions(val tile: Tile) {
val statsFromMinimum = missingFromMinimum(listOfStats.toStats(), minimumStats) val statsFromMinimum = missingFromMinimum(listOfStats.toStats(), minimumStats)
listOfStats.add("Minimum" to statsFromMinimum) listOfStats.add("Minimum" to statsFromMinimum)
if (observingCiv != null && if (observingCiv != null &&
listOfStats.toStats().gold != 0f && observingCiv.goldenAges.isGoldenAge()) listOfStats.toStats().gold != 0f && observingCiv.goldenAges.isGoldenAge())
listOfStats.add("Golden Age" to Stats(gold = 1f)) listOfStats.add("Golden Age" to Stats(gold = 1f))
return listOfStats.filter { !it.second.isEmpty() } // To ensure that the original stats (in uniques, terrains, etc) are not modified in getTileStats, we clone them all
return listOfStats.filter { !it.second.isEmpty() }.map { it.first to it.second.clone() }
} }
/** Ensures each stat is >= [other].stat - modifies in place */ /** Ensures each stat is >= [other].stat - modifies in place */
@ -180,7 +181,7 @@ class TileStatFunctions(val tile: Tile) {
val road = tile.getUnpillagedRoadImprovement() val road = tile.getUnpillagedRoadImprovement()
val roadStats = Stats() val roadStats = Stats()
fun addStats(filter: String, stat: Stat, amount: Float) { fun addStats(filter: String, stat: Stat, amount: Float) {
if (tile.matchesFilter(filter, observingCiv, true)) if (tile.matchesFilter(filter, observingCiv, true))
terrainStats.add(stat, amount) terrainStats.add(stat, amount)