Check for triggers conditions (#9699)

* Check for triggers conditions

* removing shadowed names

* Move Conditional check to Uniques
This commit is contained in:
SeventhM 2023-07-02 04:53:34 -07:00 committed by GitHub
parent 753358c1f0
commit 0e8c960867
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 14 additions and 11 deletions

View File

@ -19,7 +19,6 @@ import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.RulesetCache import com.unciv.models.ruleset.RulesetCache
import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.StateForConditionals
import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.models.ruleset.unique.UniqueTarget
import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueTriggerActivation
import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.ruleset.unit.BaseUnit
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
@ -428,9 +427,10 @@ object GameStarter {
//Trigger any global or nation uniques that should triggered. //Trigger any global or nation uniques that should triggered.
//We may need the starting location for some uniques, which is why we're doing it now //We may need the starting location for some uniques, which is why we're doing it now
for (unique in ruleset.globalUniques.uniqueObjects + civ.nation.uniqueObjects) val startingTriggers = (ruleset.globalUniques.uniqueObjects + civ.nation.uniqueObjects)
for (unique in startingTriggers.filter { !it.hasTriggerConditional() })
if(unique.isTriggerable) if(unique.isTriggerable)
UniqueTriggerActivation.triggerCivwideUnique(unique,civ, tile = startingLocation) UniqueTriggerActivation.triggerCivwideUnique(unique, civ, tile = startingLocation)
} }
} }

View File

@ -9,7 +9,6 @@ import com.unciv.models.ruleset.Policy
import com.unciv.models.ruleset.Policy.PolicyBranchType import com.unciv.models.ruleset.Policy.PolicyBranchType
import com.unciv.models.ruleset.PolicyBranch import com.unciv.models.ruleset.PolicyBranch
import com.unciv.models.ruleset.unique.UniqueMap import com.unciv.models.ruleset.unique.UniqueMap
import com.unciv.models.ruleset.unique.UniqueTarget
import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueTriggerActivation
import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.ui.components.extensions.toPercent import com.unciv.ui.components.extensions.toPercent
@ -204,7 +203,7 @@ class PolicyManager : IsPartOfGameInfoSerialization {
val triggerNotificationText = "due to adopting [${policy.name}]" val triggerNotificationText = "due to adopting [${policy.name}]"
for (unique in policy.uniqueObjects) for (unique in policy.uniqueObjects)
if (unique.conditionals.none { it.type!!.targetTypes.contains(UniqueTarget.TriggerCondition) }) if (!unique.hasTriggerConditional())
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText) UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText)
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponAdoptingPolicyOrBelief)) for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponAdoptingPolicyOrBelief))

View File

@ -17,7 +17,6 @@ import com.unciv.logic.map.tile.RoadStatus
import com.unciv.models.ruleset.tech.Era import com.unciv.models.ruleset.tech.Era
import com.unciv.models.ruleset.tech.Technology import com.unciv.models.ruleset.tech.Technology
import com.unciv.models.ruleset.unique.UniqueMap import com.unciv.models.ruleset.unique.UniqueMap
import com.unciv.models.ruleset.unique.UniqueTarget
import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueTriggerActivation
import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.ruleset.unit.BaseUnit
@ -291,7 +290,7 @@ class TechManager : IsPartOfGameInfoSerialization {
val triggerNotificationText = "due to researching [$techName]" val triggerNotificationText = "due to researching [$techName]"
for (unique in newTech.uniqueObjects) for (unique in newTech.uniqueObjects)
if (unique.conditionals.none { it.type!!.targetTypes.contains(UniqueTarget.TriggerCondition) }) if (!unique.hasTriggerConditional())
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText) UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText)
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponResearch)) for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponResearch))
@ -429,7 +428,7 @@ class TechManager : IsPartOfGameInfoSerialization {
for (era in erasPassed) for (era in erasPassed)
for (unique in era.uniqueObjects) for (unique in era.uniqueObjects)
if (unique.conditionals.none { it.type!!.targetTypes.contains(UniqueTarget.TriggerCondition) }) if (!unique.hasTriggerConditional())
UniqueTriggerActivation.triggerCivwideUnique( UniqueTriggerActivation.triggerCivwideUnique(
unique, unique,
civInfo, civInfo,

View File

@ -2,7 +2,6 @@ package com.unciv.logic.map.mapunit
import com.unciv.logic.IsPartOfGameInfoSerialization import com.unciv.logic.IsPartOfGameInfoSerialization
import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.StateForConditionals
import com.unciv.models.ruleset.unique.UniqueTarget
import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueTriggerActivation
import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.models.ruleset.unit.Promotion import com.unciv.models.ruleset.unit.Promotion
@ -93,7 +92,7 @@ class UnitPromotions : IsPartOfGameInfoSerialization {
private fun doDirectPromotionEffects(promotion: Promotion) { private fun doDirectPromotionEffects(promotion: Promotion) {
for (unique in promotion.uniqueObjects) for (unique in promotion.uniqueObjects)
if (unique.conditionalsApply(StateForConditionals(civInfo = unit.civ, unit = unit)) if (unique.conditionalsApply(StateForConditionals(civInfo = unit.civ, unit = unit))
&& unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.TriggerCondition) == true }) && !unique.hasTriggerConditional())
UniqueTriggerActivation.triggerUnitwideUnique(unique, unit, triggerNotificationText = "due to our [${unit.name}] being promoted") UniqueTriggerActivation.triggerUnitwideUnique(unique, unit, triggerNotificationText = "due to our [${unit.name}] being promoted")
} }

View File

@ -671,7 +671,7 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
val triggerNotificationText ="due to constructing [$name]" val triggerNotificationText ="due to constructing [$name]"
for (unique in uniqueObjects) for (unique in uniqueObjects)
if (unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.TriggerCondition)==true }) if (!unique.hasTriggerConditional())
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, cityConstructions.city, triggerNotificationText = triggerNotificationText) UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, cityConstructions.city, triggerNotificationText = triggerNotificationText)

View File

@ -42,6 +42,12 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
fun hasFlag(flag: UniqueFlag) = type != null && type.flags.contains(flag) fun hasFlag(flag: UniqueFlag) = type != null && type.flags.contains(flag)
fun hasTriggerConditional(): Boolean {
if(conditionals.none()) return false
return conditionals.any{ conditional -> conditional.type!!.targetTypes
.any{ it.canAcceptUniqueTarget(UniqueTarget.TriggerCondition) } }
}
fun isOfType(uniqueType: UniqueType) = uniqueType == type fun isOfType(uniqueType: UniqueType) = uniqueType == type
fun conditionalsApply(civInfo: Civilization? = null, city: City? = null): Boolean { fun conditionalsApply(civInfo: Civilization? = null, city: City? = null): Boolean {