diff --git a/core/src/com/unciv/logic/battle/GreatGeneralImplementation.kt b/core/src/com/unciv/logic/battle/GreatGeneralImplementation.kt index c966015c93..751d58b30d 100644 --- a/core/src/com/unciv/logic/battle/GreatGeneralImplementation.kt +++ b/core/src/com/unciv/logic/battle/GreatGeneralImplementation.kt @@ -1,5 +1,6 @@ package com.unciv.logic.battle +import com.unciv.logic.automation.unit.BattleHelper import com.unciv.logic.automation.unit.SpecificUnitAutomation import com.unciv.logic.map.mapunit.MapUnit import com.unciv.logic.map.tile.Tile @@ -93,7 +94,8 @@ object GreatGeneralImplementation { .maxByOrNull { unitTile -> unitTile.getTilesInDistance(unitBonusRadius).sumOf { auraTile -> val militaryUnit = auraTile.militaryUnit - if (militaryUnit == null || militaryUnit.civ != general.civ) 0 + if (militaryUnit == null || militaryUnit.civ != general.civ || militaryUnit.isEmbarked()) 0 + else if (BattleHelper.getAttackableEnemies(militaryUnit, militaryUnit.movement.getDistanceToTiles()).isEmpty()) 0 else generalBonusData.firstOrNull { // "Military" as commented above only a small optimization auraTile.aerialDistanceTo(unitTile) <= it.radius diff --git a/core/src/com/unciv/logic/map/mapunit/UnitMovementAlgorithms.kt b/core/src/com/unciv/logic/map/mapunit/UnitMovementAlgorithms.kt index 5fd84f2fcc..7ee47422f1 100644 --- a/core/src/com/unciv/logic/map/mapunit/UnitMovementAlgorithms.kt +++ b/core/src/com/unciv/logic/map/mapunit/UnitMovementAlgorithms.kt @@ -145,7 +145,7 @@ class UnitMovementAlgorithms(val unit: MapUnit) { return true } - class ParentTileAndTotalDistance(val parentTile: Tile, val totalDistance: Float) + class ParentTileAndTotalDistance(val tile:Tile, val parentTile: Tile, val totalDistance: Float) fun isUnknownTileWeShouldAssumeToBePassable(tile: Tile) = !unit.civ.hasExplored(tile) @@ -160,7 +160,7 @@ class UnitMovementAlgorithms(val unit: MapUnit) { val currentUnitTile = unit.currentTile // This is for performance, because this is called all the time val unitTile = if (origin == currentUnitTile.position) currentUnitTile else currentUnitTile.tileMap[origin] - distanceToTiles[unitTile] = ParentTileAndTotalDistance(unitTile, 0f) + distanceToTiles[unitTile] = ParentTileAndTotalDistance(unitTile, unitTile, 0f) var tilesToCheck = listOf(unitTile) while (tilesToCheck.isNotEmpty()) { @@ -189,7 +189,7 @@ class UnitMovementAlgorithms(val unit: MapUnit) { // In Civ V, you can always travel between adjacent tiles, even if you don't technically // have enough movement points - it simply depletes what you have - distanceToTiles[neighbor] = ParentTileAndTotalDistance(tileToCheck, totalDistanceToTile) + distanceToTiles[neighbor] = ParentTileAndTotalDistance(neighbor, tileToCheck, totalDistanceToTile) } }