Refactor maptype & resolve map setting issue (#8328)

* Add [MapGenerateMainType] to separate with [MapType].

* Add missing import.
This commit is contained in:
nacro711072 2023-01-08 01:27:02 +08:00 committed by GitHub
parent d01d9e31eb
commit 6263b196cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 52 additions and 36 deletions

View File

@ -25,7 +25,7 @@ enum class MapSize(val radius: Int, val width: Int, val height: Int) {
companion object {
/** Not a predefined [MapSize] enum value, but a String
* used in [MapParameters.mapSize] to indicate user-defined dimensions.
* Do not mistake for [MapType.custom]. */
* Do not mistake for [MapGeneratedMainType.custom]. */
const val custom = "Custom"
}
}
@ -128,6 +128,15 @@ object MapShape : IsPartOfGameInfoSerialization {
const val rectangular = "Rectangular"
}
object MapGeneratedMainType : IsPartOfGameInfoSerialization {
const val generated = "Generated"
// Randomly choose a generated map type
const val randomGenerated = "Random Generated"
// Non-generated maps
const val custom = "Custom"
}
object MapType : IsPartOfGameInfoSerialization {
const val default = "Default"
const val pangaea = "Pangaea"
@ -141,14 +150,6 @@ object MapType : IsPartOfGameInfoSerialization {
// Cellular automata style
const val smoothedRandom = "Smoothed Random"
const val generated = "Generated"
// Randomly choose a generated map type
const val randomGenerated = "Random Generated"
// Non-generated maps
const val custom = "Custom"
// All ocean tiles
const val empty = "Empty"
}
@ -260,7 +261,7 @@ class MapParameters : IsPartOfGameInfoSerialization {
if(mapResources != MapResources.default) yield(" {Resource Setting}: {$mapResources}")
if (name.isEmpty()) return@sequence
yield("\n")
if (type != MapType.custom && type != MapType.empty) yield("{Map Generation Type}: {$type}, ")
if (type != MapGeneratedMainType.custom && type != MapType.empty) yield("{Map Generation Type}: {$type}, ")
yield("{RNG Seed} $seed")
yield(", {Map Elevation}=" + elevationExponent.niceToString(2))
yield(", {Temperature extremeness}=" + temperatureExtremeness.niceToString(2))

View File

@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx
import com.badlogic.gdx.scenes.scene2d.ui.ButtonGroup
import com.badlogic.gdx.scenes.scene2d.ui.CheckBox
import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.logic.map.MapGeneratedMainType
import com.unciv.logic.map.MapParameters
import com.unciv.logic.map.MapType
import com.unciv.logic.map.TileMap
@ -165,7 +166,7 @@ class MapEditorGenerateTab(
private val parent: MapEditorGenerateTab
): Table(BaseScreen.skin) {
val generateButton = "".toTextButton()
val mapParametersTable = MapParametersTable(parent.editorScreen.newMapParameters, forMapEditor = true) {
val mapParametersTable = MapParametersTable(parent.editorScreen.newMapParameters, MapGeneratedMainType.generated, forMapEditor = true) {
parent.replacePage(0, this) // A kludge to get the ScrollPanes to recognize changes in vertical layout??
}

View File

@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.scenes.scene2d.ui.TextField
import com.unciv.logic.MapSaver
import com.unciv.logic.map.MapGeneratedMainType
import com.unciv.logic.map.MapType
import com.unciv.logic.map.TileMap
import com.unciv.models.translations.tr
@ -76,7 +77,7 @@ class MapEditorSaveTab(
private fun saveHandler() {
if (mapNameTextField.text.isBlank()) return
editorScreen.tileMap.mapParameters.name = mapNameTextField.text
editorScreen.tileMap.mapParameters.type = MapType.custom
editorScreen.tileMap.mapParameters.type = MapGeneratedMainType.custom
thread(name = "MapSaver", block = this::saverThread)
}

View File

@ -7,6 +7,7 @@ import com.badlogic.gdx.utils.Array
import com.unciv.UncivGame
import com.unciv.logic.MapSaver
import com.unciv.logic.UncivShowableException
import com.unciv.logic.map.MapGeneratedMainType
import com.unciv.logic.map.MapType
import com.unciv.models.ruleset.RulesetCache
import com.unciv.ui.popup.Popup
@ -18,7 +19,8 @@ class MapOptionsTable(private val newGameScreen: NewGameScreen): Table() {
private val mapParameters = newGameScreen.gameSetupInfo.mapParameters
private var mapTypeSpecificTable = Table()
var generatedMapOptionsTable = MapParametersTable(mapParameters)
val generatedMapOptionsTable = MapParametersTable(mapParameters, MapGeneratedMainType.generated)
private val randomMapOptionsTable = MapParametersTable(mapParameters, MapGeneratedMainType.randomGenerated)
private val savedMapOptionsTable = Table()
lateinit var mapTypeSelectBox: TranslatedSelectBox
private val mapFileSelectBox = createMapFileSelectBox()
@ -40,8 +42,8 @@ class MapOptionsTable(private val newGameScreen: NewGameScreen): Table() {
}
private fun addMapTypeSelection() {
val mapTypes = arrayListOf(MapType.generated, MapType.randomGenerated)
if (mapFilesSequence.any()) mapTypes.add(MapType.custom)
val mapTypes = arrayListOf(MapGeneratedMainType.generated, MapGeneratedMainType.randomGenerated)
if (mapFilesSequence.any()) mapTypes.add(MapGeneratedMainType.custom)
mapTypeSelectBox = TranslatedSelectBox(mapTypes, "Generated", BaseScreen.skin)
savedMapOptionsTable.defaults().pad(5f)
@ -55,18 +57,26 @@ class MapOptionsTable(private val newGameScreen: NewGameScreen): Table() {
fun updateOnMapTypeChange() {
mapTypeSpecificTable.clear()
if (mapTypeSelectBox.selected.value == MapType.custom) {
fillMapFileSelectBox()
mapParameters.type = MapType.custom
mapParameters.name = mapFileSelectBox.selected.toString()
mapTypeSpecificTable.add(savedMapOptionsTable)
newGameScreen.unlockTables()
} else { // generated map
mapParameters.name = ""
mapParameters.type = mapTypeSelectBox.selected.value
generatedMapOptionsTable = MapParametersTable(mapParameters)
mapTypeSpecificTable.add(generatedMapOptionsTable)
newGameScreen.unlockTables()
when (mapTypeSelectBox.selected.value) {
MapGeneratedMainType.custom -> {
fillMapFileSelectBox()
mapParameters.type = MapGeneratedMainType.custom
mapParameters.name = mapFileSelectBox.selected.toString()
mapTypeSpecificTable.add(savedMapOptionsTable)
newGameScreen.unlockTables()
}
MapGeneratedMainType.generated -> {
mapParameters.name = ""
mapParameters.type = generatedMapOptionsTable.mapTypeSelectBox.selected.value
mapTypeSpecificTable.add(generatedMapOptionsTable)
newGameScreen.unlockTables()
}
MapGeneratedMainType.randomGenerated -> {
mapParameters.name = ""
mapTypeSpecificTable.add(randomMapOptionsTable)
newGameScreen.unlockTables()
}
}
newGameScreen.gameSetupInfo.gameParameters.godMode = false
newGameScreen.updateTables()
@ -74,7 +84,7 @@ class MapOptionsTable(private val newGameScreen: NewGameScreen): Table() {
// Pre-select custom if any map saved within last 15 minutes
if (mapFilesSequence.any { it.fileHandle.lastModified() > System.currentTimeMillis() - 900000 })
mapTypeSelectBox.selected = TranslatedSelectBox.TranslatedString(MapType.custom)
mapTypeSelectBox.selected = TranslatedSelectBox.TranslatedString(MapGeneratedMainType.custom)
// activate once, so when we had a file map before we'll have the right things set for another one
updateOnMapTypeChange()

View File

@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.CheckBox
import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.scenes.scene2d.ui.TextField
import com.badlogic.gdx.scenes.scene2d.ui.TextField.TextFieldFilter.DigitsOnlyFilter
import com.unciv.logic.map.MapGeneratedMainType
import com.unciv.logic.map.MapParameters
import com.unciv.logic.map.MapResources
import com.unciv.logic.map.MapShape
@ -31,6 +32,7 @@ import com.unciv.ui.utils.extensions.toTextButton
* */
class MapParametersTable(
private val mapParameters: MapParameters,
private val mapGeneratedMainType: String,
private val forMapEditor: Boolean = false,
private val sizeChangedCallback: (()->Unit)? = null
) : Table() {
@ -67,7 +69,7 @@ class MapParametersTable(
init {
skin = BaseScreen.skin
defaults().pad(5f, 10f)
if (mapParameters.type === MapType.randomGenerated) {
if (mapGeneratedMainType == MapGeneratedMainType.randomGenerated) {
add("{Which options should be available to the random selection?}".toLabel()).colspan(2).grow().row()
}
addMapShapeSelectBox()
@ -90,7 +92,7 @@ class MapParametersTable(
MapShape.rectangular
)
if (mapParameters.type === MapType.randomGenerated) {
if (mapGeneratedMainType == MapGeneratedMainType.randomGenerated) {
mapShapesOptionsValues = mapShapes.toHashSet()
val optionsTable = MultiCheckboxTable("{Enabled Map Shapes}", "NewGameMapShapes", mapShapesOptionsValues) {
if (mapShapesOptionsValues.isEmpty()) {
@ -125,10 +127,10 @@ class MapParametersTable(
MapType.smoothedRandom,
MapType.archipelago,
MapType.innerSea,
if (forMapEditor && mapParameters.type !== MapType.randomGenerated) MapType.empty else null
if (forMapEditor && mapGeneratedMainType != MapGeneratedMainType.randomGenerated) MapType.empty else null
)
if (mapParameters.type === MapType.randomGenerated) {
if (mapGeneratedMainType == MapGeneratedMainType.randomGenerated) {
mapTypesOptionsValues = mapTypes.toHashSet()
val optionsTable = MultiCheckboxTable("{Enabled Map Generation Types}", "NewGameMapGenerationTypes", mapTypesOptionsValues) {
if (mapTypesOptionsValues.isEmpty()) {
@ -155,7 +157,7 @@ class MapParametersTable(
}
private fun addWorldSizeTable() {
if (mapParameters.type === MapType.randomGenerated) {
if (mapGeneratedMainType == MapGeneratedMainType.randomGenerated) {
val mapSizes = MapSize.values().map { it.name }
mapSizesOptionsValues = mapSizes.toHashSet()
val optionsTable = MultiCheckboxTable("{Enabled World Sizes}", "NewGameWorldSizes", mapSizesOptionsValues) {
@ -249,7 +251,7 @@ class MapParametersTable(
MapResources.legendaryStart
)
if (mapParameters.type === MapType.randomGenerated) {
if (mapGeneratedMainType == MapGeneratedMainType.randomGenerated) {
mapResourcesOptionsValues = mapResources.toHashSet()
val optionsTable = MultiCheckboxTable("{Enabled Resource Settings}", "NewGameResourceSettings", mapResourcesOptionsValues) {
if (mapResourcesOptionsValues.isEmpty()) {
@ -294,7 +296,7 @@ class MapParametersTable(
private fun addWrappedCheckBoxes() {
val worldWrapWarning = "World wrap maps are very memory intensive - creating large world wrap maps on Android can lead to crashes!"
if (mapParameters.type === MapType.randomGenerated) {
if (mapGeneratedMainType == MapGeneratedMainType.randomGenerated) {
add(ExpanderTab("{Other Settings}", persistenceID = "NewGameOtherSettings", startsOutOpened = false) {
it.defaults().pad(5f,0f)
it.addNoRuinsCheckbox()

View File

@ -13,6 +13,7 @@ import com.unciv.logic.GameStarter
import com.unciv.logic.IdChecker
import com.unciv.logic.MapSaver
import com.unciv.logic.civilization.PlayerType
import com.unciv.logic.map.MapGeneratedMainType
import com.unciv.logic.map.MapType
import com.unciv.logic.multiplayer.OnlineMultiplayer
import com.unciv.logic.multiplayer.storage.FileStorageRateLimitReached
@ -153,7 +154,7 @@ class NewGameScreen(
Gdx.input.inputProcessor = null // remove input processing - nothing will be clicked!
if (mapOptionsTable.mapTypeSelectBox.selected.value == MapType.custom) {
if (mapOptionsTable.mapTypeSelectBox.selected.value == MapGeneratedMainType.custom) {
val map = try {
MapSaver.loadMap(gameSetupInfo.mapFile!!)
} catch (ex: Throwable) {