AI: Finer-tuned Food ranking vs other stats for cities

This commit is contained in:
Yair Morgenstern
2023-08-10 16:05:38 +03:00
parent 27a5bd0cc5
commit e406533ef0

View File

@ -40,6 +40,8 @@ object Automation {
return rank return rank
} }
val zeroFoodFocuses = setOf(CityFocus.CultureFocus, CityFocus.FaithFocus, CityFocus.GoldFocus,
CityFocus.HappinessFocus, CityFocus.ProductionFocus, CityFocus.ScienceFocus)
private fun rankStatsForCityWork(stats: Stats, city: City, cityStats: Stats, specialist: Boolean, localUniqueCache: LocalUniqueCache): Float { private fun rankStatsForCityWork(stats: Stats, city: City, cityStats: Stats, specialist: Boolean, localUniqueCache: LocalUniqueCache): Float {
val cityAIFocus = city.cityAIFocus val cityAIFocus = city.cityAIFocus
val yieldStats = stats.clone() val yieldStats = stats.clone()
@ -62,23 +64,20 @@ object Automation {
if (surplusFood > 0 && city.avoidGrowth) { if (surplusFood > 0 && city.avoidGrowth) {
yieldStats.food = 0f // don't need more food! yieldStats.food = 0f // don't need more food!
} else { } else if (cityAIFocus in zeroFoodFocuses) {
if (cityAIFocus != CityFocus.NoFocus && cityAIFocus != CityFocus.FoodFocus && cityAIFocus != CityFocus.ProductionGrowthFocus && cityAIFocus != CityFocus.GoldGrowthFocus) { // Focus on non-food/growth
// Focus on non-food/growth if (surplusFood < 0)
if (surplusFood < 0) yieldStats.food *= 8 // Starving, need Food, get to 0
yieldStats.food *= 8 // Starving, need Food, get to 0 else
else yieldStats.food /= 2
yieldStats.food /= 2 } else if (!city.avoidGrowth) {
} else if (!city.avoidGrowth) { // NoFocus or Food/Growth Focus. Target +2 Food Surplus
// NoFocus or Food/Growth Focus. Target +2 Food Surplus if (surplusFood < 2)
if (surplusFood < 2) yieldStats.food *= 8
yieldStats.food *= 8 else if (city.population.population < 5)
else if (cityAIFocus != CityFocus.FoodFocus) yieldStats.food *= 3
yieldStats.food /= 2 else if (cityAIFocus == CityFocus.FoodFocus)
if (city.population.population < 5 && cityAIFocus != CityFocus.FoodFocus) yieldStats.food *= 2
// NoFocus or GoldGrow or ProdGrow, not Avoid Growth, pop < 5. FoodFocus already does this up
yieldStats.food *= 3
}
} }
if (city.population.population < 5) { if (city.population.population < 5) {