Fix effect of new Beliefs not immediately visible in top bar (#6888)

* Fix effect of new Beliefs not immediately visible in top bar

* Fix effect of new Beliefs not immediately visible - reviews
This commit is contained in:
SomeTroglodyte
2022-05-21 20:37:06 +02:00
committed by GitHub
parent 8b9946e65e
commit 3e95e3f152
3 changed files with 106 additions and 85 deletions

View File

@ -100,6 +100,7 @@ class ReligionManager {
for (city in civInfo.cities) for (city in civInfo.cities)
city.religion.addPressure(belief.name, 200 * city.population.population) city.religion.addPressure(belief.name, 200 * city.population.population)
religionState = ReligionState.Pantheon religionState = ReligionState.Pantheon
civInfo.updateStatsForNextTurn() // a belief can have an immediate effect on stats
} }
// https://www.reddit.com/r/civ/comments/2m82wu/can_anyone_detail_the_finer_points_of_great/ // https://www.reddit.com/r/civ/comments/2m82wu/can_anyone_detail_the_finer_points_of_great/
@ -216,12 +217,14 @@ class ReligionManager {
} }
fun chooseBeliefs(iconName: String?, religionName: String?, beliefs: List<Belief>) { fun chooseBeliefs(iconName: String?, religionName: String?, beliefs: List<Belief>) {
if (religionState == ReligionState.FoundingReligion) { when(religionState) {
ReligionState.FoundingReligion ->
foundReligion(iconName!!, religionName!!, beliefs) foundReligion(iconName!!, religionName!!, beliefs)
return ReligionState.EnhancingReligion ->
}
if (religionState == ReligionState.EnhancingReligion)
enhanceReligion(beliefs) enhanceReligion(beliefs)
else -> return
}
civInfo.updateStatsForNextTurn() // a belief can have an immediate effect on stats
} }

View File

@ -52,11 +52,10 @@ class GlobalUniquesTests {
fun statsPerSpecialist() { fun statsPerSpecialist() {
val civInfo = game.addCiv() val civInfo = game.addCiv()
val tile = game.setTileFeatures(Vector2(0f,0f), Constants.desert) val tile = game.setTileFeatures(Vector2(0f,0f), Constants.desert)
val cityInfo = game.addCity(civInfo, tile, true) val cityInfo = game.addCity(civInfo, tile, true, initialPopulation = 2)
val building = game.createBuildingWithUnique("[+3 Gold] from every specialist [in this city]") val building = game.createBuildingWithUnique("[+3 Gold] from every specialist [in this city]")
val specialistName = game.addEmptySpecialist() val specialistName = game.addEmptySpecialist()
building.specialistSlots.add(specialistName,2) building.specialistSlots.add(specialistName, 2)
cityInfo.population.addPopulation(2)
cityInfo.population.specialistAllocations[specialistName] = 2 cityInfo.population.specialistAllocations[specialistName] = 2
cityInfo.cityConstructions.addBuilding(building.name) cityInfo.cityConstructions.addBuilding(building.name)
@ -68,9 +67,8 @@ class GlobalUniquesTests {
fun statsPerPopulation() { fun statsPerPopulation() {
val civInfo = game.addCiv() val civInfo = game.addCiv()
val tile = game.setTileFeatures(Vector2(0f,0f), Constants.desert) val tile = game.setTileFeatures(Vector2(0f,0f), Constants.desert)
val cityInfo = game.addCity(civInfo, tile, true) val cityInfo = game.addCity(civInfo, tile, true, initialPopulation = 4)
val building = game.createBuildingWithUnique("[+3 Gold] per [2] population [in this city]") val building = game.createBuildingWithUnique("[+3 Gold] per [2] population [in this city]")
cityInfo.population.addPopulation(4)
cityInfo.cityConstructions.addBuilding(building.name) cityInfo.cityConstructions.addBuilding(building.name)
cityInfo.cityStats.update() cityInfo.cityStats.update()
@ -81,10 +79,9 @@ class GlobalUniquesTests {
fun statsPerXPopulation() { fun statsPerXPopulation() {
val civInfo = game.addCiv() val civInfo = game.addCiv()
val tile = game.setTileFeatures(Vector2(0f,0f), Constants.desert) val tile = game.setTileFeatures(Vector2(0f,0f), Constants.desert)
val cityInfo = game.addCity(civInfo, tile, true) val cityInfo = game.addCity(civInfo, tile, true, initialPopulation = 2)
val building = game.createBuildingWithUnique("[+3 Gold] in cities with [3] or more population") val building = game.createBuildingWithUnique("[+3 Gold] in cities with [3] or more population")
cityInfo.population.addPopulation(2)
cityInfo.cityConstructions.addBuilding(building.name) cityInfo.cityConstructions.addBuilding(building.name)
cityInfo.cityStats.update() cityInfo.cityStats.update()
@ -160,12 +157,11 @@ class GlobalUniquesTests {
game.makeHexagonalMap(1) game.makeHexagonalMap(1)
val civInfo = game.addCiv() val civInfo = game.addCiv()
val tile = game.setTileFeatures(Vector2(0f,0f), Constants.desert) val tile = game.setTileFeatures(Vector2(0f,0f), Constants.desert)
val cityInfo = game.addCity(civInfo, tile, true) val cityInfo = game.addCity(civInfo, tile, true, initialPopulation = 2)
val specialist = game.addEmptySpecialist() val specialist = game.addEmptySpecialist()
val building = game.createBuildingWithUnique("[+3 Faith] from every [${specialist}]") val building = game.createBuildingWithUnique("[+3 Faith] from every [${specialist}]")
cityInfo.cityConstructions.addBuilding(building.name) cityInfo.cityConstructions.addBuilding(building.name)
cityInfo.population.addPopulation(2)
cityInfo.population.specialistAllocations[specialist] = 2 cityInfo.population.specialistAllocations[specialist] = 2
cityInfo.cityStats.update() cityInfo.cityStats.update()
@ -218,8 +214,7 @@ class GlobalUniquesTests {
religion.founderBeliefs.add(belief.name) religion.founderBeliefs.add(belief.name)
val civ2 = game.addCiv() val civ2 = game.addCiv()
val tile = game.getTile(Vector2(0f,0f)) val tile = game.getTile(Vector2(0f,0f))
val cityOfCiv2 = game.addCity(civ2, tile) val cityOfCiv2 = game.addCity(civ2, tile, initialPopulation = 1) // Need someone to be converted
cityOfCiv2.population.setPopulation(1) // Need someone to be converted
cityOfCiv2.religion.addPressure(religion.name, 1000) cityOfCiv2.religion.addPressure(religion.name, 1000)
Assert.assertTrue(cityOfCiv2.religion.getMajorityReligionName() == religion.name) Assert.assertTrue(cityOfCiv2.religion.getMajorityReligionName() == religion.name)
@ -229,6 +224,24 @@ class GlobalUniquesTests {
Assert.assertTrue(civ1.statsForNextTurn.science == 30f) Assert.assertTrue(civ1.statsForNextTurn.science == 30f)
} }
@Test
fun happinessFromGlobalCitiesFollowingReligion() {
val civ1 = game.addCiv()
val religion = game.addReligion(civ1)
val belief = game.addBelief(BeliefType.Founder, "[+42 Happiness] for each global city following this religion")
religion.founderBeliefs.add(belief.name)
val civ2 = game.addCiv()
val tile = game.getTile(Vector2(0f,0f))
val cityOfCiv2 = game.addCity(civ2, tile, initialPopulation = 1) // Need someone to be converted
cityOfCiv2.religion.addPressure(religion.name, 1000)
civ1.updateStatsForNextTurn()
val baseHappiness = civ1.getDifficulty().baseHappiness
// Since civ1 has no cities, there are no other happiness sources
Assert.assertTrue(civ1.happinessForNextTurn == baseHappiness + 42)
}
@Test @Test
fun statsFromGlobalFollowers() { fun statsFromGlobalFollowers() {
val civ1 = game.addCiv() val civ1 = game.addCiv()
@ -237,8 +250,7 @@ class GlobalUniquesTests {
religion.founderBeliefs.add(belief.name) religion.founderBeliefs.add(belief.name)
val civ2 = game.addCiv() val civ2 = game.addCiv()
val tile = game.getTile(Vector2(0f,0f)) val tile = game.getTile(Vector2(0f,0f))
val cityOfCiv2 = game.addCity(civ2, tile) val cityOfCiv2 = game.addCity(civ2, tile, initialPopulation = 9) // Need people to be converted
cityOfCiv2.population.setPopulation(9) // Need people to be converted
cityOfCiv2.religion.addPressure(religion.name, 1000000000) // To completely overwhelm the default atheism in a city cityOfCiv2.religion.addPressure(religion.name, 1000000000) // To completely overwhelm the default atheism in a city
civ1.updateStatsForNextTurn() civ1.updateStatsForNextTurn()

View File

@ -111,9 +111,15 @@ class TestGame {
return civInfo return civInfo
} }
fun addCity(civInfo: CivilizationInfo, tile: TileInfo, replacePalace: Boolean = false): CityInfo { fun addCity(
civInfo: CivilizationInfo,
tile: TileInfo,
replacePalace: Boolean = false,
initialPopulation: Int = 0
): CityInfo {
val cityInfo = CityInfo(civInfo, tile.position) val cityInfo = CityInfo(civInfo, tile.position)
cityInfo.population.addPopulation(-1) // Remove population if (initialPopulation != 1)
cityInfo.population.addPopulation(initialPopulation - 1) // With defaults this will remove population
if (replacePalace && civInfo.cities.size == 1) { if (replacePalace && civInfo.cities.size == 1) {
// Add a capital indicator without any other stats // Add a capital indicator without any other stats