mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-29 06:51:30 -04:00
Refactor maptype & resolve map setting issue (#8328)
* Add [MapGenerateMainType] to separate with [MapType]. * Add missing import.
This commit is contained in:
parent
d01d9e31eb
commit
6263b196cd
@ -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))
|
||||
|
@ -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??
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user