From 6af4e20d3e927458b753b8a882ebbc1f3937a66b Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 24 Sep 2018 22:10:18 +0300 Subject: [PATCH] Separated tutorials to a separate file --- .../unciv/ui/utils/CameraStageBaseScreen.kt | 69 +-------------- core/src/com/unciv/ui/utils/Tutorials.kt | 86 +++++++++++++++++++ .../com/unciv/ui/worldscreen/WorldScreen.kt | 10 +-- 3 files changed, 91 insertions(+), 74 deletions(-) create mode 100644 core/src/com/unciv/ui/utils/Tutorials.kt diff --git a/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt b/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt index 1efb09c4a2..e9be8e3096 100644 --- a/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt +++ b/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt @@ -13,24 +13,15 @@ import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator import com.badlogic.gdx.scenes.scene2d.* import com.badlogic.gdx.scenes.scene2d.ui.* import com.badlogic.gdx.scenes.scene2d.utils.ClickListener -import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.viewport.ExtendViewport import com.unciv.UnCivGame import com.unciv.models.gamebasics.GameBasics -import java.util.* -import kotlin.collections.ArrayList -import kotlin.collections.HashMap - -class Tutorial(var name: String, var texts: ArrayList) {} open class CameraStageBaseScreen : Screen { var game: UnCivGame = UnCivGame.Current var stage: Stage - - private val tutorialTexts = mutableListOf() - - private var isTutorialShowing = false + var tutorials = Tutorials() init { val resolutions: List = game.settings.resolution.split("x").map { it.toInt().toFloat() } @@ -61,65 +52,10 @@ open class CameraStageBaseScreen : Screen { override fun dispose() {} - fun getTutorialsOfLanguage(language: String): HashMap> { - if(!Gdx.files.internal("jsons/Tutorials_$language.json").exists()) return hashMapOf() - - // ...Yes. Disgusting. I wish I didn't have to do this. - val x = LinkedHashMap>>() - val tutorials: LinkedHashMap>> = - GameBasics.getFromJson(x.javaClass, "Tutorials_$language") - val tutorialMap = HashMap>() - for (tut in tutorials){ - val list = ArrayList() - for(paragraph in tut.value) - list += paragraph.joinToString("\n") - tutorialMap[tut.key] = list - } - return tutorialMap - } - - fun getTutorials(name:String, language:String):ArrayList{ - val tutorialsOfLanguage = getTutorialsOfLanguage(language) - if(tutorialsOfLanguage.containsKey(name)) return tutorialsOfLanguage[name]!! - return getTutorialsOfLanguage("English")[name]!! - } - fun displayTutorials(name: String) { - if (UnCivGame.Current.settings.tutorialsShown.contains(name)) return - UnCivGame.Current.settings.tutorialsShown.add(name) - UnCivGame.Current.settings.save() - val texts = getTutorials(name,UnCivGame.Current.settings.language) - tutorialTexts.add(Tutorial(name,texts)) - if (!isTutorialShowing) displayTutorial() + tutorials.displayTutorials(name,stage) } - private fun displayTutorial() { - isTutorialShowing = true - val tutorialTable = Table().pad(10f) - tutorialTable.background = ImageGetter.getBackground(Color(0x101050cf)) - val currentTutorial = tutorialTexts[0] - val label = Label(currentTutorial.texts[0], skin) - label.setAlignment(Align.center) - if(Gdx.files.internal("ExtraImages/"+currentTutorial.name+".png").exists()) - tutorialTable.add(Table().apply { add(ImageGetter.getExternalImage(currentTutorial.name)) }).row() - tutorialTable.add(label).pad(10f).row() - val button = TextButton("Close".tr(), skin) - - currentTutorial.texts.removeAt(0) - if(currentTutorial.texts.isEmpty()) tutorialTexts.removeAt(0) - - button.onClick { - tutorialTable.remove() - if (!tutorialTexts.isEmpty()) - displayTutorial() - else - isTutorialShowing = false - } - tutorialTable.add(button).pad(10f) - tutorialTable.pack() - tutorialTable.center(stage) - stage.addActor(tutorialTable) - } @@ -254,3 +190,4 @@ fun Actor.onClick(function: () -> Unit) { } } ) } + diff --git a/core/src/com/unciv/ui/utils/Tutorials.kt b/core/src/com/unciv/ui/utils/Tutorials.kt new file mode 100644 index 0000000000..52115aaceb --- /dev/null +++ b/core/src/com/unciv/ui/utils/Tutorials.kt @@ -0,0 +1,86 @@ +package com.unciv.ui.utils + +import com.badlogic.gdx.Gdx +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.scenes.scene2d.Stage +import com.badlogic.gdx.scenes.scene2d.ui.Label +import com.badlogic.gdx.scenes.scene2d.ui.Table +import com.badlogic.gdx.scenes.scene2d.ui.TextButton +import com.badlogic.gdx.utils.Align +import com.badlogic.gdx.utils.Array +import com.unciv.UnCivGame +import com.unciv.models.gamebasics.GameBasics +import java.util.LinkedHashMap +import kotlin.collections.ArrayList +import kotlin.collections.HashMap +import kotlin.collections.set + +class Tutorials{ + + class Tutorial(var name: String, var texts: ArrayList) {} + + private val tutorialTexts = mutableListOf() + + private var isTutorialShowing = false + + + fun displayTutorials(name: String, stage: Stage) { + if (UnCivGame.Current.settings.tutorialsShown.contains(name)) return + UnCivGame.Current.settings.tutorialsShown.add(name) + UnCivGame.Current.settings.save() + val texts = getTutorials(name, UnCivGame.Current.settings.language) + tutorialTexts.add(Tutorial(name,texts)) + if (!isTutorialShowing) displayTutorial(stage) + } + + fun getTutorialsOfLanguage(language: String): HashMap> { + if(!Gdx.files.internal("jsons/Tutorials_$language.json").exists()) return hashMapOf() + + // ...Yes. Disgusting. I wish I didn't have to do this. + val x = LinkedHashMap>>() + val tutorials: LinkedHashMap>> = + GameBasics.getFromJson(x.javaClass, "Tutorials_$language") + val tutorialMap = HashMap>() + for (tut in tutorials){ + val list = ArrayList() + for(paragraph in tut.value) + list += paragraph.joinToString("\n") + tutorialMap[tut.key] = list + } + return tutorialMap + } + + fun getTutorials(name:String, language:String): ArrayList { + val tutorialsOfLanguage = getTutorialsOfLanguage(language) + if(tutorialsOfLanguage.containsKey(name)) return tutorialsOfLanguage[name]!! + return getTutorialsOfLanguage("English")[name]!! + } + + private fun displayTutorial(stage: Stage) { + isTutorialShowing = true + val tutorialTable = Table().pad(10f) + tutorialTable.background = ImageGetter.getBackground(Color(0x101050cf)) + val currentTutorial = tutorialTexts[0] + val label = Label(currentTutorial.texts[0], CameraStageBaseScreen.skin) + label.setAlignment(Align.center) + if(Gdx.files.internal("ExtraImages/"+currentTutorial.name+".png").exists()) + tutorialTable.add(Table().apply { add(ImageGetter.getExternalImage(currentTutorial.name)) }).row() + tutorialTable.add(label).pad(10f).row() + val button = TextButton("Close".tr(), CameraStageBaseScreen.skin) + + currentTutorial.texts.removeAt(0) + if(currentTutorial.texts.isEmpty()) tutorialTexts.removeAt(0) + + button.onClick { + tutorialTable.remove() + if (!tutorialTexts.isEmpty()) + displayTutorial(stage) + else + isTutorialShowing = false + } + tutorialTable.add(button).pad(10f) + tutorialTable.pack() + tutorialTable.center(stage) + stage.addActor(tutorialTable) + } +} \ No newline at end of file diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index 2ddbf4ba38..67c8f6c8f3 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -68,6 +68,8 @@ class WorldScreen : CameraStageBaseScreen() { stage.addActor(bottomBar) stage.addActor(unitActionsTable) + displayTutorials("NewGame") + displayTutorials("TileLayout") update() val tileToCenterOn: Vector2 = @@ -78,20 +80,12 @@ class WorldScreen : CameraStageBaseScreen() { } tileMapHolder.setCenterPosition(tileToCenterOn) createNextTurnButton() // needs civ table to be positioned - displayTutorials("NewGame") - displayTutorials("TileLayout") } fun update() { // many of the display functions will be called with the game clone and not the actual game, // because that's guaranteed to stay the exact same and so we won't get any concurrent modification exceptions -// val showImageTable = PopupTable() -// showImageTable.add(ImageGetter.getExternalImage("IconTutorial.png")).row() -// showImageTable.addButton("Close"){showImageTable.remove()} -// showImageTable.pack() -// stage.addActor(showImageTable) - val gameClone = gameInfo.clone() val cloneCivilization = gameClone.getPlayerCivilization()