From 6bfe7ea9c7c4579d1187e5b373ec369d45e1e8a1 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Tue, 21 Apr 2020 15:18:28 +0300 Subject: [PATCH] Map editor now works with functions on the selected tiles - much cleaner! --- .../com/unciv/ui/mapeditor/MapEditorScreen.kt | 1 - .../ui/mapeditor/TileEditorOptionsTable.kt | 127 ++++++------------ 2 files changed, 41 insertions(+), 87 deletions(-) diff --git a/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt b/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt index 8c913971dd..44ff0c73c8 100644 --- a/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt +++ b/core/src/com/unciv/ui/mapeditor/MapEditorScreen.kt @@ -117,7 +117,6 @@ class MapEditorScreen(): CameraStageBaseScreen() { val distance = tileEditorOptions.brushSize - 1 for (tileInfo in tileMap.getTilesInDistance(centerTileInfo.position, distance)) { - tileEditorOptions.updateTileWhenClicked(tileInfo) tileInfo.setTransients() diff --git a/core/src/com/unciv/ui/mapeditor/TileEditorOptionsTable.kt b/core/src/com/unciv/ui/mapeditor/TileEditorOptionsTable.kt index 112981b088..50121a748c 100644 --- a/core/src/com/unciv/ui/mapeditor/TileEditorOptionsTable.kt +++ b/core/src/com/unciv/ui/mapeditor/TileEditorOptionsTable.kt @@ -21,18 +21,7 @@ import com.unciv.ui.utils.* class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(CameraStageBaseScreen.skin){ private val tileSetLocation = "TileSets/"+ UncivGame.Current.settings.tileSet +"/" - var clearTerrainFeature=false - var selectedTerrain : Terrain?=null - - var clearResource=false - var selectedResource: TileResource?=null - - var clearImprovement=false - var selectedImprovement: TileImprovement?=null - - var toggleBottomRightRiver=false - var toggleBottomRiver=false - var toggleBottomLeftRiver=false + var tileAction:(TileInfo)->Unit = {} private val editorPickTable = Table() @@ -86,8 +75,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera val improvementsTable = Table() improvementsTable.add(getHex(Color.WHITE).apply { onClick { - clearSelection() - clearImprovement = true + tileAction = {it.improvement=null} setCurrentHex(getHex(Color.WHITE), "Clear improvements") } }).row() @@ -96,8 +84,14 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera if(improvement.name.startsWith("Remove")) continue val improvementImage = getHex(Color.WHITE, ImageGetter.getImprovementIcon(improvement.name, 40f)) improvementImage.onClick { - clearSelection() - selectedImprovement=improvement + tileAction = { + when (improvement.name) { + "Road" -> it.roadStatus = RoadStatus.Road + "Railroad" -> it.roadStatus = RoadStatus.Railroad + else -> it.improvement = improvement.name + } + + } val improvementIcon = getHex(Color.WHITE, ImageGetter.getImprovementIcon(improvement.name, 40f)) setCurrentHex(improvementIcon, improvement.name.tr()+"\n"+improvement.clone().toString()) } @@ -109,8 +103,19 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera for(nation in ruleset.nations.values){ val nationImage = getHex(Color.WHITE, ImageGetter.getNationIndicator(nation, 40f)) nationImage.onClick { - clearSelection() - selectedImprovement= TileImprovement().apply { name="StartingLocation "+nation.name } + val improvementName = "StartingLocation "+nation.name + + tileAction = { + it.improvement = improvementName + for (tileGroup in mapEditorScreen.mapHolder.tileGroups.values) { + val tile = tileGroup.tileInfo + if (tile.improvement == improvementName && tile != it) + tile.improvement = null + tile.setTransients() + tileGroup.update() + } + } + val nationIcon = getHex(Color.WHITE, ImageGetter.getNationIndicator(nation, 40f)) setCurrentHex(nationIcon, "[${nation.name}] starting location") } @@ -134,8 +139,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera terrainFeaturesTable.add(getHex(Color.WHITE, getRedCross(50f, 0.6f)).apply { onClick { - clearSelection() - clearTerrainFeature = true + tileAction = { it.terrainFeature=null; it.naturalWonder = null } setCurrentHex(getHex(Color.WHITE, getRedCross(40f, 0.6f)), "Clear terrain features") } }).row() @@ -177,8 +181,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera val resources = ArrayList() resources.add(getHex(Color.WHITE, getCrossedResource()).apply { onClick { - clearSelection() - clearResource = true + tileAction = {it.resource=null} setCurrentHex(getHex(Color.WHITE, getCrossedResource()), "Clear resource") } }) @@ -186,11 +189,11 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera for (resource in ruleset.tileResources.values) { val resourceHex = getHex(Color.WHITE, ImageGetter.getResourceImage(resource.name, 40f)) resourceHex.onClick { - clearSelection() - selectedResource = resource + tileAction = {it.resource = resource.name} + + // for the tile image val tileInfo = TileInfo() tileInfo.ruleset = mapEditorScreen.ruleset - val terrain = resource.terrainsCanBeFoundOn.first() val terrainObject = ruleset.terrains[terrain]!! if (terrainObject.type == TerrainType.TerrainFeature) { @@ -202,6 +205,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera tileInfo.resource = resource.name tileInfo.setTransients() + setCurrentHex(tileInfo, resource.name.tr() + "\n" + resource.clone().toString()) } resources.add(resourceHex) @@ -220,12 +224,16 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera } tileInfo.terrainFeature = terrain.name } else tileInfo.baseTerrain = terrain.name - val group = makeTileGroup(tileInfo) group.onClick { - clearSelection() - selectedTerrain = terrain + tileAction = { + when (terrain.type) { + TerrainType.TerrainFeature -> it.terrainFeature = terrain.name + TerrainType.NaturalWonder -> it.naturalWonder = terrain.name + else -> it.baseTerrain = terrain.name + } + } setCurrentHex(tileInfo, terrain.name.tr() + "\n" + terrain.clone().toString()) } @@ -242,14 +250,13 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera private fun addRiverToggleOptions(baseTerrainTable: Table) { baseTerrainTable.addSeparator() - val tileInfoBottomRightRiver = TileInfo() tileInfoBottomRightRiver.baseTerrain = Constants.plains tileInfoBottomRightRiver.hasBottomRightRiver = true val tileGroupBottomRightRiver = makeTileGroup(tileInfoBottomRightRiver) tileGroupBottomRightRiver.onClick { - clearSelection() - toggleBottomRightRiver = true + tileAction = {it.hasBottomRightRiver = !it.hasBottomRightRiver} + setCurrentHex(tileInfoBottomRightRiver, "Bottom right river") } baseTerrainTable.add(tileGroupBottomRightRiver).row() @@ -260,8 +267,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera tileInfoBottomRiver.hasBottomRiver = true val tileGroupBottomRiver = makeTileGroup(tileInfoBottomRiver) tileGroupBottomRiver.onClick { - clearSelection() - toggleBottomRiver = true + tileAction = {it.hasBottomRiver = !it.hasBottomRiver} setCurrentHex(tileInfoBottomRiver, "Bottom river") } baseTerrainTable.add(tileGroupBottomRiver).row() @@ -272,8 +278,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera tileInfoBottomLeftRiver.baseTerrain = Constants.plains val tileGroupBottomLeftRiver = makeTileGroup(tileInfoBottomLeftRiver) tileGroupBottomLeftRiver.onClick { - clearSelection() - toggleBottomLeftRiver = true + tileAction = {it.hasBottomLeftRiver = !it.hasBottomLeftRiver} setCurrentHex(tileInfoBottomLeftRiver, "Bottom left river") } baseTerrainTable.add(tileGroupBottomLeftRiver).row() @@ -310,58 +315,8 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera } - private fun clearSelection(){ - clearTerrainFeature=false - selectedTerrain=null - clearResource=false - selectedResource=null - clearImprovement=false - selectedImprovement=null - toggleBottomLeftRiver = false - toggleBottomRightRiver = false - toggleBottomRiver = false - } - fun updateTileWhenClicked(tileInfo: TileInfo) { - when { - clearTerrainFeature -> { - tileInfo.terrainFeature = null - tileInfo.naturalWonder = null - } - clearResource -> tileInfo.resource = null - selectedResource != null -> tileInfo.resource = selectedResource!!.name - selectedTerrain != null -> { - if (selectedTerrain!!.type == TerrainType.TerrainFeature) - tileInfo.terrainFeature = selectedTerrain!!.name - else if (selectedTerrain!!.type == TerrainType.NaturalWonder) - tileInfo.naturalWonder = selectedTerrain!!.name - else - tileInfo.baseTerrain = selectedTerrain!!.name - } - clearImprovement -> { - tileInfo.improvement = null - tileInfo.roadStatus = RoadStatus.None - } - selectedImprovement != null -> { - val improvement = selectedImprovement!! - if (improvement.name == "Road") tileInfo.roadStatus = RoadStatus.Road - else if (improvement.name == "Railroad") tileInfo.roadStatus = RoadStatus.Railroad - else tileInfo.improvement = improvement.name - - if(improvement.name.startsWith("StartingLocation")) - for(tileGroup in mapEditorScreen.mapHolder.tileGroups.values){ - val tile = tileGroup.tileInfo - if(tile.improvement==improvement.name && tile!=tileInfo) - tile.improvement=null - tile.setTransients() - tileGroup.update() - } - } - toggleBottomLeftRiver -> tileInfo.hasBottomLeftRiver = !tileInfo.hasBottomLeftRiver - toggleBottomRiver -> tileInfo.hasBottomRiver = !tileInfo.hasBottomRiver - toggleBottomRightRiver -> tileInfo.hasBottomRightRiver = !tileInfo.hasBottomRightRiver - } - + tileAction(tileInfo) normalizeTile(tileInfo) }