diff --git a/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt b/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt index b7fdd32b2e..495a4dd19d 100644 --- a/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt @@ -209,6 +209,9 @@ object UnitAutomation { return AirUnitAutomation.automateBomber(unit) } + // Accompany settlers + if (tryAccompanySettlerOrGreatPerson(unit)) return + if (tryGoToRuinAndEncampment(unit) && unit.currentMovement == 0f) return if (tryUpgradeUnit(unit)) return @@ -218,9 +221,6 @@ object UnitAutomation { // If there are no enemies nearby and we can heal here, wait until we are at full health if (unit.health < 100 && canUnitHealInTurnsOnCurrentTile(unit,2, 4)) return - // Accompany settlers - if (tryAccompanySettlerOrGreatPerson(unit)) return - if (tryHeadTowardsOurSiegedCity(unit)) return // if a embarked melee unit can land and attack next turn, do not attack from water. @@ -494,13 +494,14 @@ object UnitAutomation { } private fun tryAccompanySettlerOrGreatPerson(unit: MapUnit): Boolean { + val distanceToTiles = unit.movement.getDistanceToTiles() val settlerOrGreatPersonToAccompany = unit.civ.units.getCivUnits() .firstOrNull { val tile = it.currentTile it.isCivilian() && (it.hasUnique(UniqueType.FoundCity) || unit.isGreatPerson()) - && tile.militaryUnit == null && unit.movement.canMoveTo(tile) - && unit.movement.getDistanceToTiles().containsKey(tile) + && (tile == unit.currentTile || tile.militaryUnit == null && unit.movement.canMoveTo(tile)) + && distanceToTiles.containsKey(tile) } ?: return false unit.movement.headTowards(settlerOrGreatPersonToAccompany.currentTile) return true