From 8974e02290999cbecf5d848a5bd71b0da7a8a978 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Thu, 13 Jun 2019 14:35:55 +0300 Subject: [PATCH] Show victory screen when AI wins --- .../logic/civilization/VictoryManager.kt | 17 +++++++-- core/src/com/unciv/ui/VictoryScreen.kt | 35 +++++++++++++------ .../com/unciv/ui/worldscreen/WorldScreen.kt | 2 +- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/VictoryManager.kt b/core/src/com/unciv/logic/civilization/VictoryManager.kt index dc6fb92d3c..c7970fa911 100644 --- a/core/src/com/unciv/logic/civilization/VictoryManager.kt +++ b/core/src/com/unciv/logic/civilization/VictoryManager.kt @@ -1,6 +1,7 @@ package com.unciv.logic.civilization import com.unciv.models.Counter +import com.unciv.models.gamebasics.VictoryType class VictoryManager { @Transient lateinit var civInfo: CivilizationInfo @@ -27,11 +28,21 @@ class VictoryManager { return counter } - fun hasWonScientificVictory() = requiredSpaceshipParts.equals(currentsSpaceshipParts) + fun spaceshipPartsRemaining() = requiredSpaceshipParts.values.sum() - currentsSpaceshipParts.values.sum() + + fun hasWonScientificVictory() = spaceshipPartsRemaining()==0 fun hasWonCulturalVictory() = civInfo.policies.adoptedPolicies.count{it.endsWith("Complete")} > 3 - fun hasWonConquestVictory() = civInfo.gameInfo.civilizations.all { it==civInfo || it.isDefeated() || it.isCityState() } + fun hasWonDominationVictory() = civInfo.gameInfo.civilizations.all { it==civInfo || it.isDefeated() || it.isCityState() } - fun hasWon() = hasWonConquestVictory() || hasWonCulturalVictory() || hasWonScientificVictory() + fun hasWonVictoryType(): VictoryType? { + if(!civInfo.isMajorCiv()) return null + if(hasWonDominationVictory()) return VictoryType.Domination + if(hasWonScientificVictory()) return VictoryType.Scientific + if(hasWonCulturalVictory()) return VictoryType.Cultural + return null + } + + fun hasWon() = hasWonVictoryType()!=null } diff --git a/core/src/com/unciv/ui/VictoryScreen.kt b/core/src/com/unciv/ui/VictoryScreen.kt index cc88e761fa..5929c9ed9c 100644 --- a/core/src/com/unciv/ui/VictoryScreen.kt +++ b/core/src/com/unciv/ui/VictoryScreen.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.unciv.UnCivGame import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.gamebasics.VictoryType import com.unciv.models.gamebasics.tr import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.utils.addSeparator @@ -35,21 +36,35 @@ class VictoryScreen : PickerScreen() { rightSideButton.isVisible=false - if(playerCivInfo.victoryManager.hasWonScientificVictory()){ - won("You have won a scientific victory!") + var someoneHasWon = false + + val playerVictoryType = playerCivInfo.victoryManager.hasWonVictoryType() + if(playerVictoryType!=null){ + someoneHasWon=true + when(playerVictoryType){ + VictoryType.Cultural -> wonOrLost("You have won a cultural victory!") + VictoryType.Domination -> wonOrLost("You have won a domination victory!") // todo change translation + VictoryType.Scientific -> wonOrLost("You have won a scientific victory!") + } } - else if(playerCivInfo.victoryManager.hasWonCulturalVictory()){ - won("You have won a cultural victory!") - } - else if(playerCivInfo.victoryManager.hasWonConquestVictory()){ - won("You have won a conquest victory!") + for(civ in game.gameInfo.civilizations.filter { it.isMajorCiv() && it!=playerCivInfo }){ + val civVictoryType = civ.victoryManager.hasWonVictoryType() + if(civVictoryType!=null){ + someoneHasWon=true + val winningCivName = civ.civName + when(civVictoryType){ + VictoryType.Cultural -> wonOrLost("[$winningCivName] has won a cultural victory!") + VictoryType.Domination -> wonOrLost("[$winningCivName] has won a domination victory!") + VictoryType.Scientific -> wonOrLost("[$winningCivName] has won a scientific victory!") + } + } } - else setDefaultCloseAction() + if(!someoneHasWon) setDefaultCloseAction() } - fun won(description: String) { + fun wonOrLost(description: String) { descriptionLabel.setText(description.tr()) rightSideButton.setText("Start new game".tr()) @@ -180,7 +195,7 @@ class VictoryScreen : PickerScreen() { val civsToPartsRemaining = majorCivs.map { civToSpaceshipPartsRemaining(it, - it.victoryManager.requiredSpaceshipParts.size - it.victoryManager.currentsSpaceshipParts.size) + it.victoryManager.spaceshipPartsRemaining()) } for (entry in civsToPartsRemaining) diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index 81ba4b6c18..d645d58efc 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -163,7 +163,7 @@ class WorldScreen : CameraStageBaseScreen() { nextTurnButton.y - notificationsScroll.height - 5f) when { - !gameInfo.oneMoreTurnMode && currentPlayerCiv.victoryManager.hasWon() -> game.screen = VictoryScreen() + !gameInfo.oneMoreTurnMode && gameInfo.civilizations.any { it.victoryManager.hasWon() } -> game.screen = VictoryScreen() currentPlayerCiv.policies.freePolicies>0 -> game.screen = PolicyPickerScreen(currentPlayerCiv) currentPlayerCiv.greatPeople.freeGreatPeople>0 -> game.screen = GreatPersonPickerScreen() currentPlayerCiv.tradeRequests.isNotEmpty() ->{