mirror of
https://github.com/yairm210/Unciv.git
synced 2025-03-15 04:14:44 +07:00
#9098 - rankStatsForCityWork also uses local unique cache
This commit is contained in:
parent
d6f5e0badb
commit
67482f0ebe
@ -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
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user