Fix conditionals being ignored for some triggers (#10839)

* Fix conditionals being ignored for some triggers

* Import StateForConditionals... again
This commit is contained in:
SeventhM
2024-01-19 02:27:51 -08:00
committed by GitHub
parent aba91c9167
commit 016bb80123
7 changed files with 17 additions and 12 deletions

View File

@ -429,8 +429,7 @@ 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)
for (unique in startingTriggers.filter { !it.hasTriggerConditional() && it.conditionalsApply(civ) })
UniqueTriggerActivation.triggerCivwideUnique(unique, civ, tile = startingLocation)
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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