mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-24 03:53:12 -04:00
Inquisitors go out of city centers when spaceship parts need to be added in
This commit is contained in:
parent
c1d8402a48
commit
3558917dfc
@ -13,7 +13,7 @@ import com.unciv.ui.screens.worldscreen.unit.actions.UnitActions
|
|||||||
object CivilianUnitAutomation {
|
object CivilianUnitAutomation {
|
||||||
|
|
||||||
fun shouldClearTileForAddInCapitalUnits(unit: MapUnit, tile: Tile) =
|
fun shouldClearTileForAddInCapitalUnits(unit: MapUnit, tile: Tile) =
|
||||||
tile.getCity()?.isCapital() == true
|
tile.isCityCenter() && tile.getCity()!!.isCapital()
|
||||||
&& !unit.hasUnique(UniqueType.AddInCapital)
|
&& !unit.hasUnique(UniqueType.AddInCapital)
|
||||||
&& unit.civ.units.getCivUnits().any { unit.hasUnique(UniqueType.AddInCapital) }
|
&& unit.civ.units.getCivUnits().any { unit.hasUnique(UniqueType.AddInCapital) }
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package com.unciv.logic.automation.unit
|
|||||||
import com.unciv.Constants
|
import com.unciv.Constants
|
||||||
import com.unciv.logic.city.City
|
import com.unciv.logic.city.City
|
||||||
import com.unciv.logic.map.mapunit.MapUnit
|
import com.unciv.logic.map.mapunit.MapUnit
|
||||||
import com.unciv.logic.map.tile.Tile
|
|
||||||
import com.unciv.models.UnitActionType
|
import com.unciv.models.UnitActionType
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
import com.unciv.models.ruleset.unique.UniqueType
|
||||||
import com.unciv.ui.screens.worldscreen.unit.actions.UnitActions
|
import com.unciv.ui.screens.worldscreen.unit.actions.UnitActions
|
||||||
@ -60,41 +59,39 @@ object ReligiousUnitAutomation {
|
|||||||
// cities with most populations will be prioritized by the AI
|
// cities with most populations will be prioritized by the AI
|
||||||
val cityToProtect = citiesToProtect.maxByOrNull { it.population.population }
|
val cityToProtect = citiesToProtect.maxByOrNull { it.population.population }
|
||||||
|
|
||||||
var destination: Tile?
|
val destinationCity: City? = when {
|
||||||
|
|
||||||
destination = when {
|
|
||||||
cityToConvert != null
|
cityToConvert != null
|
||||||
&& (cityToConvert == holyCity
|
&& (cityToConvert == holyCity
|
||||||
|| pressureDeficit > Constants.aiPreferInquisitorOverMissionaryPressureDifference
|
|| pressureDeficit > Constants.aiPreferInquisitorOverMissionaryPressureDifference
|
||||||
|| cityToConvert.religion.isBlockedHolyCity && cityToConvert.religion.religionThisIsTheHolyCityOf == civReligion?.name
|
|| cityToConvert.religion.isBlockedHolyCity && cityToConvert.religion.religionThisIsTheHolyCityOf == civReligion?.name
|
||||||
) && unit.hasUnique(UniqueType.CanRemoveHeresy) -> {
|
) && unit.hasUnique(UniqueType.CanRemoveHeresy) -> {
|
||||||
cityToConvert.getCenterTile()
|
cityToConvert
|
||||||
}
|
}
|
||||||
cityToProtect != null && unit.hasUnique(UniqueType.PreventSpreadingReligion) -> {
|
cityToProtect != null && unit.hasUnique(UniqueType.PreventSpreadingReligion) -> {
|
||||||
if (holyCity != null && !holyCity.religion.isProtectedByInquisitor())
|
if (holyCity != null && !holyCity.religion.isProtectedByInquisitor())
|
||||||
holyCity.getCenterTile()
|
holyCity
|
||||||
else cityToProtect.getCenterTile()
|
else cityToProtect
|
||||||
}
|
}
|
||||||
cityToConvert != null -> cityToConvert.getCenterTile()
|
cityToConvert != null -> cityToConvert
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destination == null) return
|
if (destinationCity == null) return
|
||||||
|
var destinationTile = destinationCity.getCenterTile()
|
||||||
|
|
||||||
if (!unit.movement.canReach(destination)) {
|
if (!unit.movement.canReach(destinationTile)
|
||||||
destination = destination.neighbors
|
// Wait for the addInCapital units to go to the city!
|
||||||
|
|| CivilianUnitAutomation.shouldClearTileForAddInCapitalUnits(unit, destinationTile)) {
|
||||||
|
destinationTile = destinationTile.neighbors
|
||||||
.filter { unit.movement.canMoveTo(it) || it == unit.getTile() }
|
.filter { unit.movement.canMoveTo(it) || it == unit.getTile() }
|
||||||
.sortedBy { it.aerialDistanceTo(unit.currentTile) }
|
.sortedBy { it.aerialDistanceTo(unit.currentTile) }
|
||||||
.firstOrNull { unit.movement.canReach(it) }
|
.firstOrNull { unit.movement.canReach(it) }
|
||||||
?: return
|
?: return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CivilianUnitAutomation.shouldClearTileForAddInCapitalUnits(unit, destination))
|
unit.movement.headTowards(destinationTile)
|
||||||
return // Wait for the addInCapital units to go to the city!
|
|
||||||
|
|
||||||
unit.movement.headTowards(destination)
|
if (cityToConvert != null && unit.getTile().getCity() == destinationCity) {
|
||||||
|
|
||||||
if (cityToConvert != null && unit.getTile().getCity() == destination.getCity()) {
|
|
||||||
UnitActions.invokeUnitAction(unit, UnitActionType.RemoveHeresy)
|
UnitActions.invokeUnitAction(unit, UnitActionType.RemoveHeresy)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user