diff --git a/core/src/com/unciv/logic/GameStarter.kt b/core/src/com/unciv/logic/GameStarter.kt index 1b8d9ebbf7..1810c735f3 100644 --- a/core/src/com/unciv/logic/GameStarter.kt +++ b/core/src/com/unciv/logic/GameStarter.kt @@ -429,9 +429,8 @@ object GameStarter { //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 val startingTriggers = (ruleset.globalUniques.uniqueObjects + civ.nation.uniqueObjects) - for (unique in startingTriggers.filter { !it.hasTriggerConditional() }) - if (unique.isTriggerable) - UniqueTriggerActivation.triggerCivwideUnique(unique, civ, tile = startingLocation) + for (unique in startingTriggers.filter { !it.hasTriggerConditional() && it.conditionalsApply(civ) }) + UniqueTriggerActivation.triggerCivwideUnique(unique, civ, tile = startingLocation) } } diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index a1120c9f4d..ab99aff254 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -544,17 +544,18 @@ class CityConstructions : IsPartOfGameInfoSerialization { } fun triggerNewBuildingUniques(building: Building) { + val stateForConditionals = StateForConditionals(city.civ, city) val triggerNotificationText ="due to constructing [${building.name}]" for (unique in building.uniqueObjects) - if (!unique.hasTriggerConditional()) + if (!unique.hasTriggerConditional() && unique.conditionalsApply(stateForConditionals)) UniqueTriggerActivation.triggerCivwideUnique(unique, city.civ, city, triggerNotificationText = triggerNotificationText) - for (unique in city.civ.getTriggeredUniques(UniqueType.TriggerUponConstructingBuilding, StateForConditionals(city.civ, city))) + for (unique in city.civ.getTriggeredUniques(UniqueType.TriggerUponConstructingBuilding, stateForConditionals)) if (unique.conditionals.any {it.type == UniqueType.TriggerUponConstructingBuilding && building.matchesFilter(it.params[0])}) UniqueTriggerActivation.triggerCivwideUnique(unique, city.civ, city, triggerNotificationText = triggerNotificationText) - for (unique in city.civ.getTriggeredUniques(UniqueType.TriggerUponConstructingBuildingCityFilter, StateForConditionals(city.civ, city))) + for (unique in city.civ.getTriggeredUniques(UniqueType.TriggerUponConstructingBuildingCityFilter, stateForConditionals)) if (unique.conditionals.any {it.type == UniqueType.TriggerUponConstructingBuildingCityFilter && building.matchesFilter(it.params[0]) && city.matchesFilter(it.params[1])}) diff --git a/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt b/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt index 37a798fd61..83cf7b7a50 100644 --- a/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt @@ -8,6 +8,7 @@ import com.unciv.logic.map.MapSize import com.unciv.models.ruleset.Policy import com.unciv.models.ruleset.Policy.PolicyBranchType import com.unciv.models.ruleset.PolicyBranch +import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.UniqueMap import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueType @@ -210,7 +211,7 @@ class PolicyManager : IsPartOfGameInfoSerialization { //todo Can this be mapped downstream to a PolicyAction:NotificationAction? val triggerNotificationText = "due to adopting [${policy.name}]" for (unique in policy.uniqueObjects) - if (!unique.hasTriggerConditional()) + if (!unique.hasTriggerConditional() && unique.conditionalsApply(StateForConditionals(civInfo))) UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText) for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponAdoptingPolicyOrBelief)) diff --git a/core/src/com/unciv/logic/civilization/managers/ReligionManager.kt b/core/src/com/unciv/logic/civilization/managers/ReligionManager.kt index 4ca5a092c9..91e451cc70 100644 --- a/core/src/com/unciv/logic/civilization/managers/ReligionManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/ReligionManager.kt @@ -9,6 +9,7 @@ import com.unciv.models.Counter import com.unciv.models.Religion import com.unciv.models.ruleset.Belief import com.unciv.models.ruleset.BeliefType +import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unit.BaseUnit @@ -411,7 +412,7 @@ class ReligionManager : IsPartOfGameInfoSerialization { triggerNotificationText = "due to adopting [${belief.name}]") for (belief in beliefs) - for (unique in belief.uniqueObjects.filter { !it.hasTriggerConditional() }) + for (unique in belief.uniqueObjects.filter { !it.hasTriggerConditional() && it.conditionalsApply(StateForConditionals(civInfo)) }) UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo) civInfo.updateStatsForNextTurn() // a belief can have an immediate effect on stats diff --git a/core/src/com/unciv/logic/civilization/managers/TechManager.kt b/core/src/com/unciv/logic/civilization/managers/TechManager.kt index 97106fb2c8..bfba17a062 100644 --- a/core/src/com/unciv/logic/civilization/managers/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/TechManager.kt @@ -18,6 +18,7 @@ import com.unciv.logic.map.tile.RoadStatus import com.unciv.models.ruleset.INonPerpetualConstruction import com.unciv.models.ruleset.tech.Era import com.unciv.models.ruleset.tech.Technology +import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.UniqueMap import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueType @@ -296,7 +297,7 @@ class TechManager : IsPartOfGameInfoSerialization { val triggerNotificationText = "due to researching [$techName]" for (unique in newTech.uniqueObjects) - if (!unique.hasTriggerConditional()) + if (!unique.hasTriggerConditional() && unique.conditionalsApply(StateForConditionals(civInfo))) UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText) for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponResearch)) @@ -437,7 +438,7 @@ class TechManager : IsPartOfGameInfoSerialization { for (era in erasPassed) for (unique in era.uniqueObjects) - if (!unique.hasTriggerConditional()) + if (!unique.hasTriggerConditional() && unique.conditionalsApply(StateForConditionals(civInfo))) UniqueTriggerActivation.triggerCivwideUnique( unique, civInfo, diff --git a/core/src/com/unciv/logic/civilization/managers/UnitManager.kt b/core/src/com/unciv/logic/civilization/managers/UnitManager.kt index b045cd4833..a8f4b3cb8b 100644 --- a/core/src/com/unciv/logic/civilization/managers/UnitManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/UnitManager.kt @@ -7,6 +7,7 @@ import com.unciv.logic.civilization.Civilization import com.unciv.logic.civilization.NotificationCategory import com.unciv.logic.map.mapunit.MapUnit import com.unciv.logic.map.tile.Tile +import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unit.BaseUnit @@ -80,7 +81,7 @@ class UnitManager(val civInfo:Civilization) { if (unit != null) { val triggerNotificationText = "due to gaining a [${unit.name}]" for (unique in unit.getUniques()) - if (!unique.hasTriggerConditional()) + if (!unique.hasTriggerConditional() && unique.conditionalsApply(StateForConditionals(civInfo, unit = unit))) UniqueTriggerActivation.triggerUnitwideUnique(unique, unit, triggerNotificationText = triggerNotificationText) for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponGainingUnit)) if (unique.conditionals.any { it.isOfType(UniqueType.TriggerUponGainingUnit) && diff --git a/core/src/com/unciv/logic/map/tile/TileInfoImprovementFunctions.kt b/core/src/com/unciv/logic/map/tile/TileInfoImprovementFunctions.kt index 2b294f75c5..618278bd48 100644 --- a/core/src/com/unciv/logic/map/tile/TileInfoImprovementFunctions.kt +++ b/core/src/com/unciv/logic/map/tile/TileInfoImprovementFunctions.kt @@ -243,7 +243,8 @@ class TileInfoImprovementFunctions(val tile: Tile) { civ: Civilization, unit: MapUnit? = null ) { - for (unique in improvement.uniqueObjects.filter { !it.hasTriggerConditional() }) + for (unique in improvement.uniqueObjects.filter { !it.hasTriggerConditional() + && it.conditionalsApply(StateForConditionals(civ)) }) if (unit != null) { UniqueTriggerActivation.triggerUnitwideUnique(unique, unit) }