mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 05:46:43 -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.RulesetCache
|
||||||
import com.unciv.models.ruleset.unique.StateForConditionals
|
import com.unciv.models.ruleset.unique.StateForConditionals
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
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.unique.UniqueTriggerActivation
|
||||||
import com.unciv.models.ruleset.unit.BaseUnit
|
import com.unciv.models.ruleset.unit.BaseUnit
|
||||||
import com.unciv.models.stats.Stats
|
import com.unciv.models.stats.Stats
|
||||||
@ -428,9 +427,10 @@ object GameStarter {
|
|||||||
|
|
||||||
//Trigger any global or nation uniques that should triggered.
|
//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
|
//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)
|
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.Policy.PolicyBranchType
|
||||||
import com.unciv.models.ruleset.PolicyBranch
|
import com.unciv.models.ruleset.PolicyBranch
|
||||||
import com.unciv.models.ruleset.unique.UniqueMap
|
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.UniqueTriggerActivation
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
import com.unciv.models.ruleset.unique.UniqueType
|
||||||
import com.unciv.ui.components.extensions.toPercent
|
import com.unciv.ui.components.extensions.toPercent
|
||||||
@ -204,7 +203,7 @@ class PolicyManager : IsPartOfGameInfoSerialization {
|
|||||||
|
|
||||||
val triggerNotificationText = "due to adopting [${policy.name}]"
|
val triggerNotificationText = "due to adopting [${policy.name}]"
|
||||||
for (unique in policy.uniqueObjects)
|
for (unique in policy.uniqueObjects)
|
||||||
if (unique.conditionals.none { it.type!!.targetTypes.contains(UniqueTarget.TriggerCondition) })
|
if (!unique.hasTriggerConditional())
|
||||||
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText)
|
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText)
|
||||||
|
|
||||||
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponAdoptingPolicyOrBelief))
|
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.Era
|
||||||
import com.unciv.models.ruleset.tech.Technology
|
import com.unciv.models.ruleset.tech.Technology
|
||||||
import com.unciv.models.ruleset.unique.UniqueMap
|
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.UniqueTriggerActivation
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
import com.unciv.models.ruleset.unique.UniqueType
|
||||||
import com.unciv.models.ruleset.unit.BaseUnit
|
import com.unciv.models.ruleset.unit.BaseUnit
|
||||||
@ -291,7 +290,7 @@ class TechManager : IsPartOfGameInfoSerialization {
|
|||||||
|
|
||||||
val triggerNotificationText = "due to researching [$techName]"
|
val triggerNotificationText = "due to researching [$techName]"
|
||||||
for (unique in newTech.uniqueObjects)
|
for (unique in newTech.uniqueObjects)
|
||||||
if (unique.conditionals.none { it.type!!.targetTypes.contains(UniqueTarget.TriggerCondition) })
|
if (!unique.hasTriggerConditional())
|
||||||
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText)
|
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, triggerNotificationText = triggerNotificationText)
|
||||||
|
|
||||||
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponResearch))
|
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponResearch))
|
||||||
@ -429,7 +428,7 @@ class TechManager : IsPartOfGameInfoSerialization {
|
|||||||
|
|
||||||
for (era in erasPassed)
|
for (era in erasPassed)
|
||||||
for (unique in era.uniqueObjects)
|
for (unique in era.uniqueObjects)
|
||||||
if (unique.conditionals.none { it.type!!.targetTypes.contains(UniqueTarget.TriggerCondition) })
|
if (!unique.hasTriggerConditional())
|
||||||
UniqueTriggerActivation.triggerCivwideUnique(
|
UniqueTriggerActivation.triggerCivwideUnique(
|
||||||
unique,
|
unique,
|
||||||
civInfo,
|
civInfo,
|
||||||
|
@ -2,7 +2,6 @@ package com.unciv.logic.map.mapunit
|
|||||||
|
|
||||||
import com.unciv.logic.IsPartOfGameInfoSerialization
|
import com.unciv.logic.IsPartOfGameInfoSerialization
|
||||||
import com.unciv.models.ruleset.unique.StateForConditionals
|
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.UniqueTriggerActivation
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
import com.unciv.models.ruleset.unique.UniqueType
|
||||||
import com.unciv.models.ruleset.unit.Promotion
|
import com.unciv.models.ruleset.unit.Promotion
|
||||||
@ -93,7 +92,7 @@ class UnitPromotions : IsPartOfGameInfoSerialization {
|
|||||||
private fun doDirectPromotionEffects(promotion: Promotion) {
|
private fun doDirectPromotionEffects(promotion: Promotion) {
|
||||||
for (unique in promotion.uniqueObjects)
|
for (unique in promotion.uniqueObjects)
|
||||||
if (unique.conditionalsApply(StateForConditionals(civInfo = unit.civ, unit = unit))
|
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")
|
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]"
|
val triggerNotificationText ="due to constructing [$name]"
|
||||||
|
|
||||||
for (unique in uniqueObjects)
|
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)
|
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 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 isOfType(uniqueType: UniqueType) = uniqueType == type
|
||||||
|
|
||||||
fun conditionalsApply(civInfo: Civilization? = null, city: City? = null): Boolean {
|
fun conditionalsApply(civInfo: Civilization? = null, city: City? = null): Boolean {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user