mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-10 07:48:31 +07:00
Allow "[stats]" unique on terrains (#10324)
* Allow "[stats]" unique on terrains * send stateForCondtitionals in method call
This commit is contained in:
@ -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()
|
||||
|
@ -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),
|
||||
|
||||
|
Reference in New Issue
Block a user