mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-26 13:27:22 -04:00
Check for triggers conditions (#9699)
* Check for triggers conditions * removing shadowed names * Move Conditional check to Uniques
This commit is contained in:
parent
753358c1f0
commit
0e8c960867
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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))
|
||||
|
@ -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,
|
||||
|
@ -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")
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user