mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-12 16:59:11 +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?,
|
fun getTileStats(city: City?, observingCiv: Civilization?,
|
||||||
localUniqueCache: LocalUniqueCache = LocalUniqueCache(false)
|
localUniqueCache: LocalUniqueCache = LocalUniqueCache(false)
|
||||||
): Stats {
|
): Stats {
|
||||||
val stats = getTerrainStats()
|
|
||||||
var minimumStats = if (tile.isCityCenter()) Stats.DefaultCityCenterMinimum else Stats.ZERO
|
|
||||||
|
|
||||||
val stateForConditionals = StateForConditionals(civInfo = observingCiv, city = city, tile = tile)
|
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) {
|
if (city != null) {
|
||||||
val statsFromTilesUniques =
|
val statsFromTilesUniques =
|
||||||
localUniqueCache.forCityGetMatchingUniques(
|
localUniqueCache.forCityGetMatchingUniques(
|
||||||
@ -93,13 +93,19 @@ class TileStatFunctions(val tile: Tile) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Gets basic stats to start off [getTileStats] or [getTileStartYield], independently mutable result */
|
/** 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
|
var stats: Stats? = null
|
||||||
|
|
||||||
// allTerrains iterates over base, natural wonder, then features
|
// allTerrains iterates over base, natural wonder, then features
|
||||||
for (terrain in tile.allTerrains) {
|
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 {
|
when {
|
||||||
terrain.hasUnique(UniqueType.NullifyYields) ->
|
terrain.hasUnique(UniqueType.NullifyYields, stateForConditionals) ->
|
||||||
return terrain.cloneStats()
|
return terrain.cloneStats()
|
||||||
terrain.overrideStats || stats == null ->
|
terrain.overrideStats || stats == null ->
|
||||||
stats = terrain.cloneStats()
|
stats = terrain.cloneStats()
|
||||||
|
@ -16,7 +16,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
|
|||||||
// region Stat providing uniques
|
// region Stat providing uniques
|
||||||
|
|
||||||
// Used for *global* bonuses and improvement/terrain bonuses
|
// 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
|
// Used for city-wide bonuses
|
||||||
StatsPerCity("[stats] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief),
|
StatsPerCity("[stats] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief),
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user