Add if no other Civilization has adopted [policy/belief] Conditional

This commit is contained in:
Rob Loach 2025-09-20 21:06:58 -04:00
parent d51ef24c20
commit 0f62ec2fa5
No known key found for this signature in database
GPG Key ID: 627C60834A74A21A
5 changed files with 45 additions and 1 deletions

View File

@ -71,6 +71,7 @@ class Religion() : INamed, IsPartOfGameInfoSerialization {
} }
fun addBelief(belief: Belief) = addBeliefs(listOf(belief)) fun addBelief(belief: Belief) = addBeliefs(listOf(belief))
fun addBelief(beliefName: String) = gameInfo.ruleset.beliefs[beliefName]?.let { addBelief(it) }
@Readonly @Readonly
fun getIconName() = fun getIconName() =

View File

@ -170,7 +170,13 @@ object Conditionals {
else tech.researchedTechnologies.none { it.matchesFilter(filter) } else tech.researchedTechnologies.none { it.matchesFilter(filter) }
} }
UniqueType.ConditionalWhileResearching -> checkOnCiv { tech.currentTechnology()?.matchesFilter(conditional.params[0]) == true } UniqueType.ConditionalWhileResearching -> checkOnCiv { tech.currentTechnology()?.matchesFilter(conditional.params[0]) == true }
UniqueType.ConditionalNoCivAdopted -> checkOnGameInfo {
civilizations.none {
it.isMajorCiv() &&
it.isAlive() &&
(it.policies.isAdopted(conditional.params[0]) || it.religionManager.religion?.hasBelief(conditional.params[0]) == true)
}
}
UniqueType.ConditionalAfterPolicyOrBelief -> UniqueType.ConditionalAfterPolicyOrBelief ->
checkOnCiv { policies.isAdopted(conditional.params[0]) || religionManager.religion?.hasBelief(conditional.params[0]) == true } checkOnCiv { policies.isAdopted(conditional.params[0]) || religionManager.religion?.hasBelief(conditional.params[0]) == true }
UniqueType.ConditionalBeforePolicyOrBelief -> UniqueType.ConditionalBeforePolicyOrBelief ->

View File

@ -719,6 +719,7 @@ enum class UniqueType(
docDescription = "This condition is fulfilled while the technology is actively being researched (it is the one research points are added to)"), docDescription = "This condition is fulfilled while the technology is actively being researched (it is the one research points are added to)"),
ConditionalFirstCivToAdopt("if no other Civilization has adopted this", UniqueTarget.Conditional), ConditionalFirstCivToAdopt("if no other Civilization has adopted this", UniqueTarget.Conditional),
ConditionalNoCivAdopted("if no Civilization has adopted [policy/belief]", UniqueTarget.Conditional),
ConditionalAfterPolicyOrBelief("after adopting [policy/belief]", UniqueTarget.Conditional), ConditionalAfterPolicyOrBelief("after adopting [policy/belief]", UniqueTarget.Conditional),
ConditionalBeforePolicyOrBelief("before adopting [policy/belief]", UniqueTarget.Conditional), ConditionalBeforePolicyOrBelief("before adopting [policy/belief]", UniqueTarget.Conditional),

View File

@ -3303,6 +3303,11 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl
??? example "<if no other Civilization has adopted this>" ??? example "<if no other Civilization has adopted this>"
Applicable to: Conditional Applicable to: Conditional
??? example "<if no Civilization has adopted [policy/belief]>"
Example: "<if no Civilization has adopted [Oligarchy]>"
Applicable to: Conditional
??? example "<after adopting [policy/belief]>" ??? example "<after adopting [policy/belief]>"
Example: "<after adopting [Oligarchy]>" Example: "<after adopting [Oligarchy]>"

View File

@ -661,6 +661,37 @@ class GlobalUniquesTests {
} }
} }
@Test
fun conditionalFirstCivToAdopt() {
val civInfo = game.addCiv()
val city = game.addCity(civInfo, game.getTile(Vector2.Zero), true)
// Policy
civInfo.policies.run {
freePolicies++
adopt(getPolicyByName("Tradition"))
}
// Belief
game.addReligion(civInfo)
civInfo.religionManager.religion?.run {
addBelief("Ancestor Worship")
addBelief("Not A Belief")
}
val tests = listOf(
"<if no Civilization has adopted [Oligarchy]>" to 1,
"<if no Civilization has adopted [Tradition]>" to 0,
"<if no Civilization has adopted [God of Craftsman]>" to 1,
"<if no Civilization has adopted [Ancestor Worship]>" to 0,
"<if no Civilization has adopted [Not A Belief]>" to 1,
)
Assert.assertEquals(civInfo.gold, 0)
for ((test, expected) in tests) {
val building = game.createBuilding("Gain [1] [Gold] $test")
city.cityConstructions.addBuilding(building)
Assert.assertEquals("Conditional `$test` should be: $expected", civInfo.gold, expected)
civInfo.addGold(-civInfo.gold) // Reset the gold
}
}
// endregion // endregion
// region Great Persons // region Great Persons