mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-12 16:59:11 +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()
|
||||
scenarioButton.onClick {
|
||||
remove()
|
||||
// update players list from tileMap starting locations
|
||||
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()
|
||||
UncivGame.Current.setScreen(GameParametersScreen(mapEditorScreen))
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
var locked = false
|
||||
|
||||
|
||||
init {
|
||||
top()
|
||||
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()
|
||||
playerTypeTextbutton.onClick {
|
||||
if (locked) return@onClick
|
||||
// if (locked) return@onClick
|
||||
if (player.playerType == PlayerType.AI)
|
||||
player.playerType = PlayerType.Human
|
||||
else player.playerType = PlayerType.AI
|
||||
@ -138,7 +137,7 @@ class PlayerPickerTable(val previousScreen: PreviousScreenInterface, var gamePar
|
||||
nationTable.add(player.chosenCiv.toLabel()).pad(5f)
|
||||
nationTable.touchable = Touchable.enabled
|
||||
nationTable.onClick {
|
||||
popupNationPicker(player)
|
||||
if (!locked) popupNationPicker(player)
|
||||
}
|
||||
return nationTable
|
||||
}
|
||||
|
Reference in New Issue
Block a user