From 59f5f9ceeb3a073e91e518bcf1446f8a0713c892 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Fri, 22 Feb 2019 10:36:26 +0200 Subject: [PATCH] Resolved #453 - Allow copy-pasting maps as text in map editor --- .../ui/mapeditor/MapEditorOptionsTable.kt | 11 +++++++++++ .../com/unciv/ui/mapeditor/MapEditorScreen.kt | 18 ++++++++++++++---- .../unciv/ui/mapeditor/MapScreenLoadTable.kt | 13 +++++++++++++ .../optionstable/WorldScreenOptionsTable.kt | 2 +- 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/core/src/com/unciv/ui/mapeditor/MapEditorOptionsTable.kt b/core/src/com/unciv/ui/mapeditor/MapEditorOptionsTable.kt index c25dc17fa6..825471edc1 100644 --- a/core/src/com/unciv/ui/mapeditor/MapEditorOptionsTable.kt +++ b/core/src/com/unciv/ui/mapeditor/MapEditorOptionsTable.kt @@ -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() diff --git a/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt b/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt index 49448020f0..bb71220bb0 100644 --- a/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt +++ b/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt @@ -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) diff --git a/core/src/com/unciv/ui/mapeditor/MapScreenLoadTable.kt b/core/src/com/unciv/ui/mapeditor/MapScreenLoadTable.kt index c819467df4..2455855f85 100644 --- a/core/src/com/unciv/ui/mapeditor/MapScreenLoadTable.kt +++ b/core/src/com/unciv/ui/mapeditor/MapScreenLoadTable.kt @@ -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() diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt index 30b92b9666..80ee7ed511 100644 --- a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt @@ -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() }