[Editor] Enable creating empty MapFragment
This commit is contained in:
@@ -7,11 +7,24 @@ import tornadofx.Controller
|
|||||||
class MapController : Controller() {
|
class MapController : Controller() {
|
||||||
private val tileSetController: TileSetController by inject()
|
private val tileSetController: TileSetController by inject()
|
||||||
|
|
||||||
val map = GameMap(tileSetController.tileset, 20, 20)
|
private val map1 = GameMap(tileSetController.tileset, 20, 20)
|
||||||
.createTileLayer(0)
|
.createTileLayer(0)
|
||||||
.createTileLayer(3, 5)
|
.createTileLayer(3, 5)
|
||||||
.createTileLayer(3, 5)
|
.createTileLayer(3, 5)
|
||||||
.createTileLayer(3, 5)
|
.createTileLayer(3, 5)
|
||||||
.createTileLayer(3, 5)
|
.createTileLayer(3, 5)
|
||||||
.createTileLayer(3, 5)
|
.createTileLayer(3, 5)
|
||||||
|
|
||||||
|
private val map2 = GameMap(tileSetController.tileset, 50, 50)
|
||||||
|
.createTileLayer(3)
|
||||||
|
.createTileLayer(3, 5)
|
||||||
|
.createTileLayer(3, 5)
|
||||||
|
.createTileLayer(3, 5)
|
||||||
|
.createTileLayer(3, 5)
|
||||||
|
.createTileLayer(3, 5)
|
||||||
|
|
||||||
|
fun getMap(id: Int) = when(id) {
|
||||||
|
1 -> map1
|
||||||
|
else -> map2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -39,4 +39,8 @@ class GameMap(val tileSet: TileSet, val rows: Int, val columns: Int) {
|
|||||||
fun setTile(layer: Int, row: Int, column: Int, tileRow: Int, tileColumn: Int) = apply {
|
fun setTile(layer: Int, row: Int, column: Int, tileRow: Int, tileColumn: Int) = apply {
|
||||||
(layers[layer] as TileLayer).setTile(row, column, tileSet.getTile(tileRow, tileColumn))
|
(layers[layer] as TileLayer).setTile(row, column, tileSet.getTile(tileRow, tileColumn))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val EMPTY_8x8 = GameMap(TileSet.EMPTY, 8, 8)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -28,4 +28,8 @@ class TileSet(private val image: Image, val rows: Int, val columns: Int) {
|
|||||||
fun getTile(row: Int, column: Int) = tiles[row][column]
|
fun getTile(row: Int, column: Int) = tiles[row][column]
|
||||||
|
|
||||||
fun getTile(id: Int) = tiles[id / rows][id % columns]
|
fun getTile(id: Int) = tiles[id / rows][id % columns]
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val EMPTY = TileSet(Image("/textures/tileset.png"), 1, 1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -6,24 +6,14 @@ import com.bartlomiejpluta.base.editor.model.map.layer.TileLayer
|
|||||||
import com.bartlomiejpluta.base.editor.render.model.Renderable
|
import com.bartlomiejpluta.base.editor.render.model.Renderable
|
||||||
import javafx.scene.canvas.GraphicsContext
|
import javafx.scene.canvas.GraphicsContext
|
||||||
|
|
||||||
class MapCanvas(gameMap: GameMap) : Renderable {
|
class MapCanvas : Renderable {
|
||||||
private var layers: List<Layer>
|
private var layers: List<Layer>? = null
|
||||||
private var rows: Int
|
private var rows: Int? = null
|
||||||
private var columns: Int
|
private var columns: Int? = null
|
||||||
private var tileWidth: Double
|
private var tileWidth: Double? = null
|
||||||
private var tileHeight: Double
|
private var tileHeight: Double? = null
|
||||||
private var mapWidth: Double
|
private var mapWidth: Double? = null
|
||||||
private var mapHeight: Double
|
private var mapHeight: Double? = null
|
||||||
|
|
||||||
init {
|
|
||||||
layers = gameMap.layers
|
|
||||||
rows = gameMap.rows
|
|
||||||
columns = gameMap.columns
|
|
||||||
tileWidth = gameMap.tileSet.tileWidth.toDouble()
|
|
||||||
tileHeight = gameMap.tileSet.tileHeight.toDouble()
|
|
||||||
mapWidth = columns * tileWidth
|
|
||||||
mapHeight = rows * tileHeight
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateMap(gameMap: GameMap) {
|
fun updateMap(gameMap: GameMap) {
|
||||||
layers = gameMap.layers
|
layers = gameMap.layers
|
||||||
@@ -31,12 +21,12 @@ class MapCanvas(gameMap: GameMap) : Renderable {
|
|||||||
columns = gameMap.columns
|
columns = gameMap.columns
|
||||||
tileWidth = gameMap.tileSet.tileWidth.toDouble()
|
tileWidth = gameMap.tileSet.tileWidth.toDouble()
|
||||||
tileHeight = gameMap.tileSet.tileHeight.toDouble()
|
tileHeight = gameMap.tileSet.tileHeight.toDouble()
|
||||||
mapWidth = columns * tileWidth
|
mapWidth = gameMap.columns * gameMap.tileSet.tileWidth.toDouble()
|
||||||
mapHeight = rows * tileHeight
|
mapHeight = gameMap.rows * gameMap.tileSet.tileHeight.toDouble()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun render(gc: GraphicsContext) {
|
override fun render(gc: GraphicsContext) {
|
||||||
layers.forEach { dispatchLayerRender(gc, it) }
|
layers?.forEach { dispatchLayerRender(gc, it) }
|
||||||
renderGrid(gc)
|
renderGrid(gc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,12 +49,12 @@ class MapCanvas(gameMap: GameMap) : Renderable {
|
|||||||
private fun renderGrid(gc: GraphicsContext) {
|
private fun renderGrid(gc: GraphicsContext) {
|
||||||
gc.lineWidth = 1.5
|
gc.lineWidth = 1.5
|
||||||
|
|
||||||
for (row in 0 until rows) {
|
for (row in 0 until (rows ?: 0)) {
|
||||||
gc.strokeLine(0.0, row * tileHeight, mapWidth, row * tileHeight)
|
gc.strokeLine(0.0, row * (tileHeight ?: 0.0), (mapWidth ?: 0.0), row * (tileHeight ?: 0.0))
|
||||||
}
|
}
|
||||||
|
|
||||||
for (column in 0 until columns) {
|
for (column in 0 until (columns ?: 0)) {
|
||||||
gc.strokeLine(column * tileWidth, 0.0, column * tileWidth, mapHeight)
|
gc.strokeLine(column * (tileWidth ?: 0.0), 0.0, column * (tileWidth ?: 0.0), (mapHeight ?: 0.0))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,17 +5,17 @@ import com.bartlomiejpluta.base.editor.render.canvas.map.MapCanvas
|
|||||||
import com.bartlomiejpluta.base.editor.view.render.renderer.Renderer
|
import com.bartlomiejpluta.base.editor.view.render.renderer.Renderer
|
||||||
import javafx.scene.canvas.Canvas
|
import javafx.scene.canvas.Canvas
|
||||||
|
|
||||||
class MapPane(map: GameMap) : Canvas() {
|
class MapPane : Canvas() {
|
||||||
private val mapCanvas = MapCanvas(map)
|
private val mapCanvas = MapCanvas()
|
||||||
private val renderer = Renderer(graphicsContext2D, mapCanvas)
|
private val renderer = Renderer(graphicsContext2D, mapCanvas)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
width = map.width.toDouble()
|
|
||||||
height = map.height.toDouble()
|
|
||||||
renderer.start()
|
renderer.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateMap(map: GameMap) {
|
fun updateMap(map: GameMap) {
|
||||||
|
width = map.width.toDouble()
|
||||||
|
height = map.height.toDouble()
|
||||||
mapCanvas.updateMap(map)
|
mapCanvas.updateMap(map)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,12 +8,15 @@ import tornadofx.plusAssign
|
|||||||
import tornadofx.scrollpane
|
import tornadofx.scrollpane
|
||||||
|
|
||||||
class MapFragment : Fragment() {
|
class MapFragment : Fragment() {
|
||||||
val map: GameMap by param()
|
private val pane = MapPane()
|
||||||
val pane = MapPane(map)
|
|
||||||
|
fun updateMap(map: GameMap) {
|
||||||
|
pane.updateMap(map)
|
||||||
|
}
|
||||||
|
|
||||||
override val root = scrollpane {
|
override val root = scrollpane {
|
||||||
prefWidth = 300.0
|
prefWidth = 640.0
|
||||||
prefHeight = 300.0
|
prefHeight = 480.0
|
||||||
|
|
||||||
group {
|
group {
|
||||||
group {
|
group {
|
||||||
|
|||||||
@@ -2,13 +2,26 @@ package com.bartlomiejpluta.base.editor.view.main
|
|||||||
|
|
||||||
import com.bartlomiejpluta.base.editor.controller.map.MapController
|
import com.bartlomiejpluta.base.editor.controller.map.MapController
|
||||||
import com.bartlomiejpluta.base.editor.view.fragment.MapFragment
|
import com.bartlomiejpluta.base.editor.view.fragment.MapFragment
|
||||||
import tornadofx.View
|
import tornadofx.*
|
||||||
import tornadofx.borderpane
|
|
||||||
|
|
||||||
class MainView : View() {
|
class MainView : View() {
|
||||||
private val mapController: MapController by inject()
|
private val mapController: MapController by inject()
|
||||||
|
private val mapFragment = find<MapFragment>()
|
||||||
|
|
||||||
override val root = borderpane {
|
override val root = borderpane {
|
||||||
center = find<MapFragment>(mapOf(MapFragment::map to mapController.map)).root
|
top = hbox {
|
||||||
|
button("Map 1") {
|
||||||
|
action {
|
||||||
|
mapFragment.updateMap(mapController.getMap(1))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
button("Map 2") {
|
||||||
|
action {
|
||||||
|
mapFragment.updateMap(mapController.getMap(2))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
center = mapFragment.root
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user