From d184a829a2cb88e69baed7896b7a6141c5cf5939 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 21 Mar 2021 20:58:18 +0200 Subject: [PATCH] Removed usages of global UncivGame.gameInfo, where more local usage is possible --- core/src/com/unciv/UncivGame.kt | 4 ++-- core/src/com/unciv/ui/saves/SaveGameScreen.kt | 13 +++++++------ core/src/com/unciv/ui/trade/DiplomacyScreen.kt | 2 +- .../com/unciv/ui/victoryscreen/VictoryScreen.kt | 17 +++++++++-------- .../unciv/ui/worldscreen/PlayerReadyScreen.kt | 5 +++-- .../src/com/unciv/ui/worldscreen/WorldScreen.kt | 7 +++---- .../ui/worldscreen/mainmenu/OptionsPopup.kt | 2 +- .../mainmenu/WorldScreenMenuPopup.kt | 2 +- 8 files changed, 27 insertions(+), 25 deletions(-) diff --git a/core/src/com/unciv/UncivGame.kt b/core/src/com/unciv/UncivGame.kt index 8ab8e8962b..53cba53dbc 100644 --- a/core/src/com/unciv/UncivGame.kt +++ b/core/src/com/unciv/UncivGame.kt @@ -133,9 +133,9 @@ class UncivGame(parameters: UncivGameParameters) : Game() { ImageGetter.setNewRuleset(gameInfo.ruleSet) Gdx.input.inputProcessor = null // Since we will set the world screen when we're ready, if (gameInfo.civilizations.count { it.playerType == PlayerType.Human } > 1 && !gameInfo.gameParameters.isOnlineMultiplayer) - setScreen(PlayerReadyScreen(gameInfo.getPlayerToViewAs())) + setScreen(PlayerReadyScreen(gameInfo, gameInfo.getPlayerToViewAs())) else { - worldScreen = WorldScreen(gameInfo.getPlayerToViewAs()) + worldScreen = WorldScreen(gameInfo, gameInfo.getPlayerToViewAs()) setWorldScreen() } } diff --git a/core/src/com/unciv/ui/saves/SaveGameScreen.kt b/core/src/com/unciv/ui/saves/SaveGameScreen.kt index 08da8f5551..5676a409cb 100644 --- a/core/src/com/unciv/ui/saves/SaveGameScreen.kt +++ b/core/src/com/unciv/ui/saves/SaveGameScreen.kt @@ -7,6 +7,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.TextField import com.badlogic.gdx.utils.Json import com.unciv.UncivGame +import com.unciv.logic.GameInfo import com.unciv.logic.GameSaver import com.unciv.models.translations.tr import com.unciv.ui.pickerscreens.PickerScreen @@ -16,7 +17,7 @@ import kotlin.concurrent.thread import com.unciv.ui.utils.AutoScrollPane as ScrollPane -class SaveGameScreen : PickerScreen() { +class SaveGameScreen(val gameInfo: GameInfo) : PickerScreen() { val gameNameTextField = TextField("", skin) val currentSaves = Table() @@ -29,7 +30,7 @@ class SaveGameScreen : PickerScreen() { topTable.add(ScrollPane(currentSaves)).height(stage.height * 2 / 3) val newSave = Table() - val defaultSaveName = game.gameInfo.currentPlayer + " - " + game.gameInfo.turns + " turns" + val defaultSaveName = gameInfo.currentPlayer + " - " + gameInfo.turns + " turns" gameNameTextField.text = defaultSaveName newSave.add("Saved game name".toLabel()).row() @@ -37,7 +38,7 @@ class SaveGameScreen : PickerScreen() { val copyJsonButton = "Copy to clipboard".toTextButton() copyJsonButton.onClick { - val json = Json().toJson(game.gameInfo) + val json = Json().toJson(gameInfo) val base64Gzip = Gzip.zip(json) Gdx.app.clipboard.contents = base64Gzip } @@ -51,9 +52,9 @@ class SaveGameScreen : PickerScreen() { saveToCustomLocation.setText("Saving...".tr()) saveToCustomLocation.disable() thread(name = "SaveGame") { - GameSaver.saveGameToCustomLocation(UncivGame.Current.gameInfo, gameNameTextField.text) { e -> + GameSaver.saveGameToCustomLocation(gameInfo, gameNameTextField.text) { e -> if (e == null) { - Gdx.app.postRunnable { UncivGame.Current.setWorldScreen() } + Gdx.app.postRunnable { game.setWorldScreen() } } else if (e !is CancellationException) { errorLabel.setText("Could not save game to custom location".tr()) e.printStackTrace() @@ -89,7 +90,7 @@ class SaveGameScreen : PickerScreen() { private fun saveGame() { rightSideButton.setText("Saving...".tr()) thread(name = "SaveGame") { - GameSaver.saveGame(UncivGame.Current.gameInfo, gameNameTextField.text) { + GameSaver.saveGame(gameInfo, gameNameTextField.text) { Gdx.app.postRunnable { if (it != null) ToastPopup("Could not save game!", this) else UncivGame.Current.setWorldScreen() diff --git a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt index 1e3659bb64..9496ca9ed2 100644 --- a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt +++ b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt @@ -54,7 +54,7 @@ class DiplomacyScreen(val viewingCiv:CivilizationInfo):CameraStageBaseScreen() { private fun updateLeftSideTable() { leftSideTable.clear() - for (civ in UncivGame.Current.gameInfo.civilizations + for (civ in viewingCiv.gameInfo.civilizations .filterNot { it.isDefeated() || it == viewingCiv || it.isBarbarian() || it.isSpectator() }) { if (!viewingCiv.knows(civ)) continue diff --git a/core/src/com/unciv/ui/victoryscreen/VictoryScreen.kt b/core/src/com/unciv/ui/victoryscreen/VictoryScreen.kt index 4ca7a56028..0224c73b7d 100644 --- a/core/src/com/unciv/ui/victoryscreen/VictoryScreen.kt +++ b/core/src/com/unciv/ui/victoryscreen/VictoryScreen.kt @@ -16,9 +16,10 @@ import com.unciv.ui.utils.* import com.unciv.ui.worldscreen.WorldScreen class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() { - + + val gameInfo = worldScreen.gameInfo private val playerCivInfo = worldScreen.viewingCiv - val victoryTypes = playerCivInfo.gameInfo.gameParameters.victoryTypes + val victoryTypes = gameInfo.gameParameters.victoryTypes private val scientificVictoryEnabled = victoryTypes.contains(VictoryType.Scientific) private val culturalVictoryEnabled = victoryTypes.contains(VictoryType.Cultural) private val dominationVictoryEnabled = victoryTypes.contains(VictoryType.Domination) @@ -27,7 +28,7 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() { private val contentsTable = Table() init { - val difficultyLabel = ("{Difficulty}: {${worldScreen.gameInfo.difficulty}}").toLabel() + val difficultyLabel = ("{Difficulty}: {${gameInfo.difficulty}}").toLabel() difficultyLabel.setPosition(10f, stage.height - 10, Align.topLeft) stage.addActor(difficultyLabel) @@ -61,7 +62,7 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() { VictoryType.Neutral -> wonOrLost("You have won!") } } - for (civ in game.gameInfo.civilizations.filter { it.isMajorCiv() && it != playerCivInfo }) { + for (civ in gameInfo.civilizations.filter { it.isMajorCiv() && it != playerCivInfo }) { val civVictoryType = civ.victoryManager.hasWonVictoryType() if (civVictoryType != null) { someoneHasWon = true @@ -100,12 +101,12 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() { rightSideButton.isVisible = true rightSideButton.enable() rightSideButton.onClick { - game.setScreen(NewGameScreen(this, GameSetupInfo(worldScreen.gameInfo))) + game.setScreen(NewGameScreen(this, GameSetupInfo(gameInfo))) } closeButton.setText("One more turn...!".tr()) closeButton.onClick { - playerCivInfo.gameInfo.oneMoreTurnMode = true + gameInfo.oneMoreTurnMode = true game.setWorldScreen() } } @@ -177,7 +178,7 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() { private fun setGlobalVictoryTable() { - val majorCivs = game.gameInfo.civilizations.filter { it.isMajorCiv() } + val majorCivs = gameInfo.civilizations.filter { it.isMajorCiv() } val globalVictoryTable = Table().apply { defaults().pad(10f) } if (scientificVictoryEnabled) globalVictoryTable.add(getGlobalScientificVictoryColumn(majorCivs)) @@ -241,7 +242,7 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() { } private fun setCivRankingsTable() { - val majorCivs = game.gameInfo.civilizations.filter { it.isMajorCiv() } + val majorCivs = gameInfo.civilizations.filter { it.isMajorCiv() } val civRankingsTable = Table().apply { defaults().pad(5f) } for (category in RankingType.values()) { diff --git a/core/src/com/unciv/ui/worldscreen/PlayerReadyScreen.kt b/core/src/com/unciv/ui/worldscreen/PlayerReadyScreen.kt index f0df787e28..d735b26fd3 100644 --- a/core/src/com/unciv/ui/worldscreen/PlayerReadyScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/PlayerReadyScreen.kt @@ -4,13 +4,14 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.scenes.scene2d.Touchable import com.badlogic.gdx.scenes.scene2d.ui.Table import com.unciv.UncivGame +import com.unciv.logic.GameInfo import com.unciv.logic.civilization.CivilizationInfo import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.onClick import com.unciv.ui.utils.toLabel -class PlayerReadyScreen(currentPlayerCiv: CivilizationInfo) : CameraStageBaseScreen(){ +class PlayerReadyScreen(gameInfo: GameInfo, currentPlayerCiv: CivilizationInfo) : CameraStageBaseScreen(){ init { val table= Table() table.touchable= Touchable.enabled @@ -20,7 +21,7 @@ class PlayerReadyScreen(currentPlayerCiv: CivilizationInfo) : CameraStageBaseScr table.onClick { Gdx.app.postRunnable { // To avoid ANRs on Android when the creation of the worldscreen takes more than 500ms - UncivGame.Current.worldScreen = WorldScreen(currentPlayerCiv) + UncivGame.Current.worldScreen = WorldScreen(gameInfo, currentPlayerCiv) UncivGame.Current.setWorldScreen() } } diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index 78fcfd8b87..ef4d1bd5ab 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -40,8 +40,7 @@ import java.util.* import kotlin.concurrent.thread import kotlin.concurrent.timer -class WorldScreen(val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() { - val gameInfo = game.gameInfo +class WorldScreen(val gameInfo: GameInfo, val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() { var isPlayersTurn = viewingCiv == gameInfo.currentPlayerCiv // todo this should be updated when passing turns var selectedCiv = viewingCiv // Selected civilization, used in spectator and replay mode, equals viewingCiv in ordinary games @@ -485,7 +484,7 @@ class WorldScreen(val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() { fun createNewWorldScreen(gameInfo:GameInfo) { game.gameInfo = gameInfo - val newWorldScreen = WorldScreen(gameInfo.getPlayerToViewAs()) + val newWorldScreen = WorldScreen(gameInfo, gameInfo.getPlayerToViewAs()) newWorldScreen.mapHolder.scrollX = mapHolder.scrollX newWorldScreen.mapHolder.scrollY = mapHolder.scrollY newWorldScreen.mapHolder.scaleX = mapHolder.scaleX @@ -541,7 +540,7 @@ class WorldScreen(val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() { if (gameInfoClone.currentPlayerCiv.civName != viewingCiv.civName && !gameInfoClone.gameParameters.isOnlineMultiplayer) - game.setScreen(PlayerReadyScreen(gameInfoClone.getCurrentPlayerCivilization())) + game.setScreen(PlayerReadyScreen(gameInfoClone, gameInfoClone.getCurrentPlayerCivilization())) else { createNewWorldScreen(gameInfoClone) } diff --git a/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt b/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt index 4a9fd28d7f..e900c0a3f2 100644 --- a/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt @@ -68,7 +68,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr private fun reloadWorldAndOptions() { settings.save() if (previousScreen is WorldScreen) { - previousScreen.game.worldScreen = WorldScreen(previousScreen.viewingCiv) + previousScreen.game.worldScreen = WorldScreen(previousScreen.gameInfo, previousScreen.viewingCiv) previousScreen.game.setWorldScreen() } else if (previousScreen is MainMenuScreen) { previousScreen.game.setScreen(MainMenuScreen()) diff --git a/core/src/com/unciv/ui/worldscreen/mainmenu/WorldScreenMenuPopup.kt b/core/src/com/unciv/ui/worldscreen/mainmenu/WorldScreenMenuPopup.kt index 32728a7372..34fa4a9237 100644 --- a/core/src/com/unciv/ui/worldscreen/mainmenu/WorldScreenMenuPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/mainmenu/WorldScreenMenuPopup.kt @@ -26,7 +26,7 @@ class WorldScreenMenuPopup(val worldScreen: WorldScreen) : Popup(worldScreen) { init { addMenuButton("Main menu") { worldScreen.game.setScreen(MainMenuScreen()) } addMenuButton("Civilopedia") { worldScreen.game.setScreen(CivilopediaScreen(worldScreen.gameInfo.ruleSet)) } - addMenuButton("Save game") { worldScreen.game.setScreen(SaveGameScreen()) } + addMenuButton("Save game") { worldScreen.game.setScreen(SaveGameScreen(worldScreen.gameInfo)) } addMenuButton("Load game") { worldScreen.game.setScreen(LoadGameScreen(worldScreen)) } addMenuButton("Start new game") {