mirror of
https://github.com/yairm210/Unciv.git
synced 2025-02-11 11:28:03 +07:00
Resolved #7115 - incorrect tile yields due to caching conditional uniques
This commit is contained in:
parent
b0de127a07
commit
69d7f48893
@ -373,15 +373,18 @@ class CityStats(val cityInfo: CityInfo) {
|
||||
fun updateTileStats() {
|
||||
val stats = Stats()
|
||||
val localUniqueCache = LocalUniqueCache()
|
||||
for (cell in cityInfo.tilesInRange
|
||||
val workedTiles = cityInfo.tilesInRange
|
||||
.filter {
|
||||
cityInfo.location == it.position
|
||||
|| cityInfo.isWorked(it)
|
||||
|| it.owningCity == cityInfo && (it.getTileImprovement()
|
||||
?.hasUnique(UniqueType.TileProvidesYieldWithoutPopulation) == true
|
||||
|| it.terrainHasUnique(UniqueType.TileProvidesYieldWithoutPopulation))
|
||||
})
|
||||
stats.add(cell.getTileStats(cityInfo, cityInfo.civInfo, localUniqueCache))
|
||||
}
|
||||
for (cell in workedTiles) {
|
||||
val cellStats = cell.getTileStats(cityInfo, cityInfo.civInfo, localUniqueCache)
|
||||
stats.add(cellStats)
|
||||
}
|
||||
statsFromTiles = stats
|
||||
}
|
||||
|
||||
|
@ -328,19 +328,21 @@ open class TileInfo : IsPartOfGameInfoSerialization {
|
||||
}
|
||||
|
||||
if (city != null) {
|
||||
var tileUniques = city.getMatchingUniques(UniqueType.StatsFromTiles, stateForConditionals)
|
||||
var tileUniques = city.getMatchingUniques(UniqueType.StatsFromTiles, StateForConditionals.IgnoreConditionals)
|
||||
.filter { city.matchesFilter(it.params[2]) }
|
||||
tileUniques += city.getMatchingUniques(UniqueType.StatsFromObject, stateForConditionals)
|
||||
tileUniques += city.getMatchingUniques(UniqueType.StatsFromObject, StateForConditionals.IgnoreConditionals)
|
||||
for (unique in localUniqueCache.get("StatsFromTilesAndObjects", tileUniques)) {
|
||||
if (!unique.conditionalsApply(stateForConditionals)) continue
|
||||
val tileType = unique.params[1]
|
||||
if (!matchesTerrainFilter(tileType, observingCiv)) continue
|
||||
stats.add(unique.stats)
|
||||
}
|
||||
|
||||
for (unique in localUniqueCache.get("StatsFromTilesWithout",
|
||||
city.getMatchingUniques(UniqueType.StatsFromTilesWithout, stateForConditionals))
|
||||
city.getMatchingUniques(UniqueType.StatsFromTilesWithout, StateForConditionals.IgnoreConditionals))
|
||||
) {
|
||||
if (
|
||||
unique.conditionalsApply(stateForConditionals) &&
|
||||
matchesTerrainFilter(unique.params[1]) &&
|
||||
!matchesTerrainFilter(unique.params[2]) &&
|
||||
city.matchesFilter(unique.params[3])
|
||||
|
Loading…
Reference in New Issue
Block a user