From 2ec4d3be8e23e0063bfac345db1af3f8a9cbe99a Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 3 Mar 2024 19:40:52 +0200 Subject: [PATCH] Changed tech trigger to accept tech filters --- .../logic/civilization/managers/TechManager.kt | 6 +++++- .../ruleset/unique/UniqueParameterType.kt | 18 ++++++++++++++++++ .../models/ruleset/unique/UniqueTarget.kt | 2 +- .../unciv/models/ruleset/unique/UniqueType.kt | 4 +++- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/managers/TechManager.kt b/core/src/com/unciv/logic/civilization/managers/TechManager.kt index 474050fde0..c42dd95676 100644 --- a/core/src/com/unciv/logic/civilization/managers/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/TechManager.kt @@ -301,8 +301,12 @@ class TechManager : IsPartOfGameInfoSerialization { if (!unique.hasTriggerConditional() && unique.conditionalsApply(StateForConditionals(civInfo))) UniqueTriggerActivation.triggerUnique(unique, civInfo, triggerNotificationText = triggerNotificationText) + for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponResearchOld)) + if (unique.conditionals.any {it.type == UniqueType.TriggerUponResearchOld && it.params[0] == techName}) + UniqueTriggerActivation.triggerUnique(unique, civInfo, triggerNotificationText = triggerNotificationText) + for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponResearch)) - if (unique.conditionals.any {it.type == UniqueType.TriggerUponResearch && it.params[0] == techName}) + if (unique.conditionals.any {it.type == UniqueType.TriggerUponResearch && newTech.matchesFilter(it.params[0]) }) UniqueTriggerActivation.triggerUnique(unique, civInfo, triggerNotificationText = triggerNotificationText) diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt index dfb863895e..d09781d9c6 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt @@ -522,6 +522,24 @@ enum class UniqueParameterType( } }, + /** Implemented by [Technology.matchesFilter][com.unciv.models.ruleset.tech.Technology.matchesFilter] */ + TechFilter("techFilter", "Agriculture") { + private val knownValues = setOf("All", "all") + + override fun getErrorSeverity(parameterText: String, ruleset: Ruleset): + UniqueType.UniqueParameterErrorSeverity? = getErrorSeverityForFilter(parameterText, ruleset) + + override fun isKnownValue(parameterText: String, ruleset: Ruleset): Boolean { + if (parameterText in knownValues) return true + if (parameterText in ruleset.technologies) return true + if (parameterText in ruleset.eras) return true + return false + } + + override fun getTranslationWriterStringsForOutput() = knownValues + }, + + /** unused at the moment with vanilla rulesets */ Specialist("specialist", "Merchant", "The name of any specialist") { override fun getErrorSeverity(parameterText: String, ruleset: Ruleset): diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTarget.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTarget.kt index 9203b1995c..7a9fa9a660 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTarget.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTarget.kt @@ -83,7 +83,7 @@ enum class UniqueTarget( /** All targets that can display their Uniques */ // As Array so it can used in a vararg parameter list. val Displayable = arrayOf( - Building, Unit, UnitType, Improvement, Tech, FollowerBelief, + Building, Unit, UnitType, Improvement, Tech, FollowerBelief, FounderBelief, Terrain, Resource, Policy, Promotion, Nation, Ruins, Speed ) } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index e1258657d0..07e0d57e13 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -775,7 +775,9 @@ enum class UniqueType( ///////////////////////////////////////// region 10 TRIGGERS ///////////////////////////////////////// - TriggerUponResearch("upon discovering [tech]", UniqueTarget.TriggerCondition), + TriggerUponResearch("upon discovering [techFilter] technology", UniqueTarget.TriggerCondition), + @Deprecated("as of 4.10.15", ReplaceWith("upon discovering [tech] technology")) + TriggerUponResearchOld("upon discovering [tech]", UniqueTarget.TriggerCondition), TriggerUponEnteringEra("upon entering the [era]", UniqueTarget.TriggerCondition), TriggerUponAdoptingPolicyOrBelief("upon adopting [policy/belief]", UniqueTarget.TriggerCondition), TriggerUponDeclaringWar("upon declaring war with a major Civilization", UniqueTarget.TriggerCondition),