Changed tech trigger to accept tech filters

This commit is contained in:
Yair Morgenstern
2024-03-03 19:40:52 +02:00
parent e6e07d1bec
commit 2ec4d3be8e
4 changed files with 27 additions and 3 deletions

View File

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

View File

@ -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):

View File

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

View File

@ -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),