mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-24 03:53:12 -04: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() {
|
fun updateTileStats() {
|
||||||
val stats = Stats()
|
val stats = Stats()
|
||||||
val localUniqueCache = LocalUniqueCache()
|
val localUniqueCache = LocalUniqueCache()
|
||||||
for (cell in cityInfo.tilesInRange
|
val workedTiles = cityInfo.tilesInRange
|
||||||
.filter {
|
.filter {
|
||||||
cityInfo.location == it.position
|
cityInfo.location == it.position
|
||||||
|| cityInfo.isWorked(it)
|
|| cityInfo.isWorked(it)
|
||||||
|| it.owningCity == cityInfo && (it.getTileImprovement()
|
|| it.owningCity == cityInfo && (it.getTileImprovement()
|
||||||
?.hasUnique(UniqueType.TileProvidesYieldWithoutPopulation) == true
|
?.hasUnique(UniqueType.TileProvidesYieldWithoutPopulation) == true
|
||||||
|| it.terrainHasUnique(UniqueType.TileProvidesYieldWithoutPopulation))
|
|| 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
|
statsFromTiles = stats
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,19 +328,21 @@ open class TileInfo : IsPartOfGameInfoSerialization {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (city != null) {
|
if (city != null) {
|
||||||
var tileUniques = city.getMatchingUniques(UniqueType.StatsFromTiles, stateForConditionals)
|
var tileUniques = city.getMatchingUniques(UniqueType.StatsFromTiles, StateForConditionals.IgnoreConditionals)
|
||||||
.filter { city.matchesFilter(it.params[2]) }
|
.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)) {
|
for (unique in localUniqueCache.get("StatsFromTilesAndObjects", tileUniques)) {
|
||||||
|
if (!unique.conditionalsApply(stateForConditionals)) continue
|
||||||
val tileType = unique.params[1]
|
val tileType = unique.params[1]
|
||||||
if (!matchesTerrainFilter(tileType, observingCiv)) continue
|
if (!matchesTerrainFilter(tileType, observingCiv)) continue
|
||||||
stats.add(unique.stats)
|
stats.add(unique.stats)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (unique in localUniqueCache.get("StatsFromTilesWithout",
|
for (unique in localUniqueCache.get("StatsFromTilesWithout",
|
||||||
city.getMatchingUniques(UniqueType.StatsFromTilesWithout, stateForConditionals))
|
city.getMatchingUniques(UniqueType.StatsFromTilesWithout, StateForConditionals.IgnoreConditionals))
|
||||||
) {
|
) {
|
||||||
if (
|
if (
|
||||||
|
unique.conditionalsApply(stateForConditionals) &&
|
||||||
matchesTerrainFilter(unique.params[1]) &&
|
matchesTerrainFilter(unique.params[1]) &&
|
||||||
!matchesTerrainFilter(unique.params[2]) &&
|
!matchesTerrainFilter(unique.params[2]) &&
|
||||||
city.matchesFilter(unique.params[3])
|
city.matchesFilter(unique.params[3])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user