diff --git a/core/src/com/unciv/ui/newgamescreen/NewGameScreen.kt b/core/src/com/unciv/ui/newgamescreen/NewGameScreen.kt index f0a26028..6b9f245e 100644 --- a/core/src/com/unciv/ui/newgamescreen/NewGameScreen.kt +++ b/core/src/com/unciv/ui/newgamescreen/NewGameScreen.kt @@ -30,7 +30,7 @@ class NewGameScreen: PickerScreen(){ scrollPane.setScrollingDisabled(true,true) val playerPickerTable = PlayerPickerTable(this, newGameParameters) - val newGameScreenOptionsTable = NewGameScreenOptionsTable(this) { playerPickerTable.update() } + val newGameScreenOptionsTable = NewGameScreenOptionsTable(this) { desiredCiv: String -> playerPickerTable.update(desiredCiv) } topTable.add(ScrollPane(newGameScreenOptionsTable).apply{setOverscroll(false,false)}).height(topTable.parent.height) topTable.add(playerPickerTable).height(topTable.parent.height) topTable.pack() diff --git a/core/src/com/unciv/ui/newgamescreen/NewGameScreenOptionsTable.kt b/core/src/com/unciv/ui/newgamescreen/NewGameScreenOptionsTable.kt index 19420c32..29d98f08 100644 --- a/core/src/com/unciv/ui/newgamescreen/NewGameScreenOptionsTable.kt +++ b/core/src/com/unciv/ui/newgamescreen/NewGameScreenOptionsTable.kt @@ -18,7 +18,7 @@ import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.toLabel -class NewGameScreenOptionsTable(val newGameScreen: NewGameScreen, val updatePlayerPickerTable:()->Unit) +class NewGameScreenOptionsTable(val newGameScreen: NewGameScreen, val updatePlayerPickerTable:(desiredCiv:String)->Unit) : Table(CameraStageBaseScreen.skin) { val newGameParameters = newGameScreen.newGameParameters val mapParameters = newGameScreen.mapParameters @@ -134,7 +134,7 @@ class NewGameScreenOptionsTable(val newGameScreen: NewGameScreen, val updatePlay isOnlineMultiplayerCheckbox.addListener(object : ChangeListener() { override fun changed(event: ChangeEvent?, actor: Actor?) { newGameParameters.isOnlineMultiplayer = isOnlineMultiplayerCheckbox.isChecked - updatePlayerPickerTable() + updatePlayerPickerTable("") } }) add(isOnlineMultiplayerCheckbox).colspan(2).row() @@ -233,16 +233,24 @@ class NewGameScreenOptionsTable(val newGameScreen: NewGameScreen, val updatePlay ImageGetter.setTextureRegionDrawables() } - add("{Mods}:".tr()).colspan(2).row() + add("{Mods}:".tr().toLabel(fontSize = 24)).padTop(16f).colspan(2).row() val modCheckboxTable = Table().apply { defaults().pad(5f) } for(mod in modRulesets){ val checkBox = CheckBox(mod.name,CameraStageBaseScreen.skin) + if (mod.name in newGameParameters.mods) checkBox.isChecked = true checkBox.addListener(object : ChangeListener() { override fun changed(event: ChangeEvent?, actor: Actor?) { if(checkBox.isChecked) newGameParameters.mods.add(mod.name) else newGameParameters.mods.remove(mod.name) reloadMods() - updatePlayerPickerTable() + var desiredCiv = "" + if (checkBox.isChecked){ + val modNations = RulesetCache[mod.name]?.nations + if (modNations != null && modNations.size > 0) { + desiredCiv = modNations.keys.first() + } + } + updatePlayerPickerTable(desiredCiv) } }) modCheckboxTable.add(checkBox).row() diff --git a/core/src/com/unciv/ui/newgamescreen/PlayerPickerTable.kt b/core/src/com/unciv/ui/newgamescreen/PlayerPickerTable.kt index a39dcc88..87c93b0b 100644 --- a/core/src/com/unciv/ui/newgamescreen/PlayerPickerTable.kt +++ b/core/src/com/unciv/ui/newgamescreen/PlayerPickerTable.kt @@ -28,12 +28,14 @@ class PlayerPickerTable(val newGameScreen: NewGameScreen, val newGameParameters: update() } - fun update() { + fun update(desiredCiv: String = "") { playerListTable.clear() val gameBasics = newGameScreen.ruleset // the mod picking changes this ruleset + + reassignRemovedModReferences() + if (desiredCiv.isNotEmpty()) assignDesiredCiv(desiredCiv) + for (player in newGameParameters.players) { - if(!newGameScreen.ruleset.nations.containsKey(player.chosenCiv)) // this was in a mod we disabled - player.chosenCiv="Random" playerListTable.add(getPlayerTable(player, gameBasics)).pad(10f).row() } if(newGameParameters.players.count() < gameBasics.nations.values.count { it.isMajorCiv() }) { @@ -43,6 +45,20 @@ class PlayerPickerTable(val newGameScreen: NewGameScreen, val newGameParameters: newGameScreen.setNewGameButtonEnabled(newGameParameters.players.size>1) } + private fun reassignRemovedModReferences() { + for (player in newGameParameters.players) { + if (!newGameScreen.ruleset.nations.containsKey(player.chosenCiv)) + player.chosenCiv = "Random" + } + } + + private fun assignDesiredCiv(desiredCiv: String) { + // No auto-select if desiredCiv already used + if (newGameParameters.players.any {it.chosenCiv == desiredCiv}) return + // Do auto-select, silently no-op if no suitable slot (human with 'random' choice) + newGameParameters.players.firstOrNull { it.chosenCiv == "Random" && it.playerType==PlayerType.Human }?.chosenCiv = desiredCiv + } + fun getPlayerTable(player: Player, ruleset: Ruleset): Table { val playerTable = Table() playerTable.pad(5f)