mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-06 16:28:40 +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 =
|
fun hasMetCivTerritory(otherCiv: Civilization): Boolean =
|
||||||
otherCiv.getCivTerritory().any { gameInfo.tileMap[it].isExplored(this) }
|
otherCiv.getCivTerritory().any { gameInfo.tileMap[it].isExplored(this) }
|
||||||
fun getCompletedPolicyBranchesCount(): Int = policies.adoptedPolicies.count { Policy.isBranchCompleteByName(it) }
|
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() }
|
private fun getCivTerritory() = cities.asSequence().flatMap { it.tiles.asSequence() }
|
||||||
|
|
||||||
fun getPreferredVictoryType(): String {
|
fun getPreferredVictoryType(): String {
|
||||||
|
@ -3,6 +3,7 @@ package com.unciv.models.ruleset
|
|||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
|
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
|
||||||
import com.unciv.Constants
|
import com.unciv.Constants
|
||||||
|
import com.unciv.logic.GameInfo
|
||||||
import com.unciv.logic.civilization.Civilization
|
import com.unciv.logic.civilization.Civilization
|
||||||
import com.unciv.models.Counter
|
import com.unciv.models.Counter
|
||||||
import com.unciv.models.stats.INamed
|
import com.unciv.models.stats.INamed
|
||||||
@ -79,6 +80,19 @@ class Milestone(val uniqueDescription: String, private val parentVictory: Victor
|
|||||||
return incompleteSpaceshipParts
|
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 {
|
fun hasBeenCompletedBy(civInfo: Civilization): Boolean {
|
||||||
return when (type!!) {
|
return when (type!!) {
|
||||||
MilestoneType.BuiltBuilding ->
|
MilestoneType.BuiltBuilding ->
|
||||||
@ -89,7 +103,7 @@ class Milestone(val uniqueDescription: String, private val parentVictory: Victor
|
|||||||
MilestoneType.DestroyAllPlayers ->
|
MilestoneType.DestroyAllPlayers ->
|
||||||
civInfo.gameInfo.getAliveMajorCivs() == listOf(civInfo)
|
civInfo.gameInfo.getAliveMajorCivs() == listOf(civInfo)
|
||||||
MilestoneType.CaptureAllCapitals ->
|
MilestoneType.CaptureAllCapitals ->
|
||||||
civInfo.originalMajorCapitalsOwned() == civInfo.gameInfo.civilizations.count { it.isMajorCiv() }
|
originalMajorCapitalsOwned(civInfo) == civsWithPotentialCapitalsToOwn(civInfo.gameInfo).size
|
||||||
MilestoneType.CompletePolicyBranches ->
|
MilestoneType.CompletePolicyBranches ->
|
||||||
civInfo.policies.completedBranches.size >= params[0].toInt()
|
civInfo.policies.completedBranches.size >= params[0].toInt()
|
||||||
MilestoneType.BuildingBuiltGlobally -> civInfo.gameInfo.getCities().any {
|
MilestoneType.BuildingBuiltGlobally -> civInfo.gameInfo.getCities().any {
|
||||||
@ -132,10 +146,10 @@ class Milestone(val uniqueDescription: String, private val parentVictory: Victor
|
|||||||
"{$uniqueDescription} ($amountDone/$amountToDo)"
|
"{$uniqueDescription} ($amountDone/$amountToDo)"
|
||||||
}
|
}
|
||||||
MilestoneType.CaptureAllCapitals -> {
|
MilestoneType.CaptureAllCapitals -> {
|
||||||
val amountToDo = civInfo.gameInfo.civilizations.count { it.isMajorCiv() }
|
val amountToDo = civsWithPotentialCapitalsToOwn(civInfo.gameInfo).size
|
||||||
val amountDone =
|
val amountDone =
|
||||||
if (completed) amountToDo
|
if (completed) amountToDo
|
||||||
else civInfo.originalMajorCapitalsOwned()
|
else originalMajorCapitalsOwned(civInfo)
|
||||||
if (civInfo.hideCivCount())
|
if (civInfo.hideCivCount())
|
||||||
"{$uniqueDescription} ($amountDone/?)"
|
"{$uniqueDescription} ($amountDone/?)"
|
||||||
else
|
else
|
||||||
@ -226,8 +240,12 @@ class Milestone(val uniqueDescription: String, private val parentVictory: Victor
|
|||||||
|
|
||||||
MilestoneType.CaptureAllCapitals -> {
|
MilestoneType.CaptureAllCapitals -> {
|
||||||
val hideCivCount = civInfo.hideCivCount()
|
val hideCivCount = civInfo.hideCivCount()
|
||||||
|
val majorCivs = civInfo.gameInfo.civilizations.filter { it.isMajorCiv() }
|
||||||
val originalCapitals = civInfo.gameInfo.getCities().filter { it.isOriginalCapital }
|
val originalCapitals = civInfo.gameInfo.getCities().filter { it.isOriginalCapital }
|
||||||
for (city in originalCapitals) {
|
.associateBy { it.foundingCiv }
|
||||||
|
for (civ in majorCivs) {
|
||||||
|
val city = originalCapitals[civ.civName]
|
||||||
|
if (city != null) {
|
||||||
val isKnown = civInfo.hasExplored(city.getCenterTile())
|
val isKnown = civInfo.hasExplored(city.getCenterTile())
|
||||||
if (hideCivCount && !isKnown) continue
|
if (hideCivCount && !isKnown) continue
|
||||||
val milestoneText =
|
val milestoneText =
|
||||||
@ -235,6 +253,13 @@ class Milestone(val uniqueDescription: String, private val parentVictory: Victor
|
|||||||
else "Capture [${Constants.unknownCityName}]"
|
else "Capture [${Constants.unknownCityName}]"
|
||||||
buttons.add(getMilestoneButton(milestoneText, city.civ == civInfo))
|
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))
|
if (hideCivCount) buttons.add(getMilestoneButton("Capture ? * [${Constants.unknownCityName}]", false))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user