Merge 6ed8dd9ab1cdac3e4ad2fad132d2388cfca7635f into d51ef24c205b6b05330b3c4d7ce79c402db44447

This commit is contained in:
Rob Loach 2025-09-21 01:17:05 +00:00 committed by GitHub
commit 515d9ded81
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 46 additions and 1 deletions

View File

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

View File

@ -170,7 +170,13 @@ object Conditionals {
else tech.researchedTechnologies.none { it.matchesFilter(filter) }
}
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 ->
checkOnCiv { policies.isAdopted(conditional.params[0]) || religionManager.religion?.hasBelief(conditional.params[0]) == true }
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)"),
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),
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>"
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 [Oligarchy]>"

View File

@ -661,6 +661,38 @@ 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 [Not A Policy]>" 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
// region Great Persons