diff --git a/core/src/com/unciv/models/metadata/GameParameters.kt b/core/src/com/unciv/models/metadata/GameParameters.kt index 9f82cfb169..c73201680c 100644 --- a/core/src/com/unciv/models/metadata/GameParameters.kt +++ b/core/src/com/unciv/models/metadata/GameParameters.kt @@ -40,6 +40,7 @@ class GameParameters { // Default values are the default new game parameters.victoryTypes = ArrayList(victoryTypes) parameters.startingEra = startingEra parameters.isOnlineMultiplayer = isOnlineMultiplayer + parameters.baseRuleset = baseRuleset parameters.mods = LinkedHashSet(mods) return parameters } diff --git a/core/src/com/unciv/ui/newgamescreen/GameOptionsTable.kt b/core/src/com/unciv/ui/newgamescreen/GameOptionsTable.kt index 30e0a06c15..5c87c2755e 100644 --- a/core/src/com/unciv/ui/newgamescreen/GameOptionsTable.kt +++ b/core/src/com/unciv/ui/newgamescreen/GameOptionsTable.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.CheckBox import com.badlogic.gdx.scenes.scene2d.ui.SelectBox import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.utils.Array +import com.unciv.models.metadata.BaseRuleset import com.unciv.models.metadata.GameSpeed import com.unciv.models.ruleset.RulesetCache import com.unciv.models.ruleset.VictoryType @@ -32,6 +33,7 @@ class GameOptionsTable(previousScreen: IPreviousScreen, val updatePlayerPickerTa add("Game Options".toLabel(fontSize = 24)).padTop(0f).padBottom(20f).colspan(2).row() add(Table().apply { defaults().pad(5f) + //addBaseRulesetSelectBox() addDifficultySelectBox() addGameSpeedSelectBox() addEraSelectBox() @@ -107,6 +109,14 @@ class GameOptionsTable(previousScreen: IPreviousScreen, val updatePlayerPickerTa { gameParameters.difficulty = it } } + private fun Table.addBaseRulesetSelectBox() { + addSelectBox("{Base Ruleset}:", BaseRuleset.values().map { it.fullName }, gameParameters.baseRuleset.fullName) + { + gameParameters.baseRuleset = BaseRuleset.values().first { br -> br.fullName == it } + reloadRuleset() + } + } + private fun Table.addGameSpeedSelectBox() { addSelectBox("{Game Speed}:", GameSpeed.values().map { it.name }, gameParameters.gameSpeed.name) { gameParameters.gameSpeed = GameSpeed.valueOf(it) } @@ -145,21 +155,21 @@ class GameOptionsTable(previousScreen: IPreviousScreen, val updatePlayerPickerTa add(victoryConditionsTable).colspan(2).row() } + fun reloadRuleset() { + ruleset.clear() + val newRuleset = RulesetCache.getComplexRuleset(gameParameters) + ruleset.add(newRuleset) + ruleset.mods += gameParameters.mods + ruleset.modOptions = newRuleset.modOptions + + ImageGetter.ruleset = ruleset + ImageGetter.setTextureRegionDrawables() + } fun Table.addModCheckboxes() { val modRulesets = RulesetCache.filter { it.key != "" }.values if (modRulesets.isEmpty()) return - fun reloadMods() { - ruleset.clear() - val newRuleset = RulesetCache.getComplexRuleset(gameParameters) - ruleset.add(newRuleset) - ruleset.mods += gameParameters.mods - ruleset.modOptions = newRuleset.modOptions - - ImageGetter.ruleset = ruleset - ImageGetter.setTextureRegionDrawables() - } add("Mods:".toLabel(fontSize = 24)).padTop(16f).colspan(2).row() val modCheckboxTable = Table().apply { defaults().pad(5f) } @@ -170,7 +180,7 @@ class GameOptionsTable(previousScreen: IPreviousScreen, val updatePlayerPickerTa checkBox.onChange { if (checkBox.isChecked) gameParameters.mods.add(mod.name) else gameParameters.mods.remove(mod.name) - reloadMods() + reloadRuleset() var desiredCiv = "" if (checkBox.isChecked) { val modNations = RulesetCache[mod.name]?.nations diff --git a/core/src/com/unciv/ui/newgamescreen/NewGameScreen.kt b/core/src/com/unciv/ui/newgamescreen/NewGameScreen.kt index 6d605eac6c..bad8f3d6d1 100644 --- a/core/src/com/unciv/ui/newgamescreen/NewGameScreen.kt +++ b/core/src/com/unciv/ui/newgamescreen/NewGameScreen.kt @@ -31,8 +31,9 @@ class GameSetupInfo(var gameId:String, var gameParameters: GameParameters, var m class NewGameScreen(previousScreen:CameraStageBaseScreen, _gameSetupInfo: GameSetupInfo?=null): IPreviousScreen, PickerScreen() { override val gameSetupInfo = _gameSetupInfo ?: GameSetupInfo() override val ruleset = RulesetCache.getComplexRuleset(gameSetupInfo.gameParameters) - var playerPickerTable = PlayerPickerTable(this, gameSetupInfo.gameParameters) var newGameOptionsTable = GameOptionsTable(this) { desiredCiv: String -> playerPickerTable.update(desiredCiv) } + // Has to be defined before the mapOptionsTable, since the mapOptionsTable refers to it on init + var playerPickerTable = PlayerPickerTable(this, gameSetupInfo.gameParameters) var mapOptionsTable = MapOptionsTable(this) @@ -40,13 +41,14 @@ class NewGameScreen(previousScreen:CameraStageBaseScreen, _gameSetupInfo: GameSe setDefaultCloseAction(previousScreen) scrollPane.setScrollingDisabled(true, true) + topTable.add(ScrollPane(newGameOptionsTable).apply { setOverscroll(false, false) }) + .maxHeight(topTable.parent.height).width(stage.width / 3).padTop(20f).top() + topTable.addSeparatorVertical() topTable.add(ScrollPane(mapOptionsTable).apply { setOverscroll(false, false) }) .maxHeight(topTable.parent.height).width(stage.width / 3).padTop(20f).top() topTable.addSeparatorVertical() topTable.add(playerPickerTable).maxHeight(topTable.parent.height).width(stage.width / 3).padTop(20f).top() - topTable.addSeparatorVertical() - topTable.add(ScrollPane(newGameOptionsTable).apply { setOverscroll(false, false) }) - .maxHeight(topTable.parent.height).width(stage.width / 3).padTop(20f).top() + topTable.pack() topTable.setFillParent(true)