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.unique.StateForConditionals
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.unit.BaseUnit
import com.unciv.models.stats.Stats
@ -428,9 +427,10 @@ 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
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)
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.PolicyBranch
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.UniqueType
import com.unciv.ui.components.extensions.toPercent
@ -204,7 +203,7 @@ class PolicyManager : IsPartOfGameInfoSerialization {
val triggerNotificationText = "due to adopting [${policy.name}]"
for (unique in policy.uniqueObjects)
if (unique.conditionals.none { it.type!!.targetTypes.contains(UniqueTarget.TriggerCondition) })
if (!unique.hasTriggerConditional())
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText)
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.Technology
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.UniqueType
import com.unciv.models.ruleset.unit.BaseUnit
@ -291,7 +290,7 @@ class TechManager : IsPartOfGameInfoSerialization {
val triggerNotificationText = "due to researching [$techName]"
for (unique in newTech.uniqueObjects)
if (unique.conditionals.none { it.type!!.targetTypes.contains(UniqueTarget.TriggerCondition) })
if (!unique.hasTriggerConditional())
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText)
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponResearch))
@ -429,7 +428,7 @@ class TechManager : IsPartOfGameInfoSerialization {
for (era in erasPassed)
for (unique in era.uniqueObjects)
if (unique.conditionals.none { it.type!!.targetTypes.contains(UniqueTarget.TriggerCondition) })
if (!unique.hasTriggerConditional())
UniqueTriggerActivation.triggerCivwideUnique(
unique,
civInfo,

View File

@ -2,7 +2,6 @@ package com.unciv.logic.map.mapunit
import com.unciv.logic.IsPartOfGameInfoSerialization
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.UniqueType
import com.unciv.models.ruleset.unit.Promotion
@ -93,7 +92,7 @@ class UnitPromotions : IsPartOfGameInfoSerialization {
private fun doDirectPromotionEffects(promotion: Promotion) {
for (unique in promotion.uniqueObjects)
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")
}

View File

@ -671,7 +671,7 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
val triggerNotificationText ="due to constructing [$name]"
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)

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 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 conditionalsApply(civInfo: Civilization? = null, city: City? = null): Boolean {