mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 22:06:05 -04:00
fixed crash in NextTurnAutomation (#7227)
* fixed crash * redone * reviews * reviews 2
This commit is contained in:
parent
f10bf8bfbe
commit
2224e65707
@ -286,8 +286,10 @@ class ConstructionAutomation(val cityConstructions: CityConstructions){
|
|||||||
if (isAtWar) modifier = 0.5f
|
if (isAtWar) modifier = 0.5f
|
||||||
|
|
||||||
// If this city is the closest city to another civ, that makes it a likely candidate for attack
|
// 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() }
|
if (civInfo.getKnownCivs()
|
||||||
.any { NextTurnAutomation.getClosestCities(civInfo, it).city1 == cityInfo })
|
.map { NextTurnAutomation.getClosestCities(civInfo, it) }
|
||||||
|
.filterNotNull()
|
||||||
|
.any { it.city1 == cityInfo })
|
||||||
modifier *= 1.5f
|
modifier *= 1.5f
|
||||||
|
|
||||||
addChoice(relativeCostEffectiveness, defensiveBuilding.name, modifier)
|
addChoice(relativeCostEffectiveness, defensiveBuilding.name, modifier)
|
||||||
|
@ -698,7 +698,7 @@ object NextTurnAutomation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun motivationToAttack(civInfo: CivilizationInfo, otherCiv: CivilizationInfo): Int {
|
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 baseForce = 30f
|
||||||
|
|
||||||
val ourCombatStrength = civInfo.getStatForRanking(RankingType.Force).toFloat() + baseForce
|
val ourCombatStrength = civInfo.getStatForRanking(RankingType.Force).toFloat() + baseForce
|
||||||
@ -711,7 +711,6 @@ object NextTurnAutomation {
|
|||||||
|
|
||||||
if (theirCombatStrength > ourCombatStrength) return 0
|
if (theirCombatStrength > ourCombatStrength) return 0
|
||||||
|
|
||||||
val closestCities = getClosestCities(civInfo, otherCiv)
|
|
||||||
val ourCity = closestCities.city1
|
val ourCity = closestCities.city1
|
||||||
val theirCity = closestCities.city2
|
val theirCity = closestCities.city2
|
||||||
|
|
||||||
@ -969,12 +968,15 @@ object NextTurnAutomation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getMinDistanceBetweenCities(civ1: CivilizationInfo, civ2: CivilizationInfo): Int {
|
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)
|
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>()
|
val cityDistances = arrayListOf<CityDistance>()
|
||||||
for (civ1city in civ1.cities)
|
for (civ1city in civ1.cities)
|
||||||
for (civ2city in civ2.cities)
|
for (civ2city in civ2.cities)
|
||||||
|
@ -435,6 +435,7 @@ object UnitAutomation {
|
|||||||
|
|
||||||
val closestEnemyCity = enemies
|
val closestEnemyCity = enemies
|
||||||
.map { NextTurnAutomation.getClosestCities(unit.civInfo, it) }
|
.map { NextTurnAutomation.getClosestCities(unit.civInfo, it) }
|
||||||
|
.filterNotNull()
|
||||||
.minByOrNull { it.aerialDistance }?.city2
|
.minByOrNull { it.aerialDistance }?.city2
|
||||||
?: return false // no attackable cities found
|
?: 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
|
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
|
return
|
||||||
val giftedUnit = giftableUnits.random()
|
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)
|
val placedUnit = receivingCiv.placeUnitNearTile(cities.city1.location, giftedUnit.name)
|
||||||
?: return
|
?: return
|
||||||
val locations = LocationAction(placedUnit.getTile().position, cities.city2.location)
|
val locations = LocationAction(placedUnit.getTile().position, cities.city2.location)
|
||||||
@ -87,7 +87,8 @@ class CityStateFunctions(val civInfo: CivilizationInfo) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun giveMilitaryUnitToPatron(receivingCiv: CivilizationInfo) {
|
fun giveMilitaryUnitToPatron(receivingCiv: CivilizationInfo) {
|
||||||
val cities = NextTurnAutomation.getClosestCities(receivingCiv, civInfo)
|
val cities = NextTurnAutomation.getClosestCities(receivingCiv, civInfo) ?: return
|
||||||
|
|
||||||
val city = cities.city1
|
val city = cities.city1
|
||||||
|
|
||||||
fun giftableUniqueUnit(): BaseUnit? {
|
fun giftableUniqueUnit(): BaseUnit? {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user