Removed usages of global UncivGame.gameInfo, where more local usage is possible

This commit is contained in:
Yair Morgenstern 2021-03-21 20:58:18 +02:00
parent 4c1f5bb097
commit d184a829a2
8 changed files with 27 additions and 25 deletions

View File

@ -133,9 +133,9 @@ class UncivGame(parameters: UncivGameParameters) : Game() {
ImageGetter.setNewRuleset(gameInfo.ruleSet) ImageGetter.setNewRuleset(gameInfo.ruleSet)
Gdx.input.inputProcessor = null // Since we will set the world screen when we're ready, 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) if (gameInfo.civilizations.count { it.playerType == PlayerType.Human } > 1 && !gameInfo.gameParameters.isOnlineMultiplayer)
setScreen(PlayerReadyScreen(gameInfo.getPlayerToViewAs())) setScreen(PlayerReadyScreen(gameInfo, gameInfo.getPlayerToViewAs()))
else { else {
worldScreen = WorldScreen(gameInfo.getPlayerToViewAs()) worldScreen = WorldScreen(gameInfo, gameInfo.getPlayerToViewAs())
setWorldScreen() setWorldScreen()
} }
} }

View File

@ -7,6 +7,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.scenes.scene2d.ui.TextField import com.badlogic.gdx.scenes.scene2d.ui.TextField
import com.badlogic.gdx.utils.Json import com.badlogic.gdx.utils.Json
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.GameInfo
import com.unciv.logic.GameSaver import com.unciv.logic.GameSaver
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.pickerscreens.PickerScreen
@ -16,7 +17,7 @@ import kotlin.concurrent.thread
import com.unciv.ui.utils.AutoScrollPane as ScrollPane import com.unciv.ui.utils.AutoScrollPane as ScrollPane
class SaveGameScreen : PickerScreen() { class SaveGameScreen(val gameInfo: GameInfo) : PickerScreen() {
val gameNameTextField = TextField("", skin) val gameNameTextField = TextField("", skin)
val currentSaves = Table() val currentSaves = Table()
@ -29,7 +30,7 @@ class SaveGameScreen : PickerScreen() {
topTable.add(ScrollPane(currentSaves)).height(stage.height * 2 / 3) topTable.add(ScrollPane(currentSaves)).height(stage.height * 2 / 3)
val newSave = Table() val newSave = Table()
val defaultSaveName = game.gameInfo.currentPlayer + " - " + game.gameInfo.turns + " turns" val defaultSaveName = gameInfo.currentPlayer + " - " + gameInfo.turns + " turns"
gameNameTextField.text = defaultSaveName gameNameTextField.text = defaultSaveName
newSave.add("Saved game name".toLabel()).row() newSave.add("Saved game name".toLabel()).row()
@ -37,7 +38,7 @@ class SaveGameScreen : PickerScreen() {
val copyJsonButton = "Copy to clipboard".toTextButton() val copyJsonButton = "Copy to clipboard".toTextButton()
copyJsonButton.onClick { copyJsonButton.onClick {
val json = Json().toJson(game.gameInfo) val json = Json().toJson(gameInfo)
val base64Gzip = Gzip.zip(json) val base64Gzip = Gzip.zip(json)
Gdx.app.clipboard.contents = base64Gzip Gdx.app.clipboard.contents = base64Gzip
} }
@ -51,9 +52,9 @@ class SaveGameScreen : PickerScreen() {
saveToCustomLocation.setText("Saving...".tr()) saveToCustomLocation.setText("Saving...".tr())
saveToCustomLocation.disable() saveToCustomLocation.disable()
thread(name = "SaveGame") { thread(name = "SaveGame") {
GameSaver.saveGameToCustomLocation(UncivGame.Current.gameInfo, gameNameTextField.text) { e -> GameSaver.saveGameToCustomLocation(gameInfo, gameNameTextField.text) { e ->
if (e == null) { if (e == null) {
Gdx.app.postRunnable { UncivGame.Current.setWorldScreen() } Gdx.app.postRunnable { game.setWorldScreen() }
} else if (e !is CancellationException) { } else if (e !is CancellationException) {
errorLabel.setText("Could not save game to custom location".tr()) errorLabel.setText("Could not save game to custom location".tr())
e.printStackTrace() e.printStackTrace()
@ -89,7 +90,7 @@ class SaveGameScreen : PickerScreen() {
private fun saveGame() { private fun saveGame() {
rightSideButton.setText("Saving...".tr()) rightSideButton.setText("Saving...".tr())
thread(name = "SaveGame") { thread(name = "SaveGame") {
GameSaver.saveGame(UncivGame.Current.gameInfo, gameNameTextField.text) { GameSaver.saveGame(gameInfo, gameNameTextField.text) {
Gdx.app.postRunnable { Gdx.app.postRunnable {
if (it != null) ToastPopup("Could not save game!", this) if (it != null) ToastPopup("Could not save game!", this)
else UncivGame.Current.setWorldScreen() else UncivGame.Current.setWorldScreen()

View File

@ -54,7 +54,7 @@ class DiplomacyScreen(val viewingCiv:CivilizationInfo):CameraStageBaseScreen() {
private fun updateLeftSideTable() { private fun updateLeftSideTable() {
leftSideTable.clear() leftSideTable.clear()
for (civ in UncivGame.Current.gameInfo.civilizations for (civ in viewingCiv.gameInfo.civilizations
.filterNot { it.isDefeated() || it == viewingCiv || it.isBarbarian() || it.isSpectator() }) { .filterNot { it.isDefeated() || it == viewingCiv || it.isBarbarian() || it.isSpectator() }) {
if (!viewingCiv.knows(civ)) continue if (!viewingCiv.knows(civ)) continue

View File

@ -16,9 +16,10 @@ import com.unciv.ui.utils.*
import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.WorldScreen
class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() { class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() {
val gameInfo = worldScreen.gameInfo
private val playerCivInfo = worldScreen.viewingCiv 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 scientificVictoryEnabled = victoryTypes.contains(VictoryType.Scientific)
private val culturalVictoryEnabled = victoryTypes.contains(VictoryType.Cultural) private val culturalVictoryEnabled = victoryTypes.contains(VictoryType.Cultural)
private val dominationVictoryEnabled = victoryTypes.contains(VictoryType.Domination) private val dominationVictoryEnabled = victoryTypes.contains(VictoryType.Domination)
@ -27,7 +28,7 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() {
private val contentsTable = Table() private val contentsTable = Table()
init { init {
val difficultyLabel = ("{Difficulty}: {${worldScreen.gameInfo.difficulty}}").toLabel() val difficultyLabel = ("{Difficulty}: {${gameInfo.difficulty}}").toLabel()
difficultyLabel.setPosition(10f, stage.height - 10, Align.topLeft) difficultyLabel.setPosition(10f, stage.height - 10, Align.topLeft)
stage.addActor(difficultyLabel) stage.addActor(difficultyLabel)
@ -61,7 +62,7 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() {
VictoryType.Neutral -> wonOrLost("You have won!") 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() val civVictoryType = civ.victoryManager.hasWonVictoryType()
if (civVictoryType != null) { if (civVictoryType != null) {
someoneHasWon = true someoneHasWon = true
@ -100,12 +101,12 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() {
rightSideButton.isVisible = true rightSideButton.isVisible = true
rightSideButton.enable() rightSideButton.enable()
rightSideButton.onClick { rightSideButton.onClick {
game.setScreen(NewGameScreen(this, GameSetupInfo(worldScreen.gameInfo))) game.setScreen(NewGameScreen(this, GameSetupInfo(gameInfo)))
} }
closeButton.setText("One more turn...!".tr()) closeButton.setText("One more turn...!".tr())
closeButton.onClick { closeButton.onClick {
playerCivInfo.gameInfo.oneMoreTurnMode = true gameInfo.oneMoreTurnMode = true
game.setWorldScreen() game.setWorldScreen()
} }
} }
@ -177,7 +178,7 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() {
private fun setGlobalVictoryTable() { 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) } val globalVictoryTable = Table().apply { defaults().pad(10f) }
if (scientificVictoryEnabled) globalVictoryTable.add(getGlobalScientificVictoryColumn(majorCivs)) if (scientificVictoryEnabled) globalVictoryTable.add(getGlobalScientificVictoryColumn(majorCivs))
@ -241,7 +242,7 @@ class VictoryScreen(val worldScreen: WorldScreen) : PickerScreen() {
} }
private fun setCivRankingsTable() { 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) } val civRankingsTable = Table().apply { defaults().pad(5f) }
for (category in RankingType.values()) { for (category in RankingType.values()) {

View File

@ -4,13 +4,14 @@ import com.badlogic.gdx.Gdx
import com.badlogic.gdx.scenes.scene2d.Touchable import com.badlogic.gdx.scenes.scene2d.Touchable
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.GameInfo
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.utils.toLabel import com.unciv.ui.utils.toLabel
class PlayerReadyScreen(currentPlayerCiv: CivilizationInfo) : CameraStageBaseScreen(){ class PlayerReadyScreen(gameInfo: GameInfo, currentPlayerCiv: CivilizationInfo) : CameraStageBaseScreen(){
init { init {
val table= Table() val table= Table()
table.touchable= Touchable.enabled table.touchable= Touchable.enabled
@ -20,7 +21,7 @@ class PlayerReadyScreen(currentPlayerCiv: CivilizationInfo) : CameraStageBaseScr
table.onClick { table.onClick {
Gdx.app.postRunnable { // To avoid ANRs on Android when the creation of the worldscreen takes more than 500ms 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() UncivGame.Current.setWorldScreen()
} }
} }

View File

@ -40,8 +40,7 @@ import java.util.*
import kotlin.concurrent.thread import kotlin.concurrent.thread
import kotlin.concurrent.timer import kotlin.concurrent.timer
class WorldScreen(val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() { class WorldScreen(val gameInfo: GameInfo, val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() {
val gameInfo = game.gameInfo
var isPlayersTurn = viewingCiv == gameInfo.currentPlayerCiv // todo this should be updated when passing turns 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 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) { fun createNewWorldScreen(gameInfo:GameInfo) {
game.gameInfo = gameInfo game.gameInfo = gameInfo
val newWorldScreen = WorldScreen(gameInfo.getPlayerToViewAs()) val newWorldScreen = WorldScreen(gameInfo, gameInfo.getPlayerToViewAs())
newWorldScreen.mapHolder.scrollX = mapHolder.scrollX newWorldScreen.mapHolder.scrollX = mapHolder.scrollX
newWorldScreen.mapHolder.scrollY = mapHolder.scrollY newWorldScreen.mapHolder.scrollY = mapHolder.scrollY
newWorldScreen.mapHolder.scaleX = mapHolder.scaleX newWorldScreen.mapHolder.scaleX = mapHolder.scaleX
@ -541,7 +540,7 @@ class WorldScreen(val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() {
if (gameInfoClone.currentPlayerCiv.civName != viewingCiv.civName if (gameInfoClone.currentPlayerCiv.civName != viewingCiv.civName
&& !gameInfoClone.gameParameters.isOnlineMultiplayer) && !gameInfoClone.gameParameters.isOnlineMultiplayer)
game.setScreen(PlayerReadyScreen(gameInfoClone.getCurrentPlayerCivilization())) game.setScreen(PlayerReadyScreen(gameInfoClone, gameInfoClone.getCurrentPlayerCivilization()))
else { else {
createNewWorldScreen(gameInfoClone) createNewWorldScreen(gameInfoClone)
} }

View File

@ -68,7 +68,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
private fun reloadWorldAndOptions() { private fun reloadWorldAndOptions() {
settings.save() settings.save()
if (previousScreen is WorldScreen) { if (previousScreen is WorldScreen) {
previousScreen.game.worldScreen = WorldScreen(previousScreen.viewingCiv) previousScreen.game.worldScreen = WorldScreen(previousScreen.gameInfo, previousScreen.viewingCiv)
previousScreen.game.setWorldScreen() previousScreen.game.setWorldScreen()
} else if (previousScreen is MainMenuScreen) { } else if (previousScreen is MainMenuScreen) {
previousScreen.game.setScreen(MainMenuScreen()) previousScreen.game.setScreen(MainMenuScreen())

View File

@ -26,7 +26,7 @@ class WorldScreenMenuPopup(val worldScreen: WorldScreen) : Popup(worldScreen) {
init { init {
addMenuButton("Main menu") { worldScreen.game.setScreen(MainMenuScreen()) } addMenuButton("Main menu") { worldScreen.game.setScreen(MainMenuScreen()) }
addMenuButton("Civilopedia") { worldScreen.game.setScreen(CivilopediaScreen(worldScreen.gameInfo.ruleSet)) } 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("Load game") { worldScreen.game.setScreen(LoadGameScreen(worldScreen)) }
addMenuButton("Start new game") { addMenuButton("Start new game") {