From 67482f0ebe9ac7d099bb7e282f3b57155cc5fc87 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 3 Apr 2023 14:36:24 +0300 Subject: [PATCH] #9098 - rankStatsForCityWork also uses local unique cache --- core/src/com/unciv/logic/automation/Automation.kt | 12 +++++++----- .../unciv/logic/city/managers/CityReligionManager.kt | 12 ++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/core/src/com/unciv/logic/automation/Automation.kt b/core/src/com/unciv/logic/automation/Automation.kt index e61163c849..eafe4b5802 100644 --- a/core/src/com/unciv/logic/automation/Automation.kt +++ b/core/src/com/unciv/logic/automation/Automation.kt @@ -23,12 +23,12 @@ object Automation { fun rankTileForCityWork(tile: Tile, city: City, cityStats: Stats, localUniqueCache: LocalUniqueCache = LocalUniqueCache(false)): Float { val stats = tile.stats.getTileStats(city, city.civ, localUniqueCache) - return rankStatsForCityWork(stats, city, cityStats) + return rankStatsForCityWork(stats, city, cityStats, false, localUniqueCache) } fun rankSpecialist(specialist: String, city: City, cityStats: Stats, localUniqueCache: LocalUniqueCache): Float { val stats = city.cityStats.getStatsOfSpecialist(specialist, localUniqueCache) - var rank = rankStatsForCityWork(stats, city, cityStats, true) + var rank = rankStatsForCityWork(stats, city, cityStats, true, localUniqueCache) // derive GPP score var gpp = 0f if (city.getRuleset().specialists.containsKey(specialist)) { // To solve problems in total remake mods @@ -40,17 +40,19 @@ object Automation { return rank } - private fun rankStatsForCityWork(stats: Stats, city: City, cityStats: Stats, specialist: Boolean = false): Float { + private fun rankStatsForCityWork(stats: Stats, city: City, cityStats: Stats, specialist: Boolean, localUniqueCache: LocalUniqueCache): Float { val cityAIFocus = city.cityAIFocus val yieldStats = stats.clone() if (specialist) { // If you have the Food Bonus, count as 1 extra food production (base is 2food) - for (unique in city.getMatchingUniques(UniqueType.FoodConsumptionBySpecialists)) + for (unique in localUniqueCache.get(UniqueType.FoodConsumptionBySpecialists.name, + city.getMatchingUniques(UniqueType.FoodConsumptionBySpecialists))) if (city.matchesFilter(unique.params[1])) yieldStats.food -= (unique.params[0].toFloat() / 100f) * 2f // base 2 food per Pop // Specialist Happiness Percentage Change 0f-1f - for (unique in city.getMatchingUniques(UniqueType.UnhappinessFromPopulationTypePercentageChange)) + for (unique in localUniqueCache.get(UniqueType.UnhappinessFromPopulationTypePercentageChange.name, + city.getMatchingUniques(UniqueType.UnhappinessFromPopulationTypePercentageChange))) if (city.matchesFilter(unique.params[2]) && unique.params[1] == "Specialists") yieldStats.happiness -= (unique.params[0].toFloat() / 100f) // relative val is negative, make positive if (city.civ.getHappiness() < 0) yieldStats.happiness *= 2 // double weight for unhappy civilization diff --git a/core/src/com/unciv/logic/city/managers/CityReligionManager.kt b/core/src/com/unciv/logic/city/managers/CityReligionManager.kt index 5e7f3e3a7a..aa1cc7012b 100644 --- a/core/src/com/unciv/logic/city/managers/CityReligionManager.kt +++ b/core/src/com/unciv/logic/city/managers/CityReligionManager.kt @@ -245,13 +245,13 @@ class CityReligionManager : IsPartOfGameInfoSerialization { addPressure(religionThisIsTheHolyCityOf!!,5 * pressureFromAdjacentCities, false) } - for (city in city.civ.gameInfo.getCities()) { - if (city == this.city) continue - val majorityReligionOfCity = city.religion.getMajorityReligionName() ?: continue + for (otherCity in city.civ.gameInfo.getCities()) { + if (otherCity == city) continue + val majorityReligionOfCity = otherCity.religion.getMajorityReligionName() ?: continue if (!this.city.civ.gameInfo.religions[majorityReligionOfCity]!!.isMajorReligion()) continue - if (city.getCenterTile().aerialDistanceTo(this.city.getCenterTile()) - > city.religion.getSpreadRange()) continue - addPressure(majorityReligionOfCity, city.religion.pressureAmountToAdjacentCities(this.city), false) + if (otherCity.getCenterTile().aerialDistanceTo(city.getCenterTile()) + > otherCity.religion.getSpreadRange()) continue + addPressure(majorityReligionOfCity, otherCity.religion.pressureAmountToAdjacentCities(city), false) } updateNumberOfFollowers()