mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-13 09:18:43 +07:00
Fix conditionals being ignored for some triggers (#10839)
* Fix conditionals being ignored for some triggers * Import StateForConditionals... again
This commit is contained in:
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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])})
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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) &&
|
||||
|
@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user