Added Demand enum, with initial use for deduplicating code

This commit is contained in:
yairm210 2025-06-17 12:59:58 +03:00
parent 5754c6c9d5
commit daceb87f7f
2 changed files with 55 additions and 57 deletions

View File

@ -11,10 +11,7 @@ import com.unciv.logic.civilization.Civilization
import com.unciv.logic.civilization.NotificationCategory import com.unciv.logic.civilization.NotificationCategory
import com.unciv.logic.civilization.NotificationIcon import com.unciv.logic.civilization.NotificationIcon
import com.unciv.logic.civilization.PopupAlert import com.unciv.logic.civilization.PopupAlert
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags import com.unciv.logic.civilization.diplomacy.*
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.map.mapunit.MapUnit import com.unciv.logic.map.mapunit.MapUnit
import com.unciv.logic.map.tile.Tile import com.unciv.logic.map.tile.Tile
import com.unciv.models.ruleset.MilestoneType import com.unciv.models.ruleset.MilestoneType
@ -600,71 +597,31 @@ object NextTurnAutomation {
private fun issueRequests(civInfo: Civilization) { private fun issueRequests(civInfo: Civilization) {
for (otherCiv in civInfo.getKnownCivs().filter { it.isMajorCiv() && !civInfo.isAtWarWith(it) }) { for (otherCiv in civInfo.getKnownCivs().filter { it.isMajorCiv() && !civInfo.isAtWarWith(it) }) {
val diploManager = civInfo.getDiplomacyManager(otherCiv)!! val diploManager = civInfo.getDiplomacyManager(otherCiv)!!
if (diploManager.hasFlag(DiplomacyFlags.SettledCitiesNearUs)) for (demand in Demand.entries){
onCitySettledNearBorders(civInfo, otherCiv) if (diploManager.hasFlag(demand.violationOccurred))
if (diploManager.hasFlag(DiplomacyFlags.SpreadReligionInOurCities)) onDemandViolation(demand, civInfo, otherCiv)
onReligionSpreadInOurCity(civInfo, otherCiv) }
if (diploManager.hasFlag(DiplomacyFlags.DiscoveredSpiesInOurCities))
onSpyDiscoveredInOurCity(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)!! val diplomacyManager = civInfo.getDiplomacyManager(otherCiv)!!
when { when {
diplomacyManager.hasFlag(DiplomacyFlags.IgnoreThemSendingSpies) -> {} diplomacyManager.hasFlag(demand.willIgnoreViolation) -> {}
diplomacyManager.hasFlag(DiplomacyFlags.AgreedToNotSendSpies) -> { diplomacyManager.hasFlag(demand.agreedToDemand) -> {
otherCiv.popupAlerts.add(PopupAlert(AlertType.SpyingOnUsDespiteOurPromise, civInfo.civName)) otherCiv.popupAlerts.add(PopupAlert(demand.violationDiscoveredAlert, civInfo.civName))
diplomacyManager.setFlag(DiplomacyFlags.IgnoreThemSendingSpies, 100) diplomacyManager.setFlag(demand.willIgnoreViolation, 100)
diplomacyManager.setModifier(DiplomaticModifiers.BetrayedPromiseToNotSendingSpiesToUs, -20f) diplomacyManager.setModifier(demand.betrayedPromiseDiplomacyMpodifier, -20f)
diplomacyManager.removeFlag(DiplomacyFlags.AgreedToNotSendSpies) diplomacyManager.removeFlag(demand.agreedToDemand)
} }
else -> { else -> {
val threatLevel = Automation.threatAssessment(civInfo, otherCiv) val threatLevel = Automation.threatAssessment(civInfo, otherCiv)
if (threatLevel < ThreatLevel.High) // don't piss them off for no reason please. 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)
} }

View File

@ -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
)
;
}