diff --git a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt index 28f40807af..065665b15d 100644 --- a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt +++ b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt @@ -414,6 +414,14 @@ class MapUnit : IsPartOfGameInfoSerialization { return getMatchingUniques(UniqueType.HealAdjacentUnits).sumOf { it.params[0].toInt() } } + fun getHealAmountForCurrentTile() = when { + isEmbarked() -> 0 // embarked units can't heal + health >= 100 -> 0 // No need to heal if at max health + hasUnique(UniqueType.HealOnlyByPillaging, checkCivInfoUniques = true) -> 0 + else -> rankTileForHealing(getTile()) + } + fun canHealInCurrentTile() = getHealAmountForCurrentTile() > 0 + // Only military land units can truly "garrison" fun canGarrison() = isMilitary() && baseUnit.isLandUnit() diff --git a/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt b/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt index 12ab5443a7..14d5867537 100644 --- a/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt +++ b/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt @@ -66,11 +66,7 @@ class UnitTurnManager(val unit: MapUnit) { private fun healUnit() { - if (unit.isEmbarked()) return // embarked units can't heal - if (unit.health >= 100) return // No need to heal if at max health - if (unit.hasUnique(UniqueType.HealOnlyByPillaging, checkCivInfoUniques = true)) return - - val amountToHealBy = unit.rankTileForHealing(unit.getTile()) + val amountToHealBy = unit.getHealAmountForCurrentTile() if (amountToHealBy == 0) return unit.healBy(amountToHealBy) diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt index b7f035c6ae..84b4db301a 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt @@ -601,7 +601,7 @@ object UnitActions { if (isDamaged && !showingAdditionalActions) { actionList += UnitAction(UnitActionType.SleepUntilHealed, action = { unit.action = UnitActionType.SleepUntilHealed.value } - .takeIf { !unit.isSleepingUntilHealed() } + .takeIf { !unit.isSleepingUntilHealed() && unit.canHealInCurrentTile() } ) } else if (isDamaged || !showingAdditionalActions) { actionList += UnitAction(UnitActionType.Sleep,