mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-21 05:09:25 +07:00
New icon for "Load Scenario" (#2768)
* New icon for "Load Scenario" * Javadoc comments
This commit is contained in:

committed by
GitHub

parent
5753115c30
commit
aa677042dd
BIN
android/Images/OtherIcons/Scenario.png
Normal file
BIN
android/Images/OtherIcons/Scenario.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 448 KiB After Width: | Height: | Size: 455 KiB |
@ -132,7 +132,7 @@ class MainMenuScreen: CameraStageBaseScreen() {
|
|||||||
mapEditorPopup.add(loadMapButton).row()
|
mapEditorPopup.add(loadMapButton).row()
|
||||||
|
|
||||||
if (UncivGame.Current.scenarioDebugSwitch) {
|
if (UncivGame.Current.scenarioDebugSwitch) {
|
||||||
val loadScenarioButton = getTableBlock("Load scenario", "OtherIcons/Load") {
|
val loadScenarioButton = getTableBlock("Load scenario", "OtherIcons/Scenario") {
|
||||||
val loadScenarioScreen = LoadScenarioScreen(null)
|
val loadScenarioScreen = LoadScenarioScreen(null)
|
||||||
loadScenarioScreen.closeButton.isVisible = true
|
loadScenarioScreen.closeButton.isVisible = true
|
||||||
loadScenarioScreen.closeButton.onClick {
|
loadScenarioScreen.closeButton.onClick {
|
||||||
|
@ -8,7 +8,13 @@ import com.unciv.ui.newgamescreen.PlayerPickerTable
|
|||||||
import com.unciv.ui.newgamescreen.IPreviousScreen
|
import com.unciv.ui.newgamescreen.IPreviousScreen
|
||||||
import com.unciv.ui.pickerscreens.PickerScreen
|
import com.unciv.ui.pickerscreens.PickerScreen
|
||||||
import com.unciv.ui.utils.*
|
import com.unciv.ui.utils.*
|
||||||
|
/**
|
||||||
|
* This [Screen] is used for editing game parameters when scenario is edited/created in map editor.
|
||||||
|
* Implements [PreviousScreenInterface] for compatibility with [PlayerPickerTable], [GameOptionsTable]
|
||||||
|
* Uses [PlayerPickerTable] and [GameOptionsTable] to change local [gameSetupInfo]. Upon confirmation
|
||||||
|
* updates [mapEditorScreen] and switches to it.
|
||||||
|
* @param [mapEditorScreen] previous screen from map editor.
|
||||||
|
*/
|
||||||
class GameParametersScreen(var mapEditorScreen: MapEditorScreen): IPreviousScreen, PickerScreen() {
|
class GameParametersScreen(var mapEditorScreen: MapEditorScreen): IPreviousScreen, PickerScreen() {
|
||||||
|
|
||||||
override var gameSetupInfo: GameSetupInfo = mapEditorScreen.gameSetupInfo
|
override var gameSetupInfo: GameSetupInfo = mapEditorScreen.gameSetupInfo
|
||||||
|
@ -13,6 +13,11 @@ import com.unciv.ui.pickerscreens.PickerScreen
|
|||||||
import com.unciv.ui.saves.Gzip
|
import com.unciv.ui.saves.Gzip
|
||||||
import com.unciv.ui.utils.*
|
import com.unciv.ui.utils.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [PickerScreen] used for simple load/delete scenario. Called from [MapEditorScreen]
|
||||||
|
* and returns to that [Screen] type.
|
||||||
|
* @param previousMap [TileMap] to return when no scenario chosen
|
||||||
|
*/
|
||||||
class LoadScenarioScreen(previousMap: TileMap?): PickerScreen(){
|
class LoadScenarioScreen(previousMap: TileMap?): PickerScreen(){
|
||||||
var chosenScenario = ""
|
var chosenScenario = ""
|
||||||
val deleteScenarioButton = "Delete scenario".toTextButton()
|
val deleteScenarioButton = "Delete scenario".toTextButton()
|
||||||
|
@ -6,20 +6,16 @@ import com.unciv.ui.pickerscreens.PickerScreen
|
|||||||
import com.unciv.ui.utils.CameraStageBaseScreen
|
import com.unciv.ui.utils.CameraStageBaseScreen
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface to use as a previous screen for GameOptionsTable and PlayerPickerTable
|
* Interface to implement for all screens using [GameOptionsTable] and [PlayerPickerTable]
|
||||||
* It should be a child of the PickerScreen class during new game creation
|
* for universal usage of those two tables.
|
||||||
* or CameraBackStageScreen class for map editing
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
interface IPreviousScreen {
|
interface IPreviousScreen {
|
||||||
val gameSetupInfo: GameSetupInfo
|
val gameSetupInfo: GameSetupInfo
|
||||||
var stage: Stage
|
var stage: Stage
|
||||||
|
|
||||||
// added for compatibility with NewGameScreen: PickerScreen
|
/**
|
||||||
|
* Method added for compatibility with [PlayerPickerTable] which addresses
|
||||||
|
* [setRightSideButtonEnabled] method of previous screen
|
||||||
|
*/
|
||||||
fun setRightSideButtonEnabled(boolean: Boolean)
|
fun setRightSideButtonEnabled(boolean: Boolean)
|
||||||
}
|
}
|
||||||
|
|
||||||
//abstract class GameParametersPreviousScreen: PickerScreen() {
|
|
||||||
// abstract var gameSetupInfo: GameSetupInfo
|
|
||||||
// abstract val ruleset: Ruleset
|
|
||||||
//}
|
|
@ -20,11 +20,25 @@ import com.unciv.ui.mapeditor.GameParametersScreen
|
|||||||
import com.unciv.ui.utils.*
|
import com.unciv.ui.utils.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This [Table] is used to pick or edit players information for new game/scenario creation.
|
||||||
|
* Could be inserted to [NewGameScreen], [GameParametersScreen] or any other [Screen]
|
||||||
|
* which provides [GameSetupInfo] for ruleset and updates.
|
||||||
|
* Upon player changes updates property [gameParameters]. Also updates available nations when mod changes.
|
||||||
|
* In case it is used in map editor, as a part of [GameParametersScreen], additionally tries to
|
||||||
|
* update units/starting location on the [previousScreen] when player deleted or
|
||||||
|
* switched nation.
|
||||||
|
* @param [previousScreen] [Screen] where player table is inserted, should provide [GameSetupInfo] as property,
|
||||||
|
* updated when player added/deleted/changed
|
||||||
|
* @param [gameParameters] contains info about number of players.
|
||||||
|
*/
|
||||||
class PlayerPickerTable(val previousScreen: IPreviousScreen, var gameParameters: GameParameters): Table() {
|
class PlayerPickerTable(val previousScreen: IPreviousScreen, var gameParameters: GameParameters): Table() {
|
||||||
val playerListTable = Table()
|
val playerListTable = Table()
|
||||||
val nationsPopupWidth = previousScreen.stage.width / 2f
|
val nationsPopupWidth = previousScreen.stage.width / 2f
|
||||||
val civBlocksWidth = previousScreen.stage.width / 3
|
val civBlocksWidth = previousScreen.stage.width / 3
|
||||||
|
/** Locks player table for editing, used during new game creation with scenario.*/
|
||||||
var locked = false
|
var locked = false
|
||||||
|
/** No random civilization is available, used during map editing.*/
|
||||||
var noRandom = false
|
var noRandom = false
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@ -34,6 +48,11 @@ class PlayerPickerTable(val previousScreen: IPreviousScreen, var gameParameters:
|
|||||||
update()
|
update()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates view of main player table. Used when mod picked or player changed.
|
||||||
|
* Also sets desired civilization, that is preferable for human players.
|
||||||
|
* @param desiredCiv desired civilization name
|
||||||
|
*/
|
||||||
fun update(desiredCiv: String = "") {
|
fun update(desiredCiv: String = "") {
|
||||||
playerListTable.clear()
|
playerListTable.clear()
|
||||||
val ruleset = previousScreen.gameSetupInfo.ruleset // the mod picking changes this ruleset
|
val ruleset = previousScreen.gameSetupInfo.ruleset // the mod picking changes this ruleset
|
||||||
@ -60,6 +79,10 @@ class PlayerPickerTable(val previousScreen: IPreviousScreen, var gameParameters:
|
|||||||
previousScreen.setRightSideButtonEnabled(gameParameters.players.size > 1)
|
previousScreen.setRightSideButtonEnabled(gameParameters.players.size > 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If new mod removes nations already chosen by some player
|
||||||
|
* sets first civilization available in the ruleset
|
||||||
|
*/
|
||||||
private fun reassignRemovedModReferences() {
|
private fun reassignRemovedModReferences() {
|
||||||
for (player in gameParameters.players) {
|
for (player in gameParameters.players) {
|
||||||
if (!previousScreen.gameSetupInfo.ruleset.nations.containsKey(player.chosenCiv))
|
if (!previousScreen.gameSetupInfo.ruleset.nations.containsKey(player.chosenCiv))
|
||||||
@ -67,6 +90,10 @@ class PlayerPickerTable(val previousScreen: IPreviousScreen, var gameParameters:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assigns desired civilization for human players with 'random' choice
|
||||||
|
* @param desiredCiv string containing desired civilization name
|
||||||
|
*/
|
||||||
private fun assignDesiredCiv(desiredCiv: String) {
|
private fun assignDesiredCiv(desiredCiv: String) {
|
||||||
// No auto-select if desiredCiv already used
|
// No auto-select if desiredCiv already used
|
||||||
if (gameParameters.players.any { it.chosenCiv == desiredCiv }) return
|
if (gameParameters.players.any { it.chosenCiv == desiredCiv }) return
|
||||||
@ -74,6 +101,13 @@ class PlayerPickerTable(val previousScreen: IPreviousScreen, var gameParameters:
|
|||||||
gameParameters.players.firstOrNull { it.chosenCiv == "Random" && it.playerType == PlayerType.Human }?.chosenCiv = desiredCiv
|
gameParameters.players.firstOrNull { it.chosenCiv == "Random" && it.playerType == PlayerType.Human }?.chosenCiv = desiredCiv
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates [Table] for single player containing clickable
|
||||||
|
* player type button ("AI" or "Human"), nation [Table]
|
||||||
|
* and "-" remove player button.*
|
||||||
|
* @param player for which [Table] is generated
|
||||||
|
* @return [Table] containing the all the elements
|
||||||
|
*/
|
||||||
fun getPlayerTable(player: Player): Table {
|
fun getPlayerTable(player: Player): Table {
|
||||||
val playerTable = Table()
|
val playerTable = Table()
|
||||||
playerTable.pad(5f)
|
playerTable.pad(5f)
|
||||||
@ -138,6 +172,12 @@ class PlayerPickerTable(val previousScreen: IPreviousScreen, var gameParameters:
|
|||||||
return playerTable
|
return playerTable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates clickable icon and nation name for some [Player]
|
||||||
|
* as a [Table]. Clicking creates [popupNationPicker] to choose new nation.
|
||||||
|
* @param player [Player] for which generated
|
||||||
|
* @return [Table] containing nation icon and name
|
||||||
|
*/
|
||||||
private fun getNationTable(player: Player): Table {
|
private fun getNationTable(player: Player): Table {
|
||||||
val nationTable = Table()
|
val nationTable = Table()
|
||||||
val nationImage = if (player.chosenCiv == "Random") "?".toLabel(Color.WHITE, 25)
|
val nationImage = if (player.chosenCiv == "Random") "?".toLabel(Color.WHITE, 25)
|
||||||
@ -154,6 +194,12 @@ class PlayerPickerTable(val previousScreen: IPreviousScreen, var gameParameters:
|
|||||||
return nationTable
|
return nationTable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens Nation picking popup with all nations,
|
||||||
|
* currently available for [player] to choose, depending on current
|
||||||
|
* ruleset and other players nation choice.
|
||||||
|
* @param player current player
|
||||||
|
*/
|
||||||
private fun popupNationPicker(player: Player) {
|
private fun popupNationPicker(player: Player) {
|
||||||
val nationsPopup = Popup(previousScreen as CameraStageBaseScreen)
|
val nationsPopup = Popup(previousScreen as CameraStageBaseScreen)
|
||||||
val nationListTable = Table()
|
val nationListTable = Table()
|
||||||
@ -206,6 +252,11 @@ class PlayerPickerTable(val previousScreen: IPreviousScreen, var gameParameters:
|
|||||||
update()
|
update()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns list of available civilization for all players, according
|
||||||
|
* to current ruleset, with exeption of city states nations and barbarians
|
||||||
|
* @return [ArrayList] of available [Nation]s
|
||||||
|
*/
|
||||||
private fun getAvailablePlayerCivs(): ArrayList<Nation> {
|
private fun getAvailablePlayerCivs(): ArrayList<Nation> {
|
||||||
var nations = ArrayList<Nation>()
|
var nations = ArrayList<Nation>()
|
||||||
for (nation in previousScreen.gameSetupInfo.ruleset.nations.values
|
for (nation in previousScreen.gameSetupInfo.ruleset.nations.values
|
||||||
|
Reference in New Issue
Block a user