From f45d23d8d5fc1797a82cbf6b8686b25aa4af7396 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Wed, 28 Dec 2022 08:10:27 +0200 Subject: [PATCH] Revert "Demographics removed - resolves #8215" This reverts commit c7f5a34c04b6e1bec393ab168533ece130aef456. --- .../jsons/translations/template.properties | 3 ++ .../com/unciv/models/metadata/GameSettings.kt | 1 + core/src/com/unciv/ui/options/DisplayTab.kt | 1 + .../unciv/ui/victoryscreen/VictoryScreen.kt | 54 ++++++++++++++++++- 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index cef1374240..dc169e767e 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -709,6 +709,7 @@ off = Show pixel units = Show pixel improvements = Enable Nuclear Weapons = +Experimental Demographics scoreboard = Unit icon opacity = Show zoom buttons in world screen = Enable display cutout (requires restart) = @@ -1260,6 +1261,8 @@ Capture [cityName] = Our status = Global status = Rankings = +Demographics = +Demographic = Rank = Value = Best = diff --git a/core/src/com/unciv/models/metadata/GameSettings.kt b/core/src/com/unciv/models/metadata/GameSettings.kt index a1687f2731..72febbdf64 100644 --- a/core/src/com/unciv/models/metadata/GameSettings.kt +++ b/core/src/com/unciv/models/metadata/GameSettings.kt @@ -67,6 +67,7 @@ class GameSettings { var windowState = WindowState() var isFreshlyCreated = false var visualMods = HashSet() + var useDemographics: Boolean = false var showZoomButtons: Boolean = false var notificationsLogMaxTurns = 5 diff --git a/core/src/com/unciv/ui/options/DisplayTab.kt b/core/src/com/unciv/ui/options/DisplayTab.kt index 05d610043e..9a44548c91 100644 --- a/core/src/com/unciv/ui/options/DisplayTab.kt +++ b/core/src/com/unciv/ui/options/DisplayTab.kt @@ -36,6 +36,7 @@ fun displayTab( optionsPopup.addCheckbox(this, "Show resources and improvements", settings.showResourcesAndImprovements, true) { settings.showResourcesAndImprovements = it } optionsPopup.addCheckbox(this, "Show tutorials", settings.showTutorials, true) { settings.showTutorials = it } optionsPopup.addCheckbox(this, "Show pixel improvements", settings.showPixelImprovements, true) { settings.showPixelImprovements = it } + optionsPopup.addCheckbox(this, "Experimental Demographics scoreboard", settings.useDemographics, true) { settings.useDemographics = it } optionsPopup.addCheckbox(this, "Show zoom buttons in world screen", settings.showZoomButtons, true) { settings.showZoomButtons = it } addMinimapSizeSlider(this, settings, optionsPopup.selectBoxMinWidth) diff --git a/core/src/com/unciv/ui/victoryscreen/VictoryScreen.kt b/core/src/com/unciv/ui/victoryscreen/VictoryScreen.kt index 35fbe92e2d..f599a52def 100644 --- a/core/src/com/unciv/ui/victoryscreen/VictoryScreen.kt +++ b/core/src/com/unciv/ui/victoryscreen/VictoryScreen.kt @@ -38,7 +38,7 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() { val setGlobalVictoryButton = "Global status".toTextButton().onClick { setGlobalVictoryTable() } tabsTable.add(setGlobalVictoryButton) - val rankingLabel = "Rankings" + val rankingLabel = if (UncivGame.Current.settings.useDemographics) "Demographics" else "Rankings" val setCivRankingsButton = rankingLabel.toTextButton().onClick { setCivRankingsTable() } tabsTable.add(setCivRankingsButton) topTable.add(tabsTable) @@ -182,9 +182,59 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() { private fun setCivRankingsTable() { val majorCivs = gameInfo.civilizations.filter { it.isMajorCiv() } contentsTable.clear() - contentsTable.add(buildRankingsTable(majorCivs)) + + if (UncivGame.Current.settings.useDemographics) contentsTable.add(buildDemographicsTable(majorCivs)) + else contentsTable.add(buildRankingsTable(majorCivs)) } + enum class RankLabels { Rank, Value, Best, Average, Worst} + private fun buildDemographicsTable(majorCivs: List): Table { + val demographicsTable = Table().apply { defaults().pad(5f) } + buildDemographicsHeaders(demographicsTable) + + for (rankLabel in RankLabels.values()) { + demographicsTable.row() + demographicsTable.add(rankLabel.name.toLabel()) + + for (category in RankingType.values()) { + val aliveMajorCivsSorted = majorCivs.filter{ it.isAlive() }.sortedByDescending { it.getStatForRanking(category) } + + fun addRankCivGroup(civ: CivilizationInfo) { // local function for reuse of getting and formatting civ stats + demographicsTable.add(getCivGroup(civ, ": " + civ.getStatForRanking(category).toString(), playerCivInfo)).fillX() + } + + @Suppress("NON_EXHAUSTIVE_WHEN") // RankLabels.Demographic treated above + when (rankLabel) { + RankLabels.Rank -> demographicsTable.add((aliveMajorCivsSorted.indexOfFirst { it == worldScreen.viewingCiv } + 1).toLabel()) + RankLabels.Value -> addRankCivGroup(worldScreen.viewingCiv) + RankLabels.Best -> addRankCivGroup(aliveMajorCivsSorted.firstOrNull()!!) + RankLabels.Average -> demographicsTable.add((aliveMajorCivsSorted.sumOf { it.getStatForRanking(category) } / aliveMajorCivsSorted.size).toLabel()) + RankLabels.Worst -> addRankCivGroup(aliveMajorCivsSorted.lastOrNull()!!) + } + } + } + + return demographicsTable + } + + private fun buildDemographicsHeaders(demographicsTable: Table) { + val demoLabel = Table().apply { defaults().pad(5f) } + + demoLabel.add("Demographic".toLabel()).row() + demoLabel.addSeparator().fillX() + demographicsTable.add(demoLabel) + + for (category in RankingType.values()) { + val headers = Table().apply { defaults().pad(5f) } + val textAndIcon = Table().apply { defaults() } + val columnImage = category.getImage() + if (columnImage != null) textAndIcon.add(columnImage).center().size(Constants.defaultFontSize.toFloat() * 0.75f).padRight(2f).padTop(-2f) + textAndIcon.add(category.name.replace('_', ' ').toLabel()).row() + headers.add(textAndIcon) + headers.addSeparator() + demographicsTable.add(headers) + } + } private fun buildRankingsTable(majorCivs: List): Table { val rankingsTable = Table().apply { defaults().pad(5f) }