From 5a267e436cf4f1cbbf1652c39ec27cc73fc4c3e1 Mon Sep 17 00:00:00 2001 From: Gualdimar Date: Thu, 2 Feb 2023 13:33:07 +0200 Subject: [PATCH] Add Reset tutorials button (#8536) * Add Reset tutorials button * Fix typo --- .../jsons/translations/template.properties | 3 +++ core/src/com/unciv/ui/options/DisplayTab.kt | 24 ++++++++++++++++++- core/src/com/unciv/ui/options/OptionsPopup.kt | 6 +++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index b27513d583..3a4953503e 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -712,6 +712,9 @@ Check for idle units = Auto Unit Cycle = Move units with a single tap = Show tutorials = +Reset tutorials = +Do you want to reset completed tutorials? = +Reset = Auto-assign city production = Auto-build roads = Automated workers replace improvements = diff --git a/core/src/com/unciv/ui/options/DisplayTab.kt b/core/src/com/unciv/ui/options/DisplayTab.kt index ec0106e913..eb84101dd0 100644 --- a/core/src/com/unciv/ui/options/DisplayTab.kt +++ b/core/src/com/unciv/ui/options/DisplayTab.kt @@ -13,12 +13,15 @@ import com.unciv.models.tilesets.TileSetCache import com.unciv.models.translations.tr import com.unciv.ui.images.ImageGetter import com.unciv.ui.newgamescreen.TranslatedSelectBox +import com.unciv.ui.popup.ConfirmPopup import com.unciv.ui.utils.BaseScreen import com.unciv.ui.utils.UncivSlider import com.unciv.ui.utils.WrappableLabel import com.unciv.ui.utils.extensions.brighten import com.unciv.ui.utils.extensions.onChange +import com.unciv.ui.utils.extensions.onClick import com.unciv.ui.utils.extensions.toLabel +import com.unciv.ui.utils.extensions.toTextButton private val resolutionArray = com.badlogic.gdx.utils.Array(arrayOf("750x500", "900x600", "1050x700", "1200x800", "1500x1000")) @@ -35,7 +38,8 @@ fun displayTab( optionsPopup.addCheckbox(this, "Show tile yields", settings.showTileYields, true) { settings.showTileYields = it } // JN optionsPopup.addCheckbox(this, "Show worked tiles", settings.showWorkedTiles, true) { settings.showWorkedTiles = it } 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 tutorials", settings.showTutorials, true, false) { settings.showTutorials = it } + addResetTutorials(this, settings) 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 } @@ -195,3 +199,21 @@ private fun addSkinSelectBox(table: Table, settings: GameSettings, selectBoxMinW onSkinChange() } } + +private fun addResetTutorials(table: Table, settings: GameSettings) { + val resetTutorialsButton = "Reset tutorials".toTextButton() + resetTutorialsButton.onClick { + ConfirmPopup( + table.stage, + "Do you want to reset completed tutorials?", + "Reset" + ) { + settings.tutorialsShown.clear() + settings.tutorialTasksCompleted.clear() + settings.save() + resetTutorialsButton.setText("Done!".tr()) + resetTutorialsButton.clearListeners() + }.open(true) + } + table.add(resetTutorialsButton).center().row() +} diff --git a/core/src/com/unciv/ui/options/OptionsPopup.kt b/core/src/com/unciv/ui/options/OptionsPopup.kt index c5e93f6c2f..17120855ac 100644 --- a/core/src/com/unciv/ui/options/OptionsPopup.kt +++ b/core/src/com/unciv/ui/options/OptionsPopup.kt @@ -157,20 +157,22 @@ class OptionsPopup( } } - fun addCheckbox(table: Table, text: String, initialState: Boolean, updateWorld: Boolean = false, action: ((Boolean) -> Unit)) { + fun addCheckbox(table: Table, text: String, initialState: Boolean, updateWorld: Boolean = false, newRow: Boolean = true, action: ((Boolean) -> Unit)) { val checkbox = text.toCheckBox(initialState) { action(it) settings.save() val worldScreen = UncivGame.Current.getWorldScreenIfActive() if (updateWorld && worldScreen != null) worldScreen.shouldUpdate = true } - table.add(checkbox).colspan(2).left().row() + if (newRow) table.add(checkbox).colspan(2).left().row() + else table.add(checkbox).left() } fun addCheckbox(table: Table, text: String, settingsProperty: KMutableProperty0, updateWorld: Boolean = false, + newRow: Boolean = true, action: (Boolean) -> Unit = {}) { addCheckbox(table, text, settingsProperty.get(), updateWorld) { action(it)