From 0e8c9608679b30fe0dde1bad6788d3fb3a3bada7 Mon Sep 17 00:00:00 2001 From: SeventhM <127357473+SeventhM@users.noreply.github.com> Date: Sun, 2 Jul 2023 04:53:34 -0700 Subject: [PATCH] Check for triggers conditions (#9699) * Check for triggers conditions * removing shadowed names * Move Conditional check to Uniques --- core/src/com/unciv/logic/GameStarter.kt | 6 +++--- .../com/unciv/logic/civilization/managers/PolicyManager.kt | 3 +-- .../com/unciv/logic/civilization/managers/TechManager.kt | 5 ++--- core/src/com/unciv/logic/map/mapunit/UnitPromotions.kt | 3 +-- core/src/com/unciv/models/ruleset/Building.kt | 2 +- core/src/com/unciv/models/ruleset/unique/Unique.kt | 6 ++++++ 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/core/src/com/unciv/logic/GameStarter.kt b/core/src/com/unciv/logic/GameStarter.kt index b16b2bcc81..21487d53c5 100644 --- a/core/src/com/unciv/logic/GameStarter.kt +++ b/core/src/com/unciv/logic/GameStarter.kt @@ -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) } } diff --git a/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt b/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt index 656be1e86e..26e0f4523e 100644 --- a/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/PolicyManager.kt @@ -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)) diff --git a/core/src/com/unciv/logic/civilization/managers/TechManager.kt b/core/src/com/unciv/logic/civilization/managers/TechManager.kt index 9255063375..ce1a4bd2c6 100644 --- a/core/src/com/unciv/logic/civilization/managers/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/TechManager.kt @@ -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, diff --git a/core/src/com/unciv/logic/map/mapunit/UnitPromotions.kt b/core/src/com/unciv/logic/map/mapunit/UnitPromotions.kt index 64130c719d..6f2185136d 100644 --- a/core/src/com/unciv/logic/map/mapunit/UnitPromotions.kt +++ b/core/src/com/unciv/logic/map/mapunit/UnitPromotions.kt @@ -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") } diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index faedb0fbc6..00e235ee1e 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -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) diff --git a/core/src/com/unciv/models/ruleset/unique/Unique.kt b/core/src/com/unciv/models/ruleset/unique/Unique.kt index eb75a6410a..86808e817a 100644 --- a/core/src/com/unciv/models/ruleset/unique/Unique.kt +++ b/core/src/com/unciv/models/ruleset/unique/Unique.kt @@ -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 {