From daceb87f7f26344b75c2cf81876d910a5fc9a391 Mon Sep 17 00:00:00 2001 From: yairm210 Date: Tue, 17 Jun 2025 12:59:58 +0300 Subject: [PATCH] Added Demand enum, with initial use for deduplicating code --- .../civilization/NextTurnAutomation.kt | 71 ++++--------------- .../logic/civilization/diplomacy/Demand.kt | 41 +++++++++++ 2 files changed, 55 insertions(+), 57 deletions(-) create mode 100644 core/src/com/unciv/logic/civilization/diplomacy/Demand.kt diff --git a/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt b/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt index ed690d9947..7a1bc27352 100644 --- a/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt +++ b/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt @@ -11,10 +11,7 @@ import com.unciv.logic.civilization.Civilization import com.unciv.logic.civilization.NotificationCategory import com.unciv.logic.civilization.NotificationIcon import com.unciv.logic.civilization.PopupAlert -import com.unciv.logic.civilization.diplomacy.DiplomacyFlags -import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers -import com.unciv.logic.civilization.diplomacy.DiplomaticStatus -import com.unciv.logic.civilization.diplomacy.RelationshipLevel +import com.unciv.logic.civilization.diplomacy.* import com.unciv.logic.map.mapunit.MapUnit import com.unciv.logic.map.tile.Tile import com.unciv.models.ruleset.MilestoneType @@ -600,71 +597,31 @@ object NextTurnAutomation { private fun issueRequests(civInfo: Civilization) { for (otherCiv in civInfo.getKnownCivs().filter { it.isMajorCiv() && !civInfo.isAtWarWith(it) }) { val diploManager = civInfo.getDiplomacyManager(otherCiv)!! - if (diploManager.hasFlag(DiplomacyFlags.SettledCitiesNearUs)) - onCitySettledNearBorders(civInfo, otherCiv) - if (diploManager.hasFlag(DiplomacyFlags.SpreadReligionInOurCities)) - onReligionSpreadInOurCity(civInfo, otherCiv) - if (diploManager.hasFlag(DiplomacyFlags.DiscoveredSpiesInOurCities)) - onSpyDiscoveredInOurCity(civInfo, otherCiv) + for (demand in Demand.entries){ + if (diploManager.hasFlag(demand.violationOccurred)) + onDemandViolation(demand, civInfo, otherCiv) + } } } - private fun onCitySettledNearBorders(civInfo: Civilization, otherCiv: Civilization) { - val diplomacyManager = civInfo.getDiplomacyManager(otherCiv)!! - when { - diplomacyManager.hasFlag(DiplomacyFlags.IgnoreThemSettlingNearUs) -> { - } - diplomacyManager.hasFlag(DiplomacyFlags.AgreedToNotSettleNearUs) -> { - otherCiv.popupAlerts.add(PopupAlert(AlertType.CitySettledNearOtherCivDespiteOurPromise, civInfo.civName)) - diplomacyManager.setFlag(DiplomacyFlags.IgnoreThemSettlingNearUs, 100) - diplomacyManager.setModifier(DiplomaticModifiers.BetrayedPromiseToNotSettleCitiesNearUs, -20f) - diplomacyManager.removeFlag(DiplomacyFlags.AgreedToNotSettleNearUs) - } - else -> { - val threatLevel = Automation.threatAssessment(civInfo, otherCiv) - if (threatLevel < ThreatLevel.High) // don't piss them off for no reason please. - otherCiv.popupAlerts.add(PopupAlert(AlertType.DemandToStopSettlingCitiesNear, civInfo.civName)) - } - } - diplomacyManager.removeFlag(DiplomacyFlags.SettledCitiesNearUs) - } - - private fun onReligionSpreadInOurCity(civInfo: Civilization, otherCiv: Civilization){ - val diplomacyManager = civInfo.getDiplomacyManager(otherCiv)!! - when { - diplomacyManager.hasFlag(DiplomacyFlags.IgnoreThemSpreadingReligion) -> {} - diplomacyManager.hasFlag(DiplomacyFlags.AgreedToNotSpreadReligion) -> { - otherCiv.popupAlerts.add(PopupAlert(AlertType.ReligionSpreadDespiteOurPromise, civInfo.civName)) - diplomacyManager.setFlag(DiplomacyFlags.IgnoreThemSpreadingReligion, 100) - diplomacyManager.setModifier(DiplomaticModifiers.BetrayedPromiseToNotSpreadReligionToUs, -20f) - diplomacyManager.removeFlag(DiplomacyFlags.AgreedToNotSpreadReligion) - } - else -> { - val threatLevel = Automation.threatAssessment(civInfo, otherCiv) - if (threatLevel < ThreatLevel.High) // don't piss them off for no reason please. - otherCiv.popupAlerts.add(PopupAlert(AlertType.DemandToStopSpreadingReligion, civInfo.civName)) - } - } - diplomacyManager.removeFlag(DiplomacyFlags.SpreadReligionInOurCities) - } - private fun onSpyDiscoveredInOurCity(civInfo: Civilization, otherCiv: Civilization) { + private fun onDemandViolation(demand: Demand, civInfo: Civilization, otherCiv: Civilization) { val diplomacyManager = civInfo.getDiplomacyManager(otherCiv)!! when { - diplomacyManager.hasFlag(DiplomacyFlags.IgnoreThemSendingSpies) -> {} - diplomacyManager.hasFlag(DiplomacyFlags.AgreedToNotSendSpies) -> { - otherCiv.popupAlerts.add(PopupAlert(AlertType.SpyingOnUsDespiteOurPromise, civInfo.civName)) - diplomacyManager.setFlag(DiplomacyFlags.IgnoreThemSendingSpies, 100) - diplomacyManager.setModifier(DiplomaticModifiers.BetrayedPromiseToNotSendingSpiesToUs, -20f) - diplomacyManager.removeFlag(DiplomacyFlags.AgreedToNotSendSpies) + diplomacyManager.hasFlag(demand.willIgnoreViolation) -> {} + diplomacyManager.hasFlag(demand.agreedToDemand) -> { + otherCiv.popupAlerts.add(PopupAlert(demand.violationDiscoveredAlert, civInfo.civName)) + diplomacyManager.setFlag(demand.willIgnoreViolation, 100) + diplomacyManager.setModifier(demand.betrayedPromiseDiplomacyMpodifier, -20f) + diplomacyManager.removeFlag(demand.agreedToDemand) } else -> { val threatLevel = Automation.threatAssessment(civInfo, otherCiv) if (threatLevel < ThreatLevel.High) // don't piss them off for no reason please. - otherCiv.popupAlerts.add(PopupAlert(AlertType.DemandToStopSpyingOnUs, civInfo.civName)) + otherCiv.popupAlerts.add(PopupAlert(demand.demandAlert, civInfo.civName)) } } - diplomacyManager.removeFlag(DiplomacyFlags.DiscoveredSpiesInOurCities) + diplomacyManager.removeFlag(demand.violationOccurred) } diff --git a/core/src/com/unciv/logic/civilization/diplomacy/Demand.kt b/core/src/com/unciv/logic/civilization/diplomacy/Demand.kt new file mode 100644 index 0000000000..d3e17a6276 --- /dev/null +++ b/core/src/com/unciv/logic/civilization/diplomacy/Demand.kt @@ -0,0 +1,41 @@ +package com.unciv.logic.civilization.diplomacy + +import com.unciv.logic.civilization.AlertType + +enum class Demand( + val agreedToDemand: DiplomacyFlags, + val violationOccurred: DiplomacyFlags, + val willIgnoreViolation:DiplomacyFlags, + val refusedDiplomaticModifier: DiplomaticModifiers, + val betrayedPromiseDiplomacyMpodifier: DiplomaticModifiers, + val demandAlert: AlertType, + val violationDiscoveredAlert: AlertType) { + DontSpyOnUs( + agreedToDemand = DiplomacyFlags.AgreedToNotSendSpies, + violationOccurred = DiplomacyFlags.DiscoveredSpiesInOurCities, + willIgnoreViolation = DiplomacyFlags.IgnoreThemSendingSpies, + refusedDiplomaticModifier = DiplomaticModifiers.RefusedToNotSendingSpiesToUs, + betrayedPromiseDiplomacyMpodifier = DiplomaticModifiers.BetrayedPromiseToNotSendingSpiesToUs, + demandAlert = AlertType.DemandToStopSpyingOnUs, + violationDiscoveredAlert = AlertType.SpyingOnUsDespiteOurPromise + ), + DoNotSpreadReligion( + agreedToDemand = DiplomacyFlags.AgreedToNotSpreadReligion, + violationOccurred = DiplomacyFlags.SpreadReligionInOurCities, + willIgnoreViolation = DiplomacyFlags.IgnoreThemSpreadingReligion, + refusedDiplomaticModifier = DiplomaticModifiers.RefusedToNotSpreadReligionToUs, + betrayedPromiseDiplomacyMpodifier = DiplomaticModifiers.BetrayedPromiseToNotSpreadReligionToUs, + demandAlert = AlertType.DemandToStopSpreadingReligion, + violationDiscoveredAlert = AlertType.ReligionSpreadDespiteOurPromise + ), + DoNotSettleNearUs( + agreedToDemand = DiplomacyFlags.AgreedToNotSettleNearUs, + violationOccurred = DiplomacyFlags.SettledCitiesNearUs, + willIgnoreViolation = DiplomacyFlags.IgnoreThemSettlingNearUs, + refusedDiplomaticModifier = DiplomaticModifiers.RefusedToNotSettleCitiesNearUs, + betrayedPromiseDiplomacyMpodifier = DiplomaticModifiers.BetrayedPromiseToNotSettleCitiesNearUs, + demandAlert = AlertType.DemandToStopSettlingCitiesNear, + violationDiscoveredAlert = AlertType.CitySettledNearOtherCivDespiteOurPromise + ) + ; +} \ No newline at end of file