mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-28 21:58:54 +07:00
fixed crash in NextTurnAutomation (#7227)
* fixed crash * redone * reviews * reviews 2
This commit is contained in:
@ -286,8 +286,10 @@ class ConstructionAutomation(val cityConstructions: CityConstructions){
|
||||
if (isAtWar) modifier = 0.5f
|
||||
|
||||
// If this city is the closest city to another civ, that makes it a likely candidate for attack
|
||||
if (civInfo.getKnownCivs().filter { it.cities.isNotEmpty() }
|
||||
.any { NextTurnAutomation.getClosestCities(civInfo, it).city1 == cityInfo })
|
||||
if (civInfo.getKnownCivs()
|
||||
.map { NextTurnAutomation.getClosestCities(civInfo, it) }
|
||||
.filterNotNull()
|
||||
.any { it.city1 == cityInfo })
|
||||
modifier *= 1.5f
|
||||
|
||||
addChoice(relativeCostEffectiveness, defensiveBuilding.name, modifier)
|
||||
|
@ -698,7 +698,7 @@ object NextTurnAutomation {
|
||||
}
|
||||
|
||||
private fun motivationToAttack(civInfo: CivilizationInfo, otherCiv: CivilizationInfo): Int {
|
||||
if(civInfo.cities.isEmpty() || otherCiv.cities.isEmpty()) return 0
|
||||
val closestCities = getClosestCities(civInfo, otherCiv) ?: return 0
|
||||
val baseForce = 30f
|
||||
|
||||
val ourCombatStrength = civInfo.getStatForRanking(RankingType.Force).toFloat() + baseForce
|
||||
@ -711,7 +711,6 @@ object NextTurnAutomation {
|
||||
|
||||
if (theirCombatStrength > ourCombatStrength) return 0
|
||||
|
||||
val closestCities = getClosestCities(civInfo, otherCiv)
|
||||
val ourCity = closestCities.city1
|
||||
val theirCity = closestCities.city2
|
||||
|
||||
@ -969,12 +968,15 @@ object NextTurnAutomation {
|
||||
}
|
||||
|
||||
fun getMinDistanceBetweenCities(civ1: CivilizationInfo, civ2: CivilizationInfo): Int {
|
||||
return getClosestCities(civ1, civ2).aerialDistance
|
||||
return getClosestCities(civ1, civ2)?.aerialDistance ?: Int.MAX_VALUE
|
||||
}
|
||||
|
||||
data class CityDistance(val city1: CityInfo, val city2: CityInfo, val aerialDistance: Int)
|
||||
|
||||
fun getClosestCities(civ1: CivilizationInfo, civ2: CivilizationInfo): CityDistance {
|
||||
fun getClosestCities(civ1: CivilizationInfo, civ2: CivilizationInfo): CityDistance? {
|
||||
if (civ1.cities.isEmpty() || civ2.cities.isEmpty())
|
||||
return null
|
||||
|
||||
val cityDistances = arrayListOf<CityDistance>()
|
||||
for (civ1city in civ1.cities)
|
||||
for (civ2city in civ2.cities)
|
||||
|
@ -435,6 +435,7 @@ object UnitAutomation {
|
||||
|
||||
val closestEnemyCity = enemies
|
||||
.map { NextTurnAutomation.getClosestCities(unit.civInfo, it) }
|
||||
.filterNotNull()
|
||||
.minByOrNull { it.aerialDistance }?.city2
|
||||
?: return false // no attackable cities found
|
||||
|
||||
|
@ -79,7 +79,7 @@ class CityStateFunctions(val civInfo: CivilizationInfo) {
|
||||
if (giftableUnits.isEmpty()) // For badly defined mods that don't have great people but do have the policy that makes city states grant them
|
||||
return
|
||||
val giftedUnit = giftableUnits.random()
|
||||
val cities = NextTurnAutomation.getClosestCities(receivingCiv, civInfo)
|
||||
val cities = NextTurnAutomation.getClosestCities(receivingCiv, civInfo) ?: return
|
||||
val placedUnit = receivingCiv.placeUnitNearTile(cities.city1.location, giftedUnit.name)
|
||||
?: return
|
||||
val locations = LocationAction(placedUnit.getTile().position, cities.city2.location)
|
||||
@ -87,7 +87,8 @@ class CityStateFunctions(val civInfo: CivilizationInfo) {
|
||||
}
|
||||
|
||||
fun giveMilitaryUnitToPatron(receivingCiv: CivilizationInfo) {
|
||||
val cities = NextTurnAutomation.getClosestCities(receivingCiv, civInfo)
|
||||
val cities = NextTurnAutomation.getClosestCities(receivingCiv, civInfo) ?: return
|
||||
|
||||
val city = cities.city1
|
||||
|
||||
fun giftableUniqueUnit(): BaseUnit? {
|
||||
|
Reference in New Issue
Block a user