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 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.TextButton
import com.badlogic.gdx.scenes.scene2d.ui.TextField import com.badlogic.gdx.scenes.scene2d.ui.TextField
import com.badlogic.gdx.utils.Json
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.GameSaver import com.unciv.logic.GameSaver
import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.tr
import com.unciv.ui.saves.Gzip
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.worldscreen.optionstable.PopupTable import com.unciv.ui.worldscreen.optionstable.PopupTable
@ -22,6 +25,14 @@ class MapEditorOptionsTable(mapEditorScreen: MapEditorScreen): PopupTable(mapEdi
} }
add(saveMapButton).row() 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) val loadMapButton = TextButton("Load".tr(), CameraStageBaseScreen.skin)
loadMapButton.onClick { MapScreenLoadTable(mapEditorScreen); remove() } loadMapButton.onClick { MapScreenLoadTable(mapEditorScreen); remove() }
add(loadMapButton).row() 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.utils.onClick
import com.unciv.ui.worldscreen.TileGroupMap import com.unciv.ui.worldscreen.TileGroupMap
class MapEditorScreen(var mapToLoad:String?=null): CameraStageBaseScreen(){ class MapEditorScreen(): CameraStageBaseScreen(){
var clearTerrainFeature=false var clearTerrainFeature=false
var selectedTerrain : Terrain?=null var selectedTerrain : Terrain?=null
var clearResource=false var clearResource=false
@ -56,17 +56,27 @@ class MapEditorScreen(var mapToLoad:String?=null): CameraStageBaseScreen(){
return group return group
} }
init{ constructor(mapNameToLoad:String?):this(){
var mapToLoad = mapNameToLoad
if (mapToLoad == null) { if (mapToLoad == null) {
val existingSaves = GameSaver().getMaps() val existingSaves = GameSaver().getMaps()
if(existingSaves.isNotEmpty()) if(existingSaves.isNotEmpty())
mapToLoad = existingSaves.first() mapToLoad = existingSaves.first()
} }
if(mapToLoad!=null){ if(mapToLoad!=null){
mapName=mapToLoad!! mapName=mapToLoad
tileMap=GameSaver().loadMap(mapName) tileMap=GameSaver().loadMap(mapName)
tileMap.setTransients()
} }
initialize()
}
constructor(map: TileMap):this(){
tileMap = map
initialize()
}
fun initialize(){
tileMap.setTransients()
val mapHolder = getMapHolder(tileMap) val mapHolder = getMapHolder(tileMap)
stage.addActor(mapHolder) stage.addActor(mapHolder)

View File

@ -1,11 +1,15 @@
package com.unciv.ui.mapeditor 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.SelectBox
import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.badlogic.gdx.utils.Array import com.badlogic.gdx.utils.Array
import com.badlogic.gdx.utils.Json
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.GameSaver import com.unciv.logic.GameSaver
import com.unciv.logic.map.TileMap
import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.tr
import com.unciv.ui.saves.Gzip
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.worldscreen.optionstable.PopupTable import com.unciv.ui.worldscreen.optionstable.PopupTable
@ -24,6 +28,15 @@ class MapScreenLoadTable(mapEditorScreen: MapEditorScreen): PopupTable(mapEditor
} }
add(loadMapButton).row() 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) val closeOptionsButtton = TextButton("Close".tr(), CameraStageBaseScreen.skin)
closeOptionsButtton.onClick { remove() } closeOptionsButtton.onClick { remove() }
add(closeOptionsButtton).row() add(closeOptionsButtton).row()

View File

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