Map editor now works with functions on the selected tiles - much cleaner!

This commit is contained in:
Yair Morgenstern 2020-04-21 15:18:28 +03:00
parent 081f8cb4a6
commit 6bfe7ea9c7
2 changed files with 41 additions and 87 deletions

View File

@ -117,7 +117,6 @@ class MapEditorScreen(): CameraStageBaseScreen() {
val distance = tileEditorOptions.brushSize - 1 val distance = tileEditorOptions.brushSize - 1
for (tileInfo in tileMap.getTilesInDistance(centerTileInfo.position, distance)) { for (tileInfo in tileMap.getTilesInDistance(centerTileInfo.position, distance)) {
tileEditorOptions.updateTileWhenClicked(tileInfo) tileEditorOptions.updateTileWhenClicked(tileInfo)
tileInfo.setTransients() tileInfo.setTransients()

View File

@ -21,18 +21,7 @@ import com.unciv.ui.utils.*
class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(CameraStageBaseScreen.skin){ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(CameraStageBaseScreen.skin){
private val tileSetLocation = "TileSets/"+ UncivGame.Current.settings.tileSet +"/" private val tileSetLocation = "TileSets/"+ UncivGame.Current.settings.tileSet +"/"
var clearTerrainFeature=false var tileAction:(TileInfo)->Unit = {}
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
private val editorPickTable = Table() private val editorPickTable = Table()
@ -86,8 +75,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
val improvementsTable = Table() val improvementsTable = Table()
improvementsTable.add(getHex(Color.WHITE).apply { improvementsTable.add(getHex(Color.WHITE).apply {
onClick { onClick {
clearSelection() tileAction = {it.improvement=null}
clearImprovement = true
setCurrentHex(getHex(Color.WHITE), "Clear improvements") setCurrentHex(getHex(Color.WHITE), "Clear improvements")
} }
}).row() }).row()
@ -96,8 +84,14 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
if(improvement.name.startsWith("Remove")) continue if(improvement.name.startsWith("Remove")) continue
val improvementImage = getHex(Color.WHITE, ImageGetter.getImprovementIcon(improvement.name, 40f)) val improvementImage = getHex(Color.WHITE, ImageGetter.getImprovementIcon(improvement.name, 40f))
improvementImage.onClick { improvementImage.onClick {
clearSelection() tileAction = {
selectedImprovement=improvement 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)) val improvementIcon = getHex(Color.WHITE, ImageGetter.getImprovementIcon(improvement.name, 40f))
setCurrentHex(improvementIcon, improvement.name.tr()+"\n"+improvement.clone().toString()) 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){ for(nation in ruleset.nations.values){
val nationImage = getHex(Color.WHITE, ImageGetter.getNationIndicator(nation, 40f)) val nationImage = getHex(Color.WHITE, ImageGetter.getNationIndicator(nation, 40f))
nationImage.onClick { nationImage.onClick {
clearSelection() val improvementName = "StartingLocation "+nation.name
selectedImprovement= TileImprovement().apply { name="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)) val nationIcon = getHex(Color.WHITE, ImageGetter.getNationIndicator(nation, 40f))
setCurrentHex(nationIcon, "[${nation.name}] starting location") 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 { terrainFeaturesTable.add(getHex(Color.WHITE, getRedCross(50f, 0.6f)).apply {
onClick { onClick {
clearSelection() tileAction = { it.terrainFeature=null; it.naturalWonder = null }
clearTerrainFeature = true
setCurrentHex(getHex(Color.WHITE, getRedCross(40f, 0.6f)), "Clear terrain features") setCurrentHex(getHex(Color.WHITE, getRedCross(40f, 0.6f)), "Clear terrain features")
} }
}).row() }).row()
@ -177,8 +181,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
val resources = ArrayList<Actor>() val resources = ArrayList<Actor>()
resources.add(getHex(Color.WHITE, getCrossedResource()).apply { resources.add(getHex(Color.WHITE, getCrossedResource()).apply {
onClick { onClick {
clearSelection() tileAction = {it.resource=null}
clearResource = true
setCurrentHex(getHex(Color.WHITE, getCrossedResource()), "Clear resource") setCurrentHex(getHex(Color.WHITE, getCrossedResource()), "Clear resource")
} }
}) })
@ -186,11 +189,11 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
for (resource in ruleset.tileResources.values) { for (resource in ruleset.tileResources.values) {
val resourceHex = getHex(Color.WHITE, ImageGetter.getResourceImage(resource.name, 40f)) val resourceHex = getHex(Color.WHITE, ImageGetter.getResourceImage(resource.name, 40f))
resourceHex.onClick { resourceHex.onClick {
clearSelection() tileAction = {it.resource = resource.name}
selectedResource = resource
// for the tile image
val tileInfo = TileInfo() val tileInfo = TileInfo()
tileInfo.ruleset = mapEditorScreen.ruleset tileInfo.ruleset = mapEditorScreen.ruleset
val terrain = resource.terrainsCanBeFoundOn.first() val terrain = resource.terrainsCanBeFoundOn.first()
val terrainObject = ruleset.terrains[terrain]!! val terrainObject = ruleset.terrains[terrain]!!
if (terrainObject.type == TerrainType.TerrainFeature) { if (terrainObject.type == TerrainType.TerrainFeature) {
@ -202,6 +205,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
tileInfo.resource = resource.name tileInfo.resource = resource.name
tileInfo.setTransients() tileInfo.setTransients()
setCurrentHex(tileInfo, resource.name.tr() + "\n" + resource.clone().toString()) setCurrentHex(tileInfo, resource.name.tr() + "\n" + resource.clone().toString())
} }
resources.add(resourceHex) resources.add(resourceHex)
@ -220,12 +224,16 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
} }
tileInfo.terrainFeature = terrain.name tileInfo.terrainFeature = terrain.name
} else tileInfo.baseTerrain = terrain.name } else tileInfo.baseTerrain = terrain.name
val group = makeTileGroup(tileInfo) val group = makeTileGroup(tileInfo)
group.onClick { group.onClick {
clearSelection() tileAction = {
selectedTerrain = terrain 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()) 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) { private fun addRiverToggleOptions(baseTerrainTable: Table) {
baseTerrainTable.addSeparator() baseTerrainTable.addSeparator()
val tileInfoBottomRightRiver = TileInfo() val tileInfoBottomRightRiver = TileInfo()
tileInfoBottomRightRiver.baseTerrain = Constants.plains tileInfoBottomRightRiver.baseTerrain = Constants.plains
tileInfoBottomRightRiver.hasBottomRightRiver = true tileInfoBottomRightRiver.hasBottomRightRiver = true
val tileGroupBottomRightRiver = makeTileGroup(tileInfoBottomRightRiver) val tileGroupBottomRightRiver = makeTileGroup(tileInfoBottomRightRiver)
tileGroupBottomRightRiver.onClick { tileGroupBottomRightRiver.onClick {
clearSelection() tileAction = {it.hasBottomRightRiver = !it.hasBottomRightRiver}
toggleBottomRightRiver = true
setCurrentHex(tileInfoBottomRightRiver, "Bottom right river") setCurrentHex(tileInfoBottomRightRiver, "Bottom right river")
} }
baseTerrainTable.add(tileGroupBottomRightRiver).row() baseTerrainTable.add(tileGroupBottomRightRiver).row()
@ -260,8 +267,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
tileInfoBottomRiver.hasBottomRiver = true tileInfoBottomRiver.hasBottomRiver = true
val tileGroupBottomRiver = makeTileGroup(tileInfoBottomRiver) val tileGroupBottomRiver = makeTileGroup(tileInfoBottomRiver)
tileGroupBottomRiver.onClick { tileGroupBottomRiver.onClick {
clearSelection() tileAction = {it.hasBottomRiver = !it.hasBottomRiver}
toggleBottomRiver = true
setCurrentHex(tileInfoBottomRiver, "Bottom river") setCurrentHex(tileInfoBottomRiver, "Bottom river")
} }
baseTerrainTable.add(tileGroupBottomRiver).row() baseTerrainTable.add(tileGroupBottomRiver).row()
@ -272,8 +278,7 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
tileInfoBottomLeftRiver.baseTerrain = Constants.plains tileInfoBottomLeftRiver.baseTerrain = Constants.plains
val tileGroupBottomLeftRiver = makeTileGroup(tileInfoBottomLeftRiver) val tileGroupBottomLeftRiver = makeTileGroup(tileInfoBottomLeftRiver)
tileGroupBottomLeftRiver.onClick { tileGroupBottomLeftRiver.onClick {
clearSelection() tileAction = {it.hasBottomLeftRiver = !it.hasBottomLeftRiver}
toggleBottomLeftRiver = true
setCurrentHex(tileInfoBottomLeftRiver, "Bottom left river") setCurrentHex(tileInfoBottomLeftRiver, "Bottom left river")
} }
baseTerrainTable.add(tileGroupBottomLeftRiver).row() 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) { fun updateTileWhenClicked(tileInfo: TileInfo) {
when { tileAction(tileInfo)
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
}
normalizeTile(tileInfo) normalizeTile(tileInfo)
} }