mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-04 23:40:01 +07:00
'capture all capitals' victory accepts defeat of civs that did not found capitals
This commit is contained in:
@ -351,7 +351,6 @@ class Civilization : IsPartOfGameInfoSerialization {
|
||||
fun hasMetCivTerritory(otherCiv: Civilization): Boolean =
|
||||
otherCiv.getCivTerritory().any { gameInfo.tileMap[it].isExplored(this) }
|
||||
fun getCompletedPolicyBranchesCount(): Int = policies.adoptedPolicies.count { Policy.isBranchCompleteByName(it) }
|
||||
fun originalMajorCapitalsOwned(): Int = cities.count { it.isOriginalCapital && it.foundingCiv != "" && gameInfo.getCivilization(it.foundingCiv).isMajorCiv() }
|
||||
private fun getCivTerritory() = cities.asSequence().flatMap { it.tiles.asSequence() }
|
||||
|
||||
fun getPreferredVictoryType(): String {
|
||||
|
@ -3,6 +3,7 @@ package com.unciv.models.ruleset
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
|
||||
import com.unciv.Constants
|
||||
import com.unciv.logic.GameInfo
|
||||
import com.unciv.logic.civilization.Civilization
|
||||
import com.unciv.models.Counter
|
||||
import com.unciv.models.stats.INamed
|
||||
@ -79,6 +80,19 @@ class Milestone(val uniqueDescription: String, private val parentVictory: Victor
|
||||
return incompleteSpaceshipParts
|
||||
}
|
||||
|
||||
private fun originalMajorCapitalsOwned(civInfo: Civilization): Int = civInfo.cities
|
||||
.count { it.isOriginalCapital && it.foundingCiv != "" && civInfo.gameInfo.getCivilization(it.foundingCiv).isMajorCiv() }
|
||||
|
||||
private fun civsWithPotentialCapitalsToOwn(gameInfo: GameInfo): Set<Civilization> {
|
||||
// Capitals that still exist, even if the civ is dead
|
||||
val civsWithCapitals = gameInfo.getCities().filter { it.isOriginalCapital }
|
||||
.map { gameInfo.getCivilization(it.foundingCiv) }
|
||||
.filter { it.isMajorCiv() }.toSet()
|
||||
// If the civ is alive, they can still create a capital, so we need them as well
|
||||
val livingCivs = gameInfo.civilizations.filter { it.isMajorCiv() && !it.isDefeated() }
|
||||
return civsWithCapitals.union(livingCivs)
|
||||
}
|
||||
|
||||
fun hasBeenCompletedBy(civInfo: Civilization): Boolean {
|
||||
return when (type!!) {
|
||||
MilestoneType.BuiltBuilding ->
|
||||
@ -89,7 +103,7 @@ class Milestone(val uniqueDescription: String, private val parentVictory: Victor
|
||||
MilestoneType.DestroyAllPlayers ->
|
||||
civInfo.gameInfo.getAliveMajorCivs() == listOf(civInfo)
|
||||
MilestoneType.CaptureAllCapitals ->
|
||||
civInfo.originalMajorCapitalsOwned() == civInfo.gameInfo.civilizations.count { it.isMajorCiv() }
|
||||
originalMajorCapitalsOwned(civInfo) == civsWithPotentialCapitalsToOwn(civInfo.gameInfo).size
|
||||
MilestoneType.CompletePolicyBranches ->
|
||||
civInfo.policies.completedBranches.size >= params[0].toInt()
|
||||
MilestoneType.BuildingBuiltGlobally -> civInfo.gameInfo.getCities().any {
|
||||
@ -132,10 +146,10 @@ class Milestone(val uniqueDescription: String, private val parentVictory: Victor
|
||||
"{$uniqueDescription} ($amountDone/$amountToDo)"
|
||||
}
|
||||
MilestoneType.CaptureAllCapitals -> {
|
||||
val amountToDo = civInfo.gameInfo.civilizations.count { it.isMajorCiv() }
|
||||
val amountToDo = civsWithPotentialCapitalsToOwn(civInfo.gameInfo).size
|
||||
val amountDone =
|
||||
if (completed) amountToDo
|
||||
else civInfo.originalMajorCapitalsOwned()
|
||||
else originalMajorCapitalsOwned(civInfo)
|
||||
if (civInfo.hideCivCount())
|
||||
"{$uniqueDescription} ($amountDone/?)"
|
||||
else
|
||||
@ -226,14 +240,25 @@ class Milestone(val uniqueDescription: String, private val parentVictory: Victor
|
||||
|
||||
MilestoneType.CaptureAllCapitals -> {
|
||||
val hideCivCount = civInfo.hideCivCount()
|
||||
val majorCivs = civInfo.gameInfo.civilizations.filter { it.isMajorCiv() }
|
||||
val originalCapitals = civInfo.gameInfo.getCities().filter { it.isOriginalCapital }
|
||||
for (city in originalCapitals) {
|
||||
val isKnown = civInfo.hasExplored(city.getCenterTile())
|
||||
if (hideCivCount && !isKnown) continue
|
||||
val milestoneText =
|
||||
if (isKnown) "Capture [${city.name}]"
|
||||
else "Capture [${Constants.unknownCityName}]"
|
||||
buttons.add(getMilestoneButton(milestoneText, city.civ == civInfo))
|
||||
.associateBy { it.foundingCiv }
|
||||
for (civ in majorCivs) {
|
||||
val city = originalCapitals[civ.civName]
|
||||
if (city != null) {
|
||||
val isKnown = civInfo.hasExplored(city.getCenterTile())
|
||||
if (hideCivCount && !isKnown) continue
|
||||
val milestoneText =
|
||||
if (isKnown) "Capture [${city.name}]"
|
||||
else "Capture [${Constants.unknownCityName}]"
|
||||
buttons.add(getMilestoneButton(milestoneText, city.civ == civInfo))
|
||||
}
|
||||
else {
|
||||
val milestoneText =
|
||||
if (civInfo.knows(civ) || civ.isDefeated()) "Destroy [${civ.civName}]"
|
||||
else "Destroy [${Constants.unknownNationName}]"
|
||||
buttons.add(getMilestoneButton(milestoneText, civ.isDefeated()))
|
||||
}
|
||||
}
|
||||
if (hideCivCount) buttons.add(getMilestoneButton("Capture ? * [${Constants.unknownCityName}]", false))
|
||||
}
|
||||
|
Reference in New Issue
Block a user