From 9909e237070d267cd7c22a6a9dafb6e34248df85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Fri, 5 Feb 2021 18:20:28 +0100 Subject: [PATCH] [Editor] Introduce GameMapVM view-model object --- .../base/editor/model/map/map/GameMap.kt | 5 ++-- .../editor/render/canvas/map/MapCanvas.kt | 7 ++--- .../editor/render/canvas/map/MapPainter.kt | 6 ++-- .../render/canvas/map/MapPaintingTrace.kt | 4 +-- .../render/canvas/tileset/TileSetCanvas.kt | 4 +-- .../render/canvas/tileset/TileSetSelection.kt | 2 +- .../base/editor/view/component/map/MapPane.kt | 6 ++-- .../view/component/tileset/TileSetPane.kt | 4 +-- .../base/editor/view/fragment/MapFragment.kt | 10 ++++--- .../viewmodel/map/{brush => }/BrushVM.kt | 2 +- .../base/editor/viewmodel/map/GameMapVM.kt | 28 +++++++++++++++++++ 11 files changed, 51 insertions(+), 27 deletions(-) rename editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/{brush => }/BrushVM.kt (89%) create mode 100755 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/GameMapVM.kt diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/model/map/map/GameMap.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/model/map/map/GameMap.kt index fb5b3f97..8fa25faa 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/model/map/map/GameMap.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/model/map/map/GameMap.kt @@ -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() + val layers = observableListOf() 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)) } -} \ No newline at end of file +} diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapCanvas.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapCanvas.kt index 3fa61f04..53add03d 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapCanvas.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapCanvas.kt @@ -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 diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapPainter.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapPainter.kt index ca5e102f..35352ebe 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapPainter.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapPainter.kt @@ -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 { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapPaintingTrace.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapPaintingTrace.kt index 19a71b7d..02ef183b 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapPaintingTrace.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapPaintingTrace.kt @@ -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() fun paint(layerIndex: Int, row: Int, column: Int, tile: Tile?) { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/tileset/TileSetCanvas.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/tileset/TileSetCanvas.kt index 48c72ae9..e45a22ea 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/tileset/TileSetCanvas.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/tileset/TileSetCanvas.kt @@ -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 diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/tileset/TileSetSelection.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/tileset/TileSetSelection.kt index 7eb6004a..c800e21b 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/tileset/TileSetSelection.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/tileset/TileSetSelection.kt @@ -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 diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/component/map/MapPane.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/component/map/MapPane.kt index 39ee8a3c..27ed6a18 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/component/map/MapPane.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/component/map/MapPane.kt @@ -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 { +class MapPane(map: GameMapVM, brushVM: BrushVM, paintingCallback: (MapPaintingTrace) -> Unit) : Canvas(), EventHandler { private var tileSet = map.tileSet private val painter = MapPainter(map, brushVM, paintingCallback) private val mapCanvas = MapCanvas(map, painter) diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/component/tileset/TileSetPane.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/component/tileset/TileSetPane.kt index 95aaa486..6bf06512 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/component/tileset/TileSetPane.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/component/tileset/TileSetPane.kt @@ -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 diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/fragment/MapFragment.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/fragment/MapFragment.kt index 1feb8bd2..55d569f2 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/fragment/MapFragment.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/view/fragment/MapFragment.kt @@ -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() + private val brushVM = find().apply { item = map.tileSet.baseBrush } + private val mapVM = find().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 { mapPane.render() } - brushVM.item = map.tileSet.baseBrush } override val root = borderpane { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/brush/BrushVM.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/BrushVM.kt similarity index 89% rename from editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/brush/BrushVM.kt rename to editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/BrushVM.kt index 8789e6f5..ac083008 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/brush/BrushVM.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/BrushVM.kt @@ -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 diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/GameMapVM.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/GameMapVM.kt new file mode 100755 index 00000000..da7ef71d --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/viewmodel/map/GameMapVM.kt @@ -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() { + val layers: SimpleListProperty = 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 +} + + +