From 2b81172d206e78f264a2195500e33e8d263db25f Mon Sep 17 00:00:00 2001 From: yairm210 Date: Wed, 7 Aug 2024 00:57:29 +0300 Subject: [PATCH] Conditional that tests if a mod is enabled - by @SomeTroglodyte --- core/src/com/unciv/models/ruleset/unique/Conditionals.kt | 6 ++++++ core/src/com/unciv/models/ruleset/unique/UniqueType.kt | 1 + .../com/unciv/models/ruleset/validation/ModCompatibility.kt | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/com/unciv/models/ruleset/unique/Conditionals.kt b/core/src/com/unciv/models/ruleset/unique/Conditionals.kt index 96f93df2b9..c338eb3cc0 100644 --- a/core/src/com/unciv/models/ruleset/unique/Conditionals.kt +++ b/core/src/com/unciv/models/ruleset/unique/Conditionals.kt @@ -6,6 +6,7 @@ import com.unciv.logic.battle.CombatAction import com.unciv.logic.city.City import com.unciv.logic.civilization.Civilization import com.unciv.logic.civilization.managers.ReligionState +import com.unciv.models.ruleset.validation.ModCompatibility import com.unciv.models.stats.Stat import kotlin.random.Random @@ -303,6 +304,11 @@ object Conditionals { first in second..third } + UniqueType.ConditionalModEnabled -> checkOnGameInfo { + val filter = conditional.params[0] + (gameParameters.mods.asSequence() + gameParameters.baseRuleset).any { ModCompatibility.modNameFilter(it, filter) } + } + else -> false } } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index ff9176e413..c17f3ce148 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -937,6 +937,7 @@ enum class UniqueType( ModIsNotAudioVisual("Cannot be used as permanent audiovisual mod", UniqueTarget.ModOptions, flags = UniqueFlag.setOfNoConditionals), ModMapPreselection("Mod preselects map [comment]", UniqueTarget.ModOptions, flags = UniqueFlag.setOfNoConditionals, docDescription = "Only meaningful for Mods containing several maps. When this mod is selected on the new game screen's custom maps mod dropdown, the named map will be selected on the map dropdown. Also disables selection by recently modified. Case insensitive."), + ConditionalModEnabled("if [modFilter] is enabled", UniqueTarget.Conditional), // endregion diff --git a/core/src/com/unciv/models/ruleset/validation/ModCompatibility.kt b/core/src/com/unciv/models/ruleset/validation/ModCompatibility.kt index 738bc7d898..ee465cbaaf 100644 --- a/core/src/com/unciv/models/ruleset/validation/ModCompatibility.kt +++ b/core/src/com/unciv/models/ruleset/validation/ModCompatibility.kt @@ -56,7 +56,7 @@ object ModCompatibility { && mod.name.isNotBlank() && !mod.modOptions.hasUnique(UniqueType.ModIsAudioVisualOnly) - private fun modNameFilter(modName: String, filter: String): Boolean { + fun modNameFilter(modName: String, filter: String): Boolean { if (modName == filter) return true if (filter.length < 3 || !filter.startsWith('*') || !filter.endsWith('*')) return false val partialName = filter.substring(1, filter.length - 1).lowercase()