[Editor] Introduce GameMapVM view-model object

This commit is contained in:
2021-02-05 18:20:28 +01:00
parent 7266b3fdac
commit 9909e23707
11 changed files with 51 additions and 27 deletions

View File

@@ -3,10 +3,11 @@ package com.bartlomiejpluta.base.editor.model.map.map
import com.bartlomiejpluta.base.editor.model.map.layer.Layer
import com.bartlomiejpluta.base.editor.model.map.layer.TileLayer
import com.bartlomiejpluta.base.editor.model.tileset.TileSet
import tornadofx.observableListOf
class GameMap(val tileSet: TileSet, val rows: Int, val columns: Int) {
val layers = mutableListOf<Layer>()
val layers = observableListOf<Layer>()
val width = columns * tileSet.tileWidth
@@ -39,4 +40,4 @@ class GameMap(val tileSet: TileSet, val rows: Int, val columns: Int) {
fun setTile(layer: Int, row: Int, column: Int, tileRow: Int, tileColumn: Int) = apply {
(layers[layer] as TileLayer).setTile(row, column, tileSet.getTile(tileRow, tileColumn))
}
}
}

View File

@@ -2,15 +2,12 @@ package com.bartlomiejpluta.base.editor.render.canvas.map
import com.bartlomiejpluta.base.editor.model.map.layer.Layer
import com.bartlomiejpluta.base.editor.model.map.layer.TileLayer
import com.bartlomiejpluta.base.editor.model.map.map.GameMap
import com.bartlomiejpluta.base.editor.model.tileset.Tile
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEventHandler
import com.bartlomiejpluta.base.editor.render.model.Renderable
import com.bartlomiejpluta.base.editor.viewmodel.map.GameMapVM
import javafx.scene.canvas.GraphicsContext
class MapCanvas(val map: GameMap, private val painter: MapPainter) : Renderable {
class MapCanvas(val map: GameMapVM, private val painter: MapPainter) : Renderable {
var tileSet = map.tileSet
private var layers = map.layers
private var rows = map.rows

View File

@@ -1,17 +1,17 @@
package com.bartlomiejpluta.base.editor.render.canvas.map
import com.bartlomiejpluta.base.editor.model.map.map.GameMap
import com.bartlomiejpluta.base.editor.model.tileset.Tile
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEventHandler
import com.bartlomiejpluta.base.editor.render.model.Renderable
import com.bartlomiejpluta.base.editor.viewmodel.map.brush.BrushVM
import com.bartlomiejpluta.base.editor.viewmodel.map.GameMapVM
import com.bartlomiejpluta.base.editor.viewmodel.map.BrushVM
import javafx.scene.canvas.GraphicsContext
import javafx.scene.input.MouseButton
import javafx.scene.input.MouseEvent
class MapPainter(
private val map: GameMap,
private val map: GameMapVM,
private val brushVM: BrushVM,
private val paintingCallback: (MapPaintingTrace) -> Unit
) : Renderable, MapMouseEventHandler {

View File

@@ -2,11 +2,11 @@ package com.bartlomiejpluta.base.editor.render.canvas.map
import com.bartlomiejpluta.base.editor.command.model.Undoable
import com.bartlomiejpluta.base.editor.model.map.layer.TileLayer
import com.bartlomiejpluta.base.editor.model.map.map.GameMap
import com.bartlomiejpluta.base.editor.model.tileset.Tile
import com.bartlomiejpluta.base.editor.viewmodel.map.GameMapVM
data class MapPaintingTrace(val map: GameMap, override val commandName: String) : Undoable {
data class MapPaintingTrace(val map: GameMapVM, override val commandName: String) : Undoable {
private val trace = mutableListOf<Element>()
fun paint(layerIndex: Int, row: Int, column: Int, tile: Tile?) {

View File

@@ -1,12 +1,10 @@
package com.bartlomiejpluta.base.editor.render.canvas.tileset
import com.bartlomiejpluta.base.editor.model.map.brush.Brush
import com.bartlomiejpluta.base.editor.model.tileset.Tile
import com.bartlomiejpluta.base.editor.model.tileset.TileSet
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEventHandler
import com.bartlomiejpluta.base.editor.render.model.Renderable
import com.bartlomiejpluta.base.editor.viewmodel.map.brush.BrushVM
import com.bartlomiejpluta.base.editor.viewmodel.map.BrushVM
import javafx.scene.canvas.GraphicsContext
import javafx.scene.input.MouseButton
import javafx.scene.input.MouseEvent

View File

@@ -4,7 +4,7 @@ import com.bartlomiejpluta.base.editor.model.map.brush.Brush
import com.bartlomiejpluta.base.editor.model.tileset.Tile
import com.bartlomiejpluta.base.editor.model.tileset.TileSet
import com.bartlomiejpluta.base.editor.render.model.Renderable
import com.bartlomiejpluta.base.editor.viewmodel.map.brush.BrushVM
import com.bartlomiejpluta.base.editor.viewmodel.map.BrushVM
import javafx.scene.canvas.GraphicsContext
import javafx.scene.paint.Color
import kotlin.math.abs

View File

@@ -1,17 +1,17 @@
package com.bartlomiejpluta.base.editor.view.component.map
import com.bartlomiejpluta.base.editor.model.map.map.GameMap
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
import com.bartlomiejpluta.base.editor.render.canvas.map.MapCanvas
import com.bartlomiejpluta.base.editor.render.canvas.map.MapPainter
import com.bartlomiejpluta.base.editor.render.canvas.map.MapPaintingTrace
import com.bartlomiejpluta.base.editor.viewmodel.map.brush.BrushVM
import com.bartlomiejpluta.base.editor.viewmodel.map.GameMapVM
import com.bartlomiejpluta.base.editor.viewmodel.map.BrushVM
import javafx.event.EventHandler
import javafx.scene.canvas.Canvas
import javafx.scene.input.MouseEvent
class MapPane(map: GameMap, brushVM: BrushVM, paintingCallback: (MapPaintingTrace) -> Unit) : Canvas(), EventHandler<MouseEvent> {
class MapPane(map: GameMapVM, brushVM: BrushVM, paintingCallback: (MapPaintingTrace) -> Unit) : Canvas(), EventHandler<MouseEvent> {
private var tileSet = map.tileSet
private val painter = MapPainter(map, brushVM, paintingCallback)
private val mapCanvas = MapCanvas(map, painter)

View File

@@ -1,11 +1,9 @@
package com.bartlomiejpluta.base.editor.view.component.tileset
import com.bartlomiejpluta.base.editor.model.map.brush.Brush
import com.bartlomiejpluta.base.editor.model.tileset.Tile
import com.bartlomiejpluta.base.editor.model.tileset.TileSet
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
import com.bartlomiejpluta.base.editor.render.canvas.tileset.TileSetCanvas
import com.bartlomiejpluta.base.editor.viewmodel.map.brush.BrushVM
import com.bartlomiejpluta.base.editor.viewmodel.map.BrushVM
import javafx.event.EventHandler
import javafx.scene.canvas.Canvas
import javafx.scene.input.MouseEvent

View File

@@ -5,7 +5,8 @@ import com.bartlomiejpluta.base.editor.event.RedrawMapRequestEvent
import com.bartlomiejpluta.base.editor.model.map.map.GameMap
import com.bartlomiejpluta.base.editor.view.component.map.MapPane
import com.bartlomiejpluta.base.editor.view.component.tileset.TileSetPane
import com.bartlomiejpluta.base.editor.viewmodel.map.brush.BrushVM
import com.bartlomiejpluta.base.editor.viewmodel.map.GameMapVM
import com.bartlomiejpluta.base.editor.viewmodel.map.BrushVM
import javafx.beans.property.SimpleDoubleProperty
import javafx.scene.input.MouseButton
import javafx.scene.input.MouseEvent
@@ -18,10 +19,12 @@ class MapFragment : Fragment() {
val map: GameMap by param()
private val brushVM = find<BrushVM>()
private val brushVM = find<BrushVM>().apply { item = map.tileSet.baseBrush }
private val mapVM = find<GameMapVM>().apply { item = map }
val scaleProperty = SimpleDoubleProperty(1.0)
private val mapPane = MapPane(map, brushVM) { undoRedoService.push(it) }
private val mapPane = MapPane(mapVM, brushVM) { undoRedoService.push(it) }
private val tileSetPane = TileSetPane(map.tileSet, brushVM)
private val transformation = Scale(1.0, 1.0, 0.0, 0.0).apply {
@@ -31,7 +34,6 @@ class MapFragment : Fragment() {
init {
subscribe<RedrawMapRequestEvent> { mapPane.render() }
brushVM.item = map.tileSet.baseBrush
}
override val root = borderpane {

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.editor.viewmodel.map.brush
package com.bartlomiejpluta.base.editor.viewmodel.map
import com.bartlomiejpluta.base.editor.model.map.brush.Brush
import com.bartlomiejpluta.base.editor.model.tileset.Tile

View File

@@ -0,0 +1,28 @@
package com.bartlomiejpluta.base.editor.viewmodel.map
import com.bartlomiejpluta.base.editor.model.map.layer.Layer
import com.bartlomiejpluta.base.editor.model.map.map.GameMap
import javafx.beans.property.SimpleListProperty
import tornadofx.*
class GameMapVM : ItemViewModel<GameMap>() {
val layers: SimpleListProperty<Layer> = bind(GameMap::layers)
val tileSetProperty = bind(GameMap::tileSet)
val tileSet by tileSetProperty
val rowsProperty = bind(GameMap::rows)
val rows by rowsProperty
val columnsProperty = bind(GameMap::columns)
val columns by columnsProperty
val widthProperty = bind(GameMap::width)
val width by widthProperty
val heightProperty = bind(GameMap::height)
val height by heightProperty
}