From 6a652bbe9dac3d47ed03edd3db263c761882449f Mon Sep 17 00:00:00 2001 From: metablaster <44481081+metablaster@users.noreply.github.com> Date: Fri, 18 Jul 2025 11:26:06 +0200 Subject: [PATCH] Fix AI civilian unit not escaping enemy (#13637) * Initial improvement of AI road planning * fix tile caching of road plans * fix worker not connecting city due to lower priority * remove unnecessary code * cleanup RoadBetweenCitiesAutomation.kt and enable harbor connection loging * fix invalid logic in road construction * apply reviewed changes * sort plan list by closer cities * apply reviewed changes and removed loging * Fix AI civilian unit not escaping enemy --- .../unciv/logic/automation/unit/CivilianUnitAutomation.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/com/unciv/logic/automation/unit/CivilianUnitAutomation.kt b/core/src/com/unciv/logic/automation/unit/CivilianUnitAutomation.kt index debeba0678..f0bb962e44 100644 --- a/core/src/com/unciv/logic/automation/unit/CivilianUnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/unit/CivilianUnitAutomation.kt @@ -210,10 +210,11 @@ object CivilianUnitAutomation { unit.movement.moveToTile(defensiveUnit) return } + val distanceToClosestEnemyUnit = unit.civ.threatManager.getDistanceToClosestEnemyUnit(unit.getTile(), 4, false) + val dangerousTiles = unit.civ.threatManager.getDangerousTiles(unit, distanceToClosestEnemyUnit) val tileFurthestFromEnemy = reachableTiles.keys .filter { unit.movement.canMoveTo(it) && unit.getDamageFromTerrain(it) < unit.health } - .maxByOrNull { unit.civ.threatManager.getDistanceToClosestEnemyUnit(unit.getTile(), 4, false) } - ?: return // can't move anywhere! + .maxByOrNull { if (it in dangerousTiles) 0 else distanceToClosestEnemyUnit } ?: return // can't move anywhere! unit.movement.moveToTile(tileFurthestFromEnemy) }