Skip to content

Commit

Permalink
Add a filter for religions
Browse files Browse the repository at this point in the history
  • Loading branch information
SeventhM committed Mar 2, 2025
1 parent 24eae9d commit 03d7be2
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 0 deletions.
22 changes: 22 additions & 0 deletions core/src/com/unciv/models/Religion.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@ package com.unciv.models

import com.unciv.logic.GameInfo
import com.unciv.logic.IsPartOfGameInfoSerialization
import com.unciv.logic.MultiFilter
import com.unciv.logic.civilization.Civilization
import com.unciv.models.ruleset.Belief
import com.unciv.models.ruleset.BeliefType
import com.unciv.models.ruleset.unique.StateForConditionals
import com.unciv.models.ruleset.unique.UniqueMap
import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.models.stats.INamed
Expand Down Expand Up @@ -114,6 +117,25 @@ class Religion() : INamed, IsPartOfGameInfoSerialization {

fun getFounder() = gameInfo.getCivilization(foundingCivName)

fun matchesFilter(filter: String, state: StateForConditionals = StateForConditionals.IgnoreConditionals, civ: Civilization? = null): Boolean {
return MultiFilter.multiFilter(filter, { matchesSingleFilter(it, state, civ) })
}

private fun matchesSingleFilter(filter: String, state: StateForConditionals = StateForConditionals.IgnoreConditionals, civ: Civilization? = null): Boolean {
if (filter == "any") return true
if (filter == name) return true
if (filter == "major") return isMajorReligion()
if (filter == "enhanced") return isEnhancedReligion()
val foundingCiv = getFounder()
if (filter == "your") return civ == foundingCiv
if (filter == "foreign") return civ != null && civ != foundingCiv
val known = civ != null && civ.knows(foundingCiv)
if (filter == "enemy") return known && civ!!.isAtWarWith(foundingCiv)
if (founderBeliefUniqueMap.hasMatchingUnique(filter, state)) return true
if (founderBeliefUniqueMap.hasMatchingUnique(filter, state)) return true
return false
}

private fun unlockedBuildingsPurchasable(): List<String> {
return getAllBeliefsOrdered().flatMap { belief ->
belief.getMatchingUniques(UniqueType.BuyBuildingsWithStat).map { it.params[0] } +
Expand Down
4 changes: 4 additions & 0 deletions core/src/com/unciv/models/ruleset/unique/Conditionals.kt
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,10 @@ object Conditionals {
UniqueType.ConditionalInThisCity -> state.relevantCity != null
UniqueType.ConditionalCityFilter -> checkOnCity { matchesFilter(conditional.params[0], state.relevantCiv) }
UniqueType.ConditionalCityConnected -> checkOnCity { isConnectedToCapital() }
UniqueType.ConditionalCityReligion -> checkOnCity {
religion.getMajorityReligion()
?.matchesFilter(conditional.params[0], state, state.relevantCiv) == true
}
UniqueType.ConditionalCityMajorReligion -> checkOnCity {
religion.getMajorityReligion()?.isMajorReligion() == true }
UniqueType.ConditionalCityEnhancedReligion -> checkOnCity {
Expand Down
13 changes: 13 additions & 0 deletions core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,19 @@ enum class UniqueParameterType(
Belief("belief", "God of War", "The name of any belief") {
override fun getKnownValuesForAutocomplete(ruleset: Ruleset) = ruleset.beliefs.keys
},

/**Used by [UniqueType.ConditionalCityReligion]*/
ReligionFilter("religionFilter", "major") {
override val staticKnownValues = setOf("any", "major", "enhanced", "your", "foreign","enemy")
override fun isKnownValue(parameterText: String, ruleset: Ruleset): Boolean {
return when (parameterText) {
in staticKnownValues -> true
in ruleset.nations -> true
in ruleset.religions -> true
else -> ruleset.beliefs.values.any { it.hasTagUnique(parameterText) }
}
}
},

/** Used by [UniqueType.FreeExtraBeliefs] and its any variant, see ReligionManager.getBeliefsToChooseAt* functions */
FoundingOrEnhancing("foundingOrEnhancing", "founding", "`founding` or `enhancing`", "Prophet Action Filters",
Expand Down
1 change: 1 addition & 0 deletions core/src/com/unciv/models/ruleset/unique/UniqueType.kt
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,7 @@ enum class UniqueType(
ConditionalInThisCity("in this city", UniqueTarget.Conditional),
ConditionalCityFilter("in [cityFilter] cities", UniqueTarget.Conditional),
ConditionalCityConnected("in cities connected to the capital", UniqueTarget.Conditional),
ConditionalCityReligion("in cities with a [religionFilter] religion", UniqueTarget.Conditional),
ConditionalCityMajorReligion("in cities with a major religion", UniqueTarget.Conditional),
ConditionalCityEnhancedReligion("in cities with an enhanced religion", UniqueTarget.Conditional),
ConditionalCityThisReligion("in cities following our religion", UniqueTarget.Conditional),
Expand Down

0 comments on commit 03d7be2

Please sign in to comment.