From 2494b1dcbc74184ad2910dba40f2ed7b6e08574c Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 25 Feb 2024 21:35:08 +0200 Subject: [PATCH] Move takeDamage function from MapUnitCombatant to MApUnit where it belongs --- core/src/com/unciv/logic/battle/MapUnitCombatant.kt | 7 +------ core/src/com/unciv/logic/map/mapunit/MapUnit.kt | 11 +++++++++-- .../com/unciv/logic/map/mapunit/UnitTurnManager.kt | 5 ++--- .../models/ruleset/unique/UniqueTriggerActivation.kt | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/core/src/com/unciv/logic/battle/MapUnitCombatant.kt b/core/src/com/unciv/logic/battle/MapUnitCombatant.kt index 6daa487cc1..e5a9f979a5 100644 --- a/core/src/com/unciv/logic/battle/MapUnitCombatant.kt +++ b/core/src/com/unciv/logic/battle/MapUnitCombatant.kt @@ -23,12 +23,7 @@ class MapUnitCombatant(val unit: MapUnit) : ICombatant { if (it == null) UncivSound.Click else UncivSound(it) } - override fun takeDamage(damage: Int) { - unit.health -= damage - if (unit.health > 100) unit.health = 100 // For cheating modders, e.g. negative tile damage - if (unit.health < 0) unit.health = 0 - if (isDefeated()) unit.destroy() - } + override fun takeDamage(damage: Int) = unit.takeDamage(damage) override fun getAttackingStrength(): Int { return if (isRanged()) unit.baseUnit().rangedStrength diff --git a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt index 990a8280a5..d7a0ba053d 100644 --- a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt +++ b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt @@ -575,13 +575,13 @@ class MapUnit : IsPartOfGameInfoSerialization { power /= 100 return power } - + fun getOtherEscortUnit(): MapUnit? { if (isCivilian()) return getTile().militaryUnit if (isMilitary()) return getTile().civilianUnit return null } - + fun isEscorting(): Boolean { if (escorting) { if (getOtherEscortUnit() != null) return true @@ -752,6 +752,13 @@ class MapUnit : IsPartOfGameInfoSerialization { if (health > 100) health = 100 } + fun takeDamage(amount: Int) { + health -= amount + if (health > 100) health = 100 // For cheating modders, e.g. negative tile damage + if (health < 0) health = 0 + if (health == 0) destroy() + } + fun destroy(destroyTransportedUnit: Boolean = true) { stopEscorting() val currentPosition = Vector2(getTile().position) diff --git a/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt b/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt index 07320c3686..b6b72620d1 100644 --- a/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt +++ b/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt @@ -1,7 +1,6 @@ package com.unciv.logic.map.mapunit import com.unciv.UncivGame -import com.unciv.logic.battle.MapUnitCombatant import com.unciv.logic.civilization.LocationAction import com.unciv.logic.civilization.MapUnitAction import com.unciv.logic.civilization.NotificationCategory @@ -85,7 +84,7 @@ class UnitTurnManager(val unit: MapUnit) { }.maxByOrNull { it.second } ?: return if (damage == 0) return - MapUnitCombatant(unit).takeDamage(damage) + unit.takeDamage(damage) val improvementName = citadelTile.improvement!! // guarded by `getUnpillagedImprovement() != null` above val improvementIcon = "ImprovementIcons/$improvementName" val locations = LocationAction(citadelTile.position, unit.currentTile.position) @@ -116,7 +115,7 @@ class UnitTurnManager(val unit: MapUnit) { val tileDamage = unit.getDamageFromTerrain() if (tileDamage == 0) return - MapUnitCombatant(unit).takeDamage(tileDamage) + unit.takeDamage(tileDamage) if (unit.isDestroyed) { unit.civ.addNotification( diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt index 7207235c05..9fd9331c0f 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt @@ -869,7 +869,7 @@ object UniqueTriggerActivation { UniqueType.OneTimeUnitDamage -> { if (unit == null) return null return { - MapUnitCombatant(unit).takeDamage(unique.params[0].toInt()) + unit.takeDamage(unique.params[0].toInt()) if (notification != null) unit.civ.addNotification(notification, unit.getTile().position, NotificationCategory.Units) // Do we have a heal icon? true