Resolved #453 - Allow copy-pasting maps as text in map editor

This commit is contained in:
Yair Morgenstern 2019-02-22 10:36:26 +02:00
parent 53664ec043
commit 59f5f9ceeb
4 changed files with 39 additions and 5 deletions

View File

@ -1,10 +1,13 @@
package com.unciv.ui.mapeditor
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.badlogic.gdx.scenes.scene2d.ui.TextField
import com.badlogic.gdx.utils.Json
import com.unciv.UnCivGame
import com.unciv.logic.GameSaver
import com.unciv.models.gamebasics.tr
import com.unciv.ui.saves.Gzip
import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.onClick
import com.unciv.ui.worldscreen.optionstable.PopupTable
@ -22,6 +25,14 @@ class MapEditorOptionsTable(mapEditorScreen: MapEditorScreen): PopupTable(mapEdi
}
add(saveMapButton).row()
val copyMapAsTextButton = TextButton("Copy to clipboard".tr(), CameraStageBaseScreen.skin)
copyMapAsTextButton.onClick {
val json = Json().toJson(mapEditorScreen.tileMap)
val base64Gzip = Gzip.zip(json)
Gdx.app.clipboard.contents = base64Gzip
}
add(copyMapAsTextButton).row()
val loadMapButton = TextButton("Load".tr(), CameraStageBaseScreen.skin)
loadMapButton.onClick { MapScreenLoadTable(mapEditorScreen); remove() }
add(loadMapButton).row()

View File

@ -22,7 +22,7 @@ import com.unciv.ui.utils.center
import com.unciv.ui.utils.onClick
import com.unciv.ui.worldscreen.TileGroupMap
class MapEditorScreen(var mapToLoad:String?=null): CameraStageBaseScreen(){
class MapEditorScreen(): CameraStageBaseScreen(){
var clearTerrainFeature=false
var selectedTerrain : Terrain?=null
var clearResource=false
@ -56,17 +56,27 @@ class MapEditorScreen(var mapToLoad:String?=null): CameraStageBaseScreen(){
return group
}
init{
constructor(mapNameToLoad:String?):this(){
var mapToLoad = mapNameToLoad
if (mapToLoad == null) {
val existingSaves = GameSaver().getMaps()
if(existingSaves.isNotEmpty())
mapToLoad = existingSaves.first()
}
if(mapToLoad!=null){
mapName=mapToLoad!!
mapName=mapToLoad
tileMap=GameSaver().loadMap(mapName)
tileMap.setTransients()
}
initialize()
}
constructor(map: TileMap):this(){
tileMap = map
initialize()
}
fun initialize(){
tileMap.setTransients()
val mapHolder = getMapHolder(tileMap)
stage.addActor(mapHolder)

View File

@ -1,11 +1,15 @@
package com.unciv.ui.mapeditor
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.badlogic.gdx.utils.Array
import com.badlogic.gdx.utils.Json
import com.unciv.UnCivGame
import com.unciv.logic.GameSaver
import com.unciv.logic.map.TileMap
import com.unciv.models.gamebasics.tr
import com.unciv.ui.saves.Gzip
import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.onClick
import com.unciv.ui.worldscreen.optionstable.PopupTable
@ -24,6 +28,15 @@ class MapScreenLoadTable(mapEditorScreen: MapEditorScreen): PopupTable(mapEditor
}
add(loadMapButton).row()
val loadFromClipboardButton = TextButton("Load copied data".tr(), CameraStageBaseScreen.skin)
loadFromClipboardButton .onClick {
val clipboardContentsString = Gdx.app.clipboard.contents.trim()
val decoded = Gzip.unzip(clipboardContentsString)
val loadedMap = Json().fromJson(TileMap::class.java, decoded)
UnCivGame.Current.screen = MapEditorScreen(loadedMap)
}
add(loadFromClipboardButton).row()
val closeOptionsButtton = TextButton("Close".tr(), CameraStageBaseScreen.skin)
closeOptionsButtton.onClick { remove() }
add(closeOptionsButtton).row()

View File

@ -15,7 +15,7 @@ class WorldScreenOptionsTable(val worldScreen: WorldScreen) : PopupTable(worldSc
init {
addButton("Map editor".tr()){
UnCivGame.Current.screen = MapEditorScreen()
UnCivGame.Current.screen = MapEditorScreen(null)
remove()
}