From 96269c5c293e95cb10f66e7e19639525856ff430 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Fri, 13 Nov 2020 00:04:23 +0200 Subject: [PATCH] AI no longer nukes single units Nuking is considered a declaration of war from the attacker, not the defender --- .../logic/automation/SpecificUnitAutomation.kt | 13 +++++++++++-- core/src/com/unciv/logic/battle/Battle.kt | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt b/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt index 46fe38da1d..fa0bad7817 100644 --- a/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt @@ -1,5 +1,6 @@ package com.unciv.logic.automation +import com.unciv.logic.battle.Battle import com.unciv.logic.battle.MapUnitCombatant import com.unciv.logic.city.CityInfo import com.unciv.logic.civilization.CivilizationInfo @@ -295,16 +296,24 @@ object SpecificUnitAutomation { // This really needs to be changed, to have better targetting for missiles fun automateMissile(unit: MapUnit) { - if (BattleHelper.tryAttackNearbyEnemy(unit)) return val tilesInRange = unit.currentTile.getTilesInDistance(unit.getRange()*2) + for(tile in tilesInRange) { + // For now AI will only use nukes against cities because in all honesty that's the best use for them. + if (tile.isCityCenter() && tile.getOwner()!!.isAtWarWith(unit.civInfo)) { + Battle.nuke(MapUnitCombatant(unit), tile) + return + } + } + + val immediatelyReachableCities = tilesInRange .filter { unit.movement.canMoveTo(it) } for (city in immediatelyReachableCities) { if (city.getTilesInDistance(unit.getRange()) - .any { BattleHelper.containsAttackableEnemy(it, MapUnitCombatant(unit)) }) { + .any { it.isCityCenter() && it.getOwner()!!.isAtWarWith(unit.civInfo) }) { unit.movement.moveToTile(city) return } diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index 8394d2fa14..a94dd43c68 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -387,8 +387,8 @@ object Battle { fun declareWar(civSuffered: CivilizationInfo) { if (civSuffered != attackingCiv - && civSuffered.knows(attackingCiv) - && civSuffered.getDiplomacyManager(attackingCiv).canDeclareWar()) { + && attackingCiv.knows(attackingCiv) + && attackingCiv.getDiplomacyManager(civSuffered).canDeclareWar()) { civSuffered.getDiplomacyManager(attackingCiv).declareWar() } }