mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-27 08:09:21 +07:00
Can now choose a map name and load a map from those existing on the phone!
This commit is contained in:
@ -21,8 +21,8 @@ android {
|
|||||||
applicationId "com.unciv.app"
|
applicationId "com.unciv.app"
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 28
|
targetSdkVersion 28
|
||||||
versionCode 198
|
versionCode 199
|
||||||
versionName "2.12.5"
|
versionName "2.13.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Had to add this crap for Travis to build, it wanted to sign the app
|
// Had to add this crap for Travis to build, it wanted to sign the app
|
||||||
|
@ -20,6 +20,7 @@ class GameParameters{
|
|||||||
var humanNations=ArrayList<String>().apply { add("Babylon") }
|
var humanNations=ArrayList<String>().apply { add("Babylon") }
|
||||||
var numberOfEnemies=3
|
var numberOfEnemies=3
|
||||||
var mapType= MapType.Perlin
|
var mapType= MapType.Perlin
|
||||||
|
var mapFileName :String?=null
|
||||||
}
|
}
|
||||||
|
|
||||||
class GameStarter{
|
class GameStarter{
|
||||||
@ -27,7 +28,7 @@ class GameStarter{
|
|||||||
val gameInfo = GameInfo()
|
val gameInfo = GameInfo()
|
||||||
|
|
||||||
gameInfo.gameParameters = newGameParameters
|
gameInfo.gameParameters = newGameParameters
|
||||||
gameInfo.tileMap = TileMap(newGameParameters.mapRadius, newGameParameters.mapType)
|
gameInfo.tileMap = TileMap(newGameParameters)
|
||||||
gameInfo.tileMap.gameInfo = gameInfo // need to set this transient before placing units in the map
|
gameInfo.tileMap.gameInfo = gameInfo // need to set this transient before placing units in the map
|
||||||
val startingLocations = getStartingLocations(
|
val startingLocations = getStartingLocations(
|
||||||
newGameParameters.numberOfEnemies+newGameParameters.numberOfHumanPlayers, gameInfo.tileMap)
|
newGameParameters.numberOfEnemies+newGameParameters.numberOfHumanPlayers, gameInfo.tileMap)
|
||||||
|
@ -22,6 +22,8 @@ class GameSaver {
|
|||||||
val unzippedJson = Gzip.unzip(gzippedString)
|
val unzippedJson = Gzip.unzip(gzippedString)
|
||||||
return json().fromJson(TileMap::class.java, unzippedJson)
|
return json().fromJson(TileMap::class.java, unzippedJson)
|
||||||
}
|
}
|
||||||
|
fun getMaps() = Gdx.files.local(mapsFolder).list().map { it.name() }
|
||||||
|
|
||||||
|
|
||||||
fun getSave(GameName: String): FileHandle {
|
fun getSave(GameName: String): FileHandle {
|
||||||
return Gdx.files.local("$saveFilesFolder/$GameName")
|
return Gdx.files.local("$saveFilesFolder/$GameName")
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.unciv.logic.map
|
package com.unciv.logic.map
|
||||||
|
|
||||||
import com.badlogic.gdx.math.Vector2
|
import com.badlogic.gdx.math.Vector2
|
||||||
|
import com.unciv.GameParameters
|
||||||
import com.unciv.logic.GameInfo
|
import com.unciv.logic.GameInfo
|
||||||
import com.unciv.logic.GameSaver
|
import com.unciv.logic.GameSaver
|
||||||
import com.unciv.logic.HexMath
|
import com.unciv.logic.HexMath
|
||||||
@ -31,15 +32,15 @@ class TileMap {
|
|||||||
get() = tileList
|
get() = tileList
|
||||||
|
|
||||||
|
|
||||||
constructor(distance: Int, mapType: MapType) {
|
constructor(newGameParameters: GameParameters) {
|
||||||
val mapValues:Collection<TileInfo>
|
val mapValues:Collection<TileInfo>
|
||||||
|
|
||||||
if(mapType == MapType.File)
|
if(newGameParameters.mapType == MapType.File)
|
||||||
mapValues = GameSaver().loadMap("Test").values
|
mapValues = GameSaver().loadMap(newGameParameters.mapFileName!!).values
|
||||||
else if(mapType==MapType.Perlin)
|
else if(newGameParameters.mapType==MapType.Perlin)
|
||||||
mapValues = PerlinNoiseRandomMapGenerator().generateMap(distance).values
|
mapValues = PerlinNoiseRandomMapGenerator().generateMap(newGameParameters.mapRadius).values
|
||||||
else
|
else
|
||||||
mapValues = CelluarAutomataRandomMapGenerator(mapType).generateMap(distance).values
|
mapValues = CelluarAutomataRandomMapGenerator(newGameParameters.mapType).generateMap(newGameParameters.mapRadius).values
|
||||||
|
|
||||||
tileList.addAll(mapValues)
|
tileList.addAll(mapValues)
|
||||||
// tileList.addAll(AlexanderRandomMapGenerator().generateMap(distance,0.8f).values)
|
// tileList.addAll(AlexanderRandomMapGenerator().generateMap(distance,0.8f).values)
|
||||||
|
@ -2,30 +2,31 @@ package com.unciv.ui
|
|||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
import com.badlogic.gdx.scenes.scene2d.Actor
|
import com.badlogic.gdx.scenes.scene2d.Actor
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Image
|
import com.badlogic.gdx.scenes.scene2d.ui.*
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane
|
import com.unciv.GameParameters
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Table
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
|
|
||||||
import com.unciv.UnCivGame
|
import com.unciv.UnCivGame
|
||||||
import com.unciv.logic.GameSaver
|
import com.unciv.logic.GameSaver
|
||||||
import com.unciv.logic.map.MapType
|
|
||||||
import com.unciv.logic.map.TileMap
|
import com.unciv.logic.map.TileMap
|
||||||
import com.unciv.models.gamebasics.GameBasics
|
import com.unciv.models.gamebasics.GameBasics
|
||||||
import com.unciv.models.gamebasics.tile.Terrain
|
import com.unciv.models.gamebasics.tile.Terrain
|
||||||
import com.unciv.models.gamebasics.tile.TerrainType
|
import com.unciv.models.gamebasics.tile.TerrainType
|
||||||
import com.unciv.models.gamebasics.tile.TileResource
|
import com.unciv.models.gamebasics.tile.TileResource
|
||||||
|
import com.unciv.models.gamebasics.tr
|
||||||
import com.unciv.ui.tilegroups.TileGroup
|
import com.unciv.ui.tilegroups.TileGroup
|
||||||
import com.unciv.ui.utils.CameraStageBaseScreen
|
import com.unciv.ui.utils.CameraStageBaseScreen
|
||||||
import com.unciv.ui.utils.ImageGetter
|
import com.unciv.ui.utils.ImageGetter
|
||||||
import com.unciv.ui.utils.center
|
import com.unciv.ui.utils.center
|
||||||
import com.unciv.ui.utils.onClick
|
import com.unciv.ui.utils.onClick
|
||||||
import com.unciv.ui.worldscreen.TileGroupMap
|
import com.unciv.ui.worldscreen.TileGroupMap
|
||||||
|
import com.unciv.ui.worldscreen.optionstable.PopupTable
|
||||||
|
|
||||||
class MapEditorScreen: CameraStageBaseScreen(){
|
class MapEditorScreen: CameraStageBaseScreen(){
|
||||||
var clearTerrainFeature=false
|
var clearTerrainFeature=false
|
||||||
var selectedTerrain : Terrain?=null
|
var selectedTerrain : Terrain?=null
|
||||||
var clearResource=false
|
var clearResource=false
|
||||||
var selectedResource:TileResource?=null
|
var selectedResource:TileResource?=null
|
||||||
|
var tileMap = TileMap(GameParameters())
|
||||||
|
var mapName = "My first map"
|
||||||
|
|
||||||
fun clearSelection(){
|
fun clearSelection(){
|
||||||
clearTerrainFeature=false
|
clearTerrainFeature=false
|
||||||
@ -48,7 +49,6 @@ class MapEditorScreen: CameraStageBaseScreen(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
init{
|
init{
|
||||||
val tileMap = TileMap(20, MapType.Default)
|
|
||||||
val scrollPane = getMapHolder(tileMap)
|
val scrollPane = getMapHolder(tileMap)
|
||||||
|
|
||||||
stage.addActor(scrollPane)
|
stage.addActor(scrollPane)
|
||||||
@ -56,10 +56,10 @@ class MapEditorScreen: CameraStageBaseScreen(){
|
|||||||
val scrollTable = getTileEditorOptions()
|
val scrollTable = getTileEditorOptions()
|
||||||
stage.addActor(scrollTable)
|
stage.addActor(scrollTable)
|
||||||
|
|
||||||
val saveMapButton = TextButton("Save map",skin)
|
|
||||||
|
val saveMapButton = TextButton("Options".tr(),skin)
|
||||||
saveMapButton.onClick {
|
saveMapButton.onClick {
|
||||||
GameSaver().saveMap("Test",tileMap)
|
mapScreenOptionsTable(this)
|
||||||
UnCivGame.Current.setWorldScreen()
|
|
||||||
}
|
}
|
||||||
stage.addActor(saveMapButton)
|
stage.addActor(saveMapButton)
|
||||||
}
|
}
|
||||||
@ -141,3 +141,24 @@ class MapEditorScreen: CameraStageBaseScreen(){
|
|||||||
return scrollTable
|
return scrollTable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class mapScreenOptionsTable(mapEditorScreen: MapEditorScreen):PopupTable(mapEditorScreen){
|
||||||
|
init{
|
||||||
|
val mapNameEditor = TextField(mapEditorScreen.mapName, CameraStageBaseScreen.skin)
|
||||||
|
mapNameEditor.addListener{ mapEditorScreen.mapName=mapNameEditor.text; true }
|
||||||
|
add(mapNameEditor).row()
|
||||||
|
|
||||||
|
val saveMapButton = TextButton("Save".tr(), CameraStageBaseScreen.skin)
|
||||||
|
saveMapButton.onClick {
|
||||||
|
GameSaver().saveMap(mapEditorScreen.mapName,mapEditorScreen.tileMap)
|
||||||
|
UnCivGame.Current.setWorldScreen()
|
||||||
|
}
|
||||||
|
add(saveMapButton).row()
|
||||||
|
|
||||||
|
val closeOptionsButtton = TextButton("Close".tr(), CameraStageBaseScreen.skin)
|
||||||
|
closeOptionsButtton.onClick { remove() }
|
||||||
|
add(closeOptionsButtton).row()
|
||||||
|
|
||||||
|
open()
|
||||||
|
}
|
||||||
|
}
|
@ -2,10 +2,7 @@ package com.unciv.ui
|
|||||||
|
|
||||||
import com.badlogic.gdx.Gdx
|
import com.badlogic.gdx.Gdx
|
||||||
import com.badlogic.gdx.scenes.scene2d.Actor
|
import com.badlogic.gdx.scenes.scene2d.Actor
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane
|
import com.badlogic.gdx.scenes.scene2d.ui.*
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Table
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener
|
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener
|
||||||
import com.badlogic.gdx.utils.Array
|
import com.badlogic.gdx.utils.Array
|
||||||
import com.unciv.GameStarter
|
import com.unciv.GameStarter
|
||||||
@ -75,35 +72,46 @@ class NewGameScreen: PickerScreen(){
|
|||||||
newGameOptionsTable.add("{Map type}:".tr())
|
newGameOptionsTable.add("{Map type}:".tr())
|
||||||
val mapTypes = LinkedHashMap<String, MapType>()
|
val mapTypes = LinkedHashMap<String, MapType>()
|
||||||
for (type in MapType.values()) {
|
for (type in MapType.values()) {
|
||||||
if(type==MapType.File && !GameSaver().getMap("Test").exists()) continue
|
if(type==MapType.File && GameSaver().getMaps().isEmpty()) continue
|
||||||
mapTypes[type.toString()] = type
|
mapTypes[type.toString()] = type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val mapFileLabel = Label("{Map file}:".tr(),skin)
|
||||||
|
val mapFileSelectBox = getMapFileSelectBox()
|
||||||
|
mapFileLabel.isVisible=false
|
||||||
|
mapFileSelectBox.isVisible=false
|
||||||
|
|
||||||
val mapTypeSelectBox = TranslatedSelectBox(mapTypes.keys, newGameParameters.mapType.toString(), skin)
|
val mapTypeSelectBox = TranslatedSelectBox(mapTypes.keys, newGameParameters.mapType.toString(), skin)
|
||||||
|
|
||||||
|
val worldSizeSelectBox = getWorldSizeSelectBox()
|
||||||
|
val worldSizeLabel = Label("{World size}:".tr(),skin)
|
||||||
|
|
||||||
mapTypeSelectBox.addListener(object : ChangeListener() {
|
mapTypeSelectBox.addListener(object : ChangeListener() {
|
||||||
override fun changed(event: ChangeEvent?, actor: Actor?) {
|
override fun changed(event: ChangeEvent?, actor: Actor?) {
|
||||||
newGameParameters.mapType = mapTypes[mapTypeSelectBox.selected.value]!!
|
newGameParameters.mapType = mapTypes[mapTypeSelectBox.selected.value]!!
|
||||||
|
if (newGameParameters.mapType == MapType.File) {
|
||||||
|
worldSizeSelectBox.isVisible = false
|
||||||
|
worldSizeLabel.isVisible = false
|
||||||
|
mapFileSelectBox.isVisible = true
|
||||||
|
mapFileLabel.isVisible=true
|
||||||
|
newGameParameters.mapFileName = mapFileSelectBox.selected
|
||||||
|
} else {
|
||||||
|
worldSizeSelectBox.isVisible = true
|
||||||
|
worldSizeLabel.isVisible = true
|
||||||
|
mapFileSelectBox.isVisible = false
|
||||||
|
mapFileLabel.isVisible=false
|
||||||
|
newGameParameters.mapFileName = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
newGameOptionsTable.add(mapTypeSelectBox).pad(10f).row()
|
newGameOptionsTable.add(mapTypeSelectBox).pad(10f).row()
|
||||||
|
|
||||||
newGameOptionsTable.add("{World size}:".tr())
|
|
||||||
val worldSizeToRadius = LinkedHashMap<String, Int>()
|
|
||||||
worldSizeToRadius["Tiny"] = 10
|
|
||||||
worldSizeToRadius["Small"] = 15
|
|
||||||
worldSizeToRadius["Medium"] = 20
|
|
||||||
worldSizeToRadius["Large"] = 30
|
|
||||||
worldSizeToRadius["Huge"] = 40
|
|
||||||
|
|
||||||
val currentWorldSizeName = worldSizeToRadius.entries.first { it.value==newGameParameters.mapRadius }.key
|
newGameOptionsTable.add(worldSizeLabel)
|
||||||
val worldSizeSelectBox = TranslatedSelectBox(worldSizeToRadius.keys, currentWorldSizeName, skin)
|
|
||||||
|
|
||||||
worldSizeSelectBox.addListener(object : ChangeListener() {
|
|
||||||
override fun changed(event: ChangeEvent?, actor: Actor?) {
|
|
||||||
newGameParameters.mapRadius = worldSizeToRadius[worldSizeSelectBox.selected.value]!!
|
|
||||||
}
|
|
||||||
})
|
|
||||||
newGameOptionsTable.add(worldSizeSelectBox).pad(10f).row()
|
newGameOptionsTable.add(worldSizeSelectBox).pad(10f).row()
|
||||||
|
|
||||||
|
newGameOptionsTable.add(mapFileLabel)
|
||||||
|
newGameOptionsTable.add(mapFileSelectBox).pad(10f).row()
|
||||||
|
|
||||||
|
|
||||||
newGameOptionsTable.add("{Number of human players}:".tr())
|
newGameOptionsTable.add("{Number of human players}:".tr())
|
||||||
@ -168,6 +176,39 @@ class NewGameScreen: PickerScreen(){
|
|||||||
return newGameOptionsTable
|
return newGameOptionsTable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getMapFileSelectBox(): SelectBox<String> {
|
||||||
|
val mapFileSelectBox = SelectBox<String>(skin)
|
||||||
|
val mapNames = Array<String>()
|
||||||
|
for (mapName in GameSaver().getMaps()) mapNames.add(mapName)
|
||||||
|
mapFileSelectBox.items = mapNames
|
||||||
|
|
||||||
|
mapFileSelectBox.addListener(object : ChangeListener() {
|
||||||
|
override fun changed(event: ChangeEvent?, actor: Actor?) {
|
||||||
|
newGameParameters.mapFileName = mapFileSelectBox.selected!!
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return mapFileSelectBox
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getWorldSizeSelectBox(): TranslatedSelectBox {
|
||||||
|
val worldSizeToRadius = LinkedHashMap<String, Int>()
|
||||||
|
worldSizeToRadius["Tiny"] = 10
|
||||||
|
worldSizeToRadius["Small"] = 15
|
||||||
|
worldSizeToRadius["Medium"] = 20
|
||||||
|
worldSizeToRadius["Large"] = 30
|
||||||
|
worldSizeToRadius["Huge"] = 40
|
||||||
|
|
||||||
|
val currentWorldSizeName = worldSizeToRadius.entries.first { it.value == newGameParameters.mapRadius }.key
|
||||||
|
val worldSizeSelectBox = TranslatedSelectBox(worldSizeToRadius.keys, currentWorldSizeName, skin)
|
||||||
|
|
||||||
|
worldSizeSelectBox.addListener(object : ChangeListener() {
|
||||||
|
override fun changed(event: ChangeEvent?, actor: Actor?) {
|
||||||
|
newGameParameters.mapRadius = worldSizeToRadius[worldSizeSelectBox.selected.value]!!
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return worldSizeSelectBox
|
||||||
|
}
|
||||||
|
|
||||||
var newGame:GameInfo?=null
|
var newGame:GameInfo?=null
|
||||||
|
|
||||||
override fun render(delta: Float) {
|
override fun render(delta: Float) {
|
||||||
@ -190,7 +231,8 @@ class TranslatedSelectBox(values : Collection<String>, default:String, skin: Ski
|
|||||||
val array = Array<TranslatedString>()
|
val array = Array<TranslatedString>()
|
||||||
values.forEach{array.add(TranslatedString(it))}
|
values.forEach{array.add(TranslatedString(it))}
|
||||||
items = array
|
items = array
|
||||||
selected = array.first { it.value==default }
|
val defaultItem = array.firstOrNull { it.value==default }
|
||||||
|
selected = if(defaultItem!=null) defaultItem else array.first()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user