mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-13 17:28:57 +07:00
Merge branch 'master' of https://github.com/yairm210/Unciv
This commit is contained in:
83
core/src/com/unciv/ui/mapeditor/GameParametersScreen.kt
Normal file
83
core/src/com/unciv/ui/mapeditor/GameParametersScreen.kt
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
package com.unciv.ui.mapeditor
|
||||||
|
|
||||||
|
import com.badlogic.gdx.Gdx
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.ui.TextField
|
||||||
|
import com.unciv.logic.MapSaver
|
||||||
|
import com.unciv.logic.map.MapType
|
||||||
|
import com.unciv.logic.map.Scenario
|
||||||
|
import com.unciv.logic.map.TileMap
|
||||||
|
import com.unciv.models.metadata.Player
|
||||||
|
import com.unciv.ui.newgamescreen.GameOptionsTable
|
||||||
|
import com.unciv.ui.newgamescreen.GameSetupInfo
|
||||||
|
import com.unciv.ui.newgamescreen.PlayerPickerTable
|
||||||
|
import com.unciv.ui.newgamescreen.PreviousScreenInterface
|
||||||
|
import com.unciv.ui.pickerscreens.PickerScreen
|
||||||
|
import com.unciv.ui.utils.*
|
||||||
|
import kotlin.concurrent.thread
|
||||||
|
|
||||||
|
class GameParametersScreen(var mapEditorScreen: MapEditorScreen): PickerScreen() {
|
||||||
|
var playerPickerTable = PlayerPickerTable(mapEditorScreen, mapEditorScreen.gameSetupInfo.gameParameters)
|
||||||
|
var gameOptionsTable = GameOptionsTable(mapEditorScreen) { desiredCiv: String -> playerPickerTable.update(desiredCiv) }
|
||||||
|
|
||||||
|
init {
|
||||||
|
setDefaultCloseAction(mapEditorScreen)
|
||||||
|
scrollPane.setScrollingDisabled(true, true)
|
||||||
|
|
||||||
|
// update players list from tileMap starting locations
|
||||||
|
if (mapEditorScreen.scenario == null) {
|
||||||
|
mapEditorScreen.gameSetupInfo.gameParameters.players = getPlayersFromMap(mapEditorScreen.tileMap)
|
||||||
|
}
|
||||||
|
|
||||||
|
playerPickerTable.apply { locked = true }.update()
|
||||||
|
val scenarioNameEditor = TextField(mapEditorScreen.scenarioName, skin)
|
||||||
|
|
||||||
|
topTable.add(playerPickerTable)
|
||||||
|
topTable.addSeparatorVertical()
|
||||||
|
topTable.add(gameOptionsTable).row()
|
||||||
|
topTable.add(scenarioNameEditor)
|
||||||
|
rightSideButton.setText("Save scenario")
|
||||||
|
rightSideButton.onClick {
|
||||||
|
thread(name = "SaveScenario") {
|
||||||
|
try {
|
||||||
|
mapEditorScreen.tileMap.mapParameters.type = MapType.scenario
|
||||||
|
mapEditorScreen.scenario = Scenario(mapEditorScreen.tileMap, mapEditorScreen.gameSetupInfo.gameParameters)
|
||||||
|
mapEditorScreen.scenarioName = scenarioNameEditor.text
|
||||||
|
MapSaver.saveScenario(scenarioNameEditor.text, mapEditorScreen.scenario!!)
|
||||||
|
|
||||||
|
game.setScreen(mapEditorScreen)
|
||||||
|
Gdx.app.postRunnable {
|
||||||
|
ResponsePopup("Scenario saved", mapEditorScreen) // todo - add this text to translations
|
||||||
|
}
|
||||||
|
} catch (ex: Exception) {
|
||||||
|
ex.printStackTrace()
|
||||||
|
Gdx.app.postRunnable {
|
||||||
|
val cantLoadGamePopup = Popup(mapEditorScreen)
|
||||||
|
cantLoadGamePopup.addGoodSizedLabel("It looks like your scenario can't be saved!").row()
|
||||||
|
cantLoadGamePopup.addCloseButton()
|
||||||
|
cantLoadGamePopup.open(force = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rightSideButton.isEnabled = scenarioNameEditor.text.isNotEmpty()
|
||||||
|
scenarioNameEditor.addListener {
|
||||||
|
mapEditorScreen.scenarioName = scenarioNameEditor.text
|
||||||
|
rightSideButton.isEnabled = scenarioNameEditor.text.isNotEmpty()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getPlayersFromMap(tileMap: TileMap): ArrayList<Player> {
|
||||||
|
val tilesWithStartingLocations = tileMap.values
|
||||||
|
.filter { it.improvement != null && it.improvement!!.startsWith("StartingLocation ") }
|
||||||
|
var players = ArrayList<Player>()
|
||||||
|
for (tile in tilesWithStartingLocations) {
|
||||||
|
players.add(Player().apply{
|
||||||
|
chosenCiv = tile.improvement!!.removePrefix("StartingLocation ")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return players
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -161,30 +161,7 @@ class MapEditorMenuPopup(var mapEditorScreen: MapEditorScreen): Popup(mapEditorS
|
|||||||
add(scenarioButton).row()
|
add(scenarioButton).row()
|
||||||
scenarioButton.onClick {
|
scenarioButton.onClick {
|
||||||
remove()
|
remove()
|
||||||
// update players list from tileMap starting locations
|
UncivGame.Current.setScreen(GameParametersScreen(mapEditorScreen))
|
||||||
if (mapEditorScreen.scenario == null) {
|
|
||||||
mapEditorScreen.gameSetupInfo.gameParameters.players = getPlayersFromMap(mapEditorScreen.tileMap)
|
|
||||||
}
|
|
||||||
|
|
||||||
val gameParametersPopup = Popup(screen)
|
|
||||||
val playerPickerTable = PlayerPickerTable(mapEditorScreen, mapEditorScreen.gameSetupInfo.gameParameters)
|
|
||||||
val gameOptionsTable = GameOptionsTable(mapEditorScreen) { desiredCiv: String -> playerPickerTable.update(desiredCiv) }
|
|
||||||
val scenarioNameEditor = TextField(mapEditorScreen.scenarioName, skin)
|
|
||||||
|
|
||||||
gameParametersPopup.add(playerPickerTable)
|
|
||||||
gameParametersPopup.addSeparatorVertical()
|
|
||||||
gameParametersPopup.add(gameOptionsTable).row()
|
|
||||||
gameParametersPopup.add(scenarioNameEditor)
|
|
||||||
gameParametersPopup.addButton("Save scenario") {
|
|
||||||
mapEditorScreen.tileMap.mapParameters.type = MapType.scenario
|
|
||||||
mapEditorScreen.scenario = Scenario(mapEditorScreen.tileMap, mapEditorScreen.gameSetupInfo.gameParameters)
|
|
||||||
mapEditorScreen.scenarioName = scenarioNameEditor.text
|
|
||||||
MapSaver.saveScenario(scenarioNameEditor.text, mapEditorScreen.scenario!!)
|
|
||||||
ResponsePopup("Scenario saved", mapEditorScreen)
|
|
||||||
gameParametersPopup.close()
|
|
||||||
}.row()
|
|
||||||
gameParametersPopup.addCloseButton().row()
|
|
||||||
gameParametersPopup.open()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,16 +187,3 @@ class MapEditorMenuPopup(var mapEditorScreen: MapEditorScreen): Popup(mapEditorS
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun getPlayersFromMap(tileMap: TileMap): ArrayList<Player> {
|
|
||||||
val tilesWithStartingLocations = tileMap.values
|
|
||||||
.filter { it.improvement != null && it.improvement!!.startsWith("StartingLocation ") }
|
|
||||||
var players = ArrayList<Player>()
|
|
||||||
for (tile in tilesWithStartingLocations) {
|
|
||||||
players.add(Player().apply{
|
|
||||||
chosenCiv = tile.improvement!!.removePrefix("StartingLocation ")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return players
|
|
||||||
}
|
|
||||||
|
@ -24,7 +24,6 @@ class PlayerPickerTable(val previousScreen: PreviousScreenInterface, var gamePar
|
|||||||
val civBlocksWidth = previousScreen.stage.width / 3
|
val civBlocksWidth = previousScreen.stage.width / 3
|
||||||
var locked = false
|
var locked = false
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
top()
|
top()
|
||||||
add("Civilizations".toLabel(fontSize = 24)).padBottom(20f).row()
|
add("Civilizations".toLabel(fontSize = 24)).padBottom(20f).row()
|
||||||
@ -77,7 +76,7 @@ class PlayerPickerTable(val previousScreen: PreviousScreenInterface, var gamePar
|
|||||||
|
|
||||||
val playerTypeTextbutton = player.playerType.name.toTextButton()
|
val playerTypeTextbutton = player.playerType.name.toTextButton()
|
||||||
playerTypeTextbutton.onClick {
|
playerTypeTextbutton.onClick {
|
||||||
if (locked) return@onClick
|
// if (locked) return@onClick
|
||||||
if (player.playerType == PlayerType.AI)
|
if (player.playerType == PlayerType.AI)
|
||||||
player.playerType = PlayerType.Human
|
player.playerType = PlayerType.Human
|
||||||
else player.playerType = PlayerType.AI
|
else player.playerType = PlayerType.AI
|
||||||
@ -138,7 +137,7 @@ class PlayerPickerTable(val previousScreen: PreviousScreenInterface, var gamePar
|
|||||||
nationTable.add(player.chosenCiv.toLabel()).pad(5f)
|
nationTable.add(player.chosenCiv.toLabel()).pad(5f)
|
||||||
nationTable.touchable = Touchable.enabled
|
nationTable.touchable = Touchable.enabled
|
||||||
nationTable.onClick {
|
nationTable.onClick {
|
||||||
popupNationPicker(player)
|
if (!locked) popupNationPicker(player)
|
||||||
}
|
}
|
||||||
return nationTable
|
return nationTable
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user