From ad54fb3c56126606977aa3b7e25c39cf760c5d71 Mon Sep 17 00:00:00 2001 From: Duan Tao Date: Mon, 6 May 2019 12:09:39 +0800 Subject: [PATCH] Invading city-state border will damage relationship. --- .../logic/automation/NextTurnAutomation.kt | 35 +++++++++++++++++-- .../unciv/logic/civilization/PopupAlert.kt | 3 +- .../diplomacy/DiplomacyManager.kt | 3 -- .../com/unciv/ui/worldscreen/AlertPopup.kt | 9 +++++ 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/core/src/com/unciv/logic/automation/NextTurnAutomation.kt b/core/src/com/unciv/logic/automation/NextTurnAutomation.kt index 6edd092783..2baee4a7ed 100644 --- a/core/src/com/unciv/logic/automation/NextTurnAutomation.kt +++ b/core/src/com/unciv/logic/automation/NextTurnAutomation.kt @@ -1,14 +1,12 @@ package com.unciv.logic.automation -import com.unciv.logic.civilization.CivilizationInfo -import com.unciv.logic.civilization.PlayerType -import com.unciv.logic.civilization.TradeRequest import com.unciv.logic.civilization.diplomacy.DiplomacyFlags import com.unciv.logic.civilization.diplomacy.DiplomaticStatus import com.unciv.logic.civilization.diplomacy.RelationshipLevel import com.unciv.logic.map.MapUnit import com.unciv.logic.trade.* import com.unciv.Constants +import com.unciv.logic.civilization.* import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tech.Technology import com.unciv.models.gamebasics.tr @@ -24,6 +22,7 @@ class NextTurnAutomation{ chooseTechToResearch(civInfo) adoptPolicy(civInfo) + updateDiplomaticRelationship(civInfo) declareWar(civInfo) automateCityBombardment(civInfo) buyBuildingOrUnit(civInfo) @@ -243,6 +242,36 @@ class NextTurnAutomation{ } } + private fun updateDiplomaticRelationship(civInfo: CivilizationInfo) { + // Check if city-state invaded by other civs + if (civInfo.isCityState()) { + var militaryUnitsInBorder = HashMap() + for (city in civInfo.cities) { + for (tile in city.getTiles()) { + val troop = tile.militaryUnit + if (troop != null && troop.owner != civInfo.civName) { + if (militaryUnitsInBorder.containsKey(troop.owner)) { + militaryUnitsInBorder[troop.owner] = militaryUnitsInBorder[troop.owner]!! + 1 + } else { + militaryUnitsInBorder[troop.owner] = 1 + } + } + } + } + + for (otherCivName in militaryUnitsInBorder.filter { it.value > 0 }.keys) { + val otherCiv = civInfo.gameInfo.getCivilization(otherCivName) + if (!otherCiv.isBarbarianCivilization()) { + val diplo = civInfo.getDiplomacyManager(otherCiv) + if (diplo.diplomaticStatus != DiplomaticStatus.War) { + diplo.influence -= 10f + otherCiv.popupAlerts.add(PopupAlert(AlertType.BorderConflict,civInfo.civName)) + } + } + } + } + } + private fun declareWar(civInfo: CivilizationInfo) { if (civInfo.isCityState()) return if (civInfo.cities.isNotEmpty() && civInfo.diplomacy.isNotEmpty()) { diff --git a/core/src/com/unciv/logic/civilization/PopupAlert.kt b/core/src/com/unciv/logic/civilization/PopupAlert.kt index 377547cf3c..c4dafe23f9 100644 --- a/core/src/com/unciv/logic/civilization/PopupAlert.kt +++ b/core/src/com/unciv/logic/civilization/PopupAlert.kt @@ -4,7 +4,8 @@ enum class AlertType{ WarDeclaration, Defeated, FirstContact, - CityConquered + CityConquered, + BorderConflict } class PopupAlert { diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt index e50cfd732b..e67efd68b2 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt @@ -240,9 +240,6 @@ class DiplomacyManager() { thirdCiv.getDiplomacyManager(civInfo).addModifier(DiplomaticModifiers.WarMongerer,5f) else thirdCiv.getDiplomacyManager(civInfo).addModifier(DiplomaticModifiers.WarMongerer,-5f) } - - //Damage diplomatic relationship - otherCivDiplomacy.influence = -50f } fun makePeace(){ diff --git a/core/src/com/unciv/ui/worldscreen/AlertPopup.kt b/core/src/com/unciv/ui/worldscreen/AlertPopup.kt index fdb0a89833..e236a0865e 100644 --- a/core/src/com/unciv/ui/worldscreen/AlertPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/AlertPopup.kt @@ -63,6 +63,15 @@ class AlertPopup(val worldScreen: WorldScreen, val popupAlert: PopupAlert): Popu close() }) } + AlertType.BorderConflict -> { + val translatedNation = worldScreen.gameInfo.getCivilization(popupAlert.value).getTranslatedNation() + addLeaderName(translatedNation) + addGoodSizedLabel("Remove your troops in our border immediately!").row() + val responseTable = Table() + responseTable.add(getCloseButton("Sorry.")) + responseTable.add(getCloseButton("Never!")) + add(responseTable) + } } open() isOpen = true