mirror of
https://github.com/yairm210/Unciv.git
synced 2025-10-01 16:01:45 -04:00
Split AI choice for construction of defensive and offensive buildings
This commit is contained in:
parent
4d5f3a51e3
commit
b0b47d0a3a
@ -159,15 +159,30 @@ class Automation {
|
|||||||
relativeCostEffectiveness.add(choice)
|
relativeCostEffectiveness.add(choice)
|
||||||
}
|
}
|
||||||
|
|
||||||
//War buildings
|
//Defensive building
|
||||||
val wartimeBuilding = buildableNotWonders.filter { it.xpForNewUnits>0 || it.cityStrength>0 }
|
val defensiveBuilding = buildableNotWonders.filter { it.cityStrength>0 }
|
||||||
.minBy { it.cost }
|
.minBy { it.cost }
|
||||||
if (wartimeBuilding!=null && (preferredVictoryType!=VictoryType.Cultural || isAtWar)) {
|
if(defensiveBuilding!=null && (isAtWar || preferredVictoryType!=VictoryType.Cultural)){
|
||||||
|
var modifier = 0.2f
|
||||||
|
if(isAtWar) modifier = 0.5f
|
||||||
|
|
||||||
|
// If this city is the closest city to another civ, that makes it a likely candidate for attack
|
||||||
|
if(cityInfo.civInfo.getKnownCivs()
|
||||||
|
.any{ NextTurnAutomation().getClosestCities(cityInfo.civInfo,it).city1 == cityInfo })
|
||||||
|
modifier *= 1.5f
|
||||||
|
|
||||||
|
relativeCostEffectiveness.add(ConstructionChoice(defensiveBuilding.name, modifier))
|
||||||
|
}
|
||||||
|
|
||||||
|
val unitTrainingBuilding = buildableNotWonders.filter { it.xpForNewUnits>0}
|
||||||
|
.minBy { it.cost }
|
||||||
|
//cityInfo.civInfo.cities.sortedByDescending { } // todo don't build if this is a weak production city
|
||||||
|
if (unitTrainingBuilding!=null && (preferredVictoryType!=VictoryType.Cultural || isAtWar)) {
|
||||||
var modifier = 0.5f
|
var modifier = 0.5f
|
||||||
if(isAtWar) modifier = 1f
|
if(isAtWar) modifier = 1f
|
||||||
if(preferredVictoryType==VictoryType.Domination)
|
if(preferredVictoryType==VictoryType.Domination)
|
||||||
modifier *= 1.3f
|
modifier *= 1.3f
|
||||||
relativeCostEffectiveness.add(ConstructionChoice(wartimeBuilding.name,modifier))
|
relativeCostEffectiveness.add(ConstructionChoice(unitTrainingBuilding.name,modifier))
|
||||||
}
|
}
|
||||||
|
|
||||||
//Wonders
|
//Wonders
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.unciv.logic.automation
|
package com.unciv.logic.automation
|
||||||
|
|
||||||
import com.unciv.Constants
|
import com.unciv.Constants
|
||||||
|
import com.unciv.logic.city.CityInfo
|
||||||
import com.unciv.logic.civilization.*
|
import com.unciv.logic.civilization.*
|
||||||
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
|
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
|
||||||
import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers
|
import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers
|
||||||
@ -262,7 +263,18 @@ class NextTurnAutomation{
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getMinDistanceBetweenCities(civ1: CivilizationInfo, civ2: CivilizationInfo): Int {
|
fun getMinDistanceBetweenCities(civ1: CivilizationInfo, civ2: CivilizationInfo): Int {
|
||||||
return civ1.cities.map { city -> civ2.cities.map { it.getCenterTile().arialDistanceTo(city.getCenterTile()) }.min()!! }.min()!!
|
return getClosestCities(civ1,civ2).arialDistance
|
||||||
|
}
|
||||||
|
|
||||||
|
data class CityDistance(val city1:CityInfo, val city2:CityInfo, val arialDistance: Int)
|
||||||
|
fun getClosestCities(civ1: CivilizationInfo, civ2: CivilizationInfo): CityDistance {
|
||||||
|
val cityDistances = arrayListOf<CityDistance>()
|
||||||
|
for(civ1city in civ1.cities)
|
||||||
|
for(civ2city in civ2.cities)
|
||||||
|
cityDistances.add(CityDistance(civ1city,civ2city,
|
||||||
|
civ1city.getCenterTile().arialDistanceTo(civ2city.getCenterTile())))
|
||||||
|
|
||||||
|
return cityDistances.minBy { it.arialDistance }!!
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun offerPeaceTreaty(civInfo: CivilizationInfo) {
|
private fun offerPeaceTreaty(civInfo: CivilizationInfo) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user