diff --git a/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt b/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt index 7a1bc27352..2e7c3fb848 100644 --- a/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt +++ b/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt @@ -107,32 +107,18 @@ object NextTurnAutomation { } private fun respondToPopupAlerts(civInfo: Civilization) { for (popupAlert in civInfo.popupAlerts.toList()) { // toList because this can trigger other things that give alerts, like Golden Age - if (popupAlert.type == AlertType.DemandToStopSettlingCitiesNear) { // we're called upon to make a decision - val demandingCiv = civInfo.gameInfo.getCivilization(popupAlert.value) - val diploManager = civInfo.getDiplomacyManager(demandingCiv)!! - if (Automation.threatAssessment(civInfo, demandingCiv) >= ThreatLevel.High) - diploManager.agreeNotToSettleNear() - else diploManager.refuseDemandNotToSettleNear() - } - - if (popupAlert.type == AlertType.DemandToStopSpreadingReligion) { - val demandingCiv = civInfo.gameInfo.getCivilization(popupAlert.value) - val diploManager = civInfo.getDiplomacyManager(demandingCiv)!! - if (Automation.threatAssessment(civInfo, demandingCiv) >= ThreatLevel.High - || diploManager.isRelationshipLevelGT(RelationshipLevel.Ally)) - diploManager.agreeNotToSpreadReligionTo() - else diploManager.refuseNotToSpreadReligionTo() + + for (demand in Demand.entries){ + if (popupAlert.type == demand.demandAlert) { + val demandingCiv = civInfo.gameInfo.getCivilization(popupAlert.value) + val diploManager = civInfo.getDiplomacyManager(demandingCiv)!! + if (Automation.threatAssessment(civInfo, demandingCiv) >= ThreatLevel.High + || diploManager.isRelationshipLevelGT(RelationshipLevel.Ally)) + diploManager.agreeToDemand(demand) + else diploManager.refuseDemand(demand) + } } - if (popupAlert.type == AlertType.DemandToStopSpyingOnUs) { - val demandingCiv = civInfo.gameInfo.getCivilization(popupAlert.value) - val diploManager = civInfo.getDiplomacyManager(demandingCiv)!! - if (Automation.threatAssessment(civInfo, demandingCiv) >= ThreatLevel.High - || diploManager.isRelationshipLevelGT(RelationshipLevel.Ally)) - diploManager.agreeNotToSpreadSpiesTo() - else diploManager.refuseNotToSpreadSpiesTo() - } - if (popupAlert.type == AlertType.DeclarationOfFriendship) { val requestingCiv = civInfo.gameInfo.getCivilization(popupAlert.value) val diploManager = civInfo.getDiplomacyManager(requestingCiv)!! diff --git a/core/src/com/unciv/logic/civilization/diplomacy/Demand.kt b/core/src/com/unciv/logic/civilization/diplomacy/Demand.kt index d3e17a6276..41ada0a92c 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/Demand.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/Demand.kt @@ -9,7 +9,9 @@ enum class Demand( val refusedDiplomaticModifier: DiplomaticModifiers, val betrayedPromiseDiplomacyMpodifier: DiplomaticModifiers, val demandAlert: AlertType, - val violationDiscoveredAlert: AlertType) { + val violationDiscoveredAlert: AlertType, + val agreedToDemandText: String, + val refusedDemandText: String) { DontSpyOnUs( agreedToDemand = DiplomacyFlags.AgreedToNotSendSpies, violationOccurred = DiplomacyFlags.DiscoveredSpiesInOurCities, @@ -17,7 +19,9 @@ enum class Demand( refusedDiplomaticModifier = DiplomaticModifiers.RefusedToNotSendingSpiesToUs, betrayedPromiseDiplomacyMpodifier = DiplomaticModifiers.BetrayedPromiseToNotSendingSpiesToUs, demandAlert = AlertType.DemandToStopSpyingOnUs, - violationDiscoveredAlert = AlertType.SpyingOnUsDespiteOurPromise + violationDiscoveredAlert = AlertType.SpyingOnUsDespiteOurPromise, + agreedToDemandText = "[civName] agreed to stop spying on us!", + refusedDemandText = "[civName] refused to stop spying on us!" ), DoNotSpreadReligion( agreedToDemand = DiplomacyFlags.AgreedToNotSpreadReligion, @@ -26,7 +30,9 @@ enum class Demand( refusedDiplomaticModifier = DiplomaticModifiers.RefusedToNotSpreadReligionToUs, betrayedPromiseDiplomacyMpodifier = DiplomaticModifiers.BetrayedPromiseToNotSpreadReligionToUs, demandAlert = AlertType.DemandToStopSpreadingReligion, - violationDiscoveredAlert = AlertType.ReligionSpreadDespiteOurPromise + violationDiscoveredAlert = AlertType.ReligionSpreadDespiteOurPromise, + agreedToDemandText = "[civName] agreed to stop spreading religion to us!", + refusedDemandText = "[civName] refused to stop spreading religion to us!", ), DoNotSettleNearUs( agreedToDemand = DiplomacyFlags.AgreedToNotSettleNearUs, @@ -35,7 +41,9 @@ enum class Demand( refusedDiplomaticModifier = DiplomaticModifiers.RefusedToNotSettleCitiesNearUs, betrayedPromiseDiplomacyMpodifier = DiplomaticModifiers.BetrayedPromiseToNotSettleCitiesNearUs, demandAlert = AlertType.DemandToStopSettlingCitiesNear, - violationDiscoveredAlert = AlertType.CitySettledNearOtherCivDespiteOurPromise + violationDiscoveredAlert = AlertType.CitySettledNearOtherCivDespiteOurPromise, + agreedToDemandText = "[civName] agreed to stop settling cities near us!", + refusedDemandText = "[civName] refused to stop settling cities near us!" ) ; -} \ No newline at end of file +} diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt index d10e8821dc..62a3258b1b 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt @@ -15,6 +15,7 @@ import com.unciv.models.ruleset.tile.ResourceSupplyList import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueType +import com.unciv.models.translations.fillPlaceholders import com.unciv.ui.components.extensions.toPercent import kotlin.math.ceil import kotlin.math.max @@ -683,50 +684,20 @@ class DiplomacyManager() : IsPartOfGameInfoSerialization { } } } - - fun agreeNotToSettleNear() { - otherCivDiplomacy().setFlag(DiplomacyFlags.AgreedToNotSettleNearUs, 100) + + fun agreeToDemand(demand: Demand){ + otherCivDiplomacy().setFlag(demand.agreedToDemand, 100) addModifier(DiplomaticModifiers.UnacceptableDemands, -10f) - otherCiv().addNotification("[${civInfo.civName}] agreed to stop settling cities near us!", - NotificationCategory.Diplomacy, NotificationIcon.Diplomacy, civInfo.civName) - } - - fun refuseDemandNotToSettleNear() { - addModifier(DiplomaticModifiers.UnacceptableDemands, -20f) - otherCivDiplomacy().setFlag(DiplomacyFlags.IgnoreThemSettlingNearUs, 100) - otherCivDiplomacy().addModifier(DiplomaticModifiers.RefusedToNotSettleCitiesNearUs, -15f) - otherCiv().addNotification("[${civInfo.civName}] refused to stop settling cities near us!", - NotificationCategory.Diplomacy, NotificationIcon.Diplomacy, civInfo.civName) - } - - fun agreeNotToSpreadReligionTo() { - otherCivDiplomacy().setFlag(DiplomacyFlags.AgreedToNotSpreadReligion, 100) - addModifier(DiplomaticModifiers.UnacceptableDemands, -10f) - otherCiv().addNotification("[${civInfo.civName}] agreed to stop spreading religion to us!", - NotificationCategory.Diplomacy, NotificationIcon.Diplomacy, civInfo.civName) - } - - fun refuseNotToSpreadReligionTo() { - addModifier(DiplomaticModifiers.UnacceptableDemands, -20f) - otherCivDiplomacy().setFlag(DiplomacyFlags.IgnoreThemSpreadingReligion, 100) - otherCivDiplomacy().addModifier(DiplomaticModifiers.RefusedToNotSpreadReligionToUs, -15f) - otherCiv().addNotification("[${civInfo.civName}] refused to stop spreading religion to us!", - NotificationCategory.Diplomacy, NotificationIcon.Diplomacy, civInfo.civName) + val text = demand.agreedToDemandText.fillPlaceholders(civInfo.civName) + otherCiv().addNotification(text, NotificationCategory.Diplomacy, NotificationIcon.Diplomacy, civInfo.civName) } - fun agreeNotToSpreadSpiesTo() { - otherCivDiplomacy().setFlag(DiplomacyFlags.AgreedToNotSendSpies, 100) - addModifier(DiplomaticModifiers.UnacceptableDemands, -10f) - otherCiv().addNotification("[${civInfo.civName}] agreed to stop spying on us!", - NotificationCategory.Diplomacy, NotificationIcon.Diplomacy, civInfo.civName) - } - - fun refuseNotToSpreadSpiesTo() { + fun refuseDemand(demand: Demand) { addModifier(DiplomaticModifiers.UnacceptableDemands, -20f) - otherCivDiplomacy().setFlag(DiplomacyFlags.IgnoreThemSendingSpies, 100) - otherCivDiplomacy().addModifier(DiplomaticModifiers.RefusedToNotSendingSpiesToUs, -15f) - otherCiv().addNotification("[${civInfo.civName}] refused to stop spying on us!", - NotificationCategory.Diplomacy, NotificationIcon.Diplomacy, civInfo.civName) + otherCivDiplomacy().setFlag(demand.willIgnoreViolation, 100) + otherCivDiplomacy().addModifier(demand.refusedDiplomaticModifier, -15f) + val text = demand.refusedDemandText.fillPlaceholders(civInfo.civName) + otherCiv().addNotification(text, NotificationCategory.Diplomacy, NotificationIcon.Diplomacy, civInfo.civName) } fun sideWithCityState() { diff --git a/core/src/com/unciv/ui/screens/worldscreen/AlertPopup.kt b/core/src/com/unciv/ui/screens/worldscreen/AlertPopup.kt index a5dc177414..dbcd0fc66d 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/AlertPopup.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/AlertPopup.kt @@ -269,10 +269,10 @@ class AlertPopup( addLeaderName(otherciv) addGoodSizedLabel("Please don't settle new cities near us.").row() addCloseButton("Very well, we shall look for new lands to settle.", KeyboardBinding.Confirm) { - playerDiploManager.agreeNotToSettleNear() + playerDiploManager.agreeToDemand(Demand.DoNotSettleNearUs) }.row() addCloseButton("We shall do as we please.", KeyboardBinding.Cancel) { - playerDiploManager.refuseDemandNotToSettleNear() + playerDiploManager.refuseDemand(Demand.DoNotSettleNearUs) } return true } @@ -284,10 +284,10 @@ class AlertPopup( addLeaderName(otherciv) addGoodSizedLabel("Please don't spread religion to us.").row() addCloseButton("Very well, we shall spread our faith elsewhere.", KeyboardBinding.Confirm) { - playerDiploManager.agreeNotToSpreadReligionTo() + playerDiploManager.agreeToDemand(Demand.DoNotSpreadReligion) }.row() addCloseButton("We shall do as we please.", KeyboardBinding.Cancel) { - playerDiploManager.refuseNotToSpreadReligionTo() + playerDiploManager.refuseDemand(Demand.DoNotSpreadReligion) } return true } @@ -307,10 +307,10 @@ class AlertPopup( addLeaderName(otherciv) addGoodSizedLabel("Stop spying on us.").row() addCloseButton("We see our people are not welcome in your lands... we will take our attention elsewhere.", KeyboardBinding.Confirm) { - playerDiploManager.agreeNotToSpreadSpiesTo() + playerDiploManager.agreeToDemand(Demand.DontSpyOnUs) }.row() addCloseButton("I'll do what's necessary for my empire to survive.", KeyboardBinding.Cancel) { - playerDiploManager.refuseNotToSpreadSpiesTo() + playerDiploManager.refuseDemand(Demand.DontSpyOnUs) } return true }