[Editor] Introduce GameMapVM view-model object
This commit is contained in:
@@ -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.Layer
|
||||||
import com.bartlomiejpluta.base.editor.model.map.layer.TileLayer
|
import com.bartlomiejpluta.base.editor.model.map.layer.TileLayer
|
||||||
import com.bartlomiejpluta.base.editor.model.tileset.TileSet
|
import com.bartlomiejpluta.base.editor.model.tileset.TileSet
|
||||||
|
import tornadofx.observableListOf
|
||||||
|
|
||||||
|
|
||||||
class GameMap(val tileSet: TileSet, val rows: Int, val columns: Int) {
|
class GameMap(val tileSet: TileSet, val rows: Int, val columns: Int) {
|
||||||
val layers = mutableListOf<Layer>()
|
val layers = observableListOf<Layer>()
|
||||||
|
|
||||||
val width = columns * tileSet.tileWidth
|
val width = columns * tileSet.tileWidth
|
||||||
|
|
||||||
|
|||||||
@@ -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.Layer
|
||||||
import com.bartlomiejpluta.base.editor.model.map.layer.TileLayer
|
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.render.model.Renderable
|
||||||
|
import com.bartlomiejpluta.base.editor.viewmodel.map.GameMapVM
|
||||||
import javafx.scene.canvas.GraphicsContext
|
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
|
var tileSet = map.tileSet
|
||||||
private var layers = map.layers
|
private var layers = map.layers
|
||||||
private var rows = map.rows
|
private var rows = map.rows
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
package com.bartlomiejpluta.base.editor.render.canvas.map
|
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.model.tileset.Tile
|
||||||
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
|
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
|
||||||
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEventHandler
|
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEventHandler
|
||||||
import com.bartlomiejpluta.base.editor.render.model.Renderable
|
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.canvas.GraphicsContext
|
||||||
import javafx.scene.input.MouseButton
|
import javafx.scene.input.MouseButton
|
||||||
import javafx.scene.input.MouseEvent
|
import javafx.scene.input.MouseEvent
|
||||||
|
|
||||||
class MapPainter(
|
class MapPainter(
|
||||||
private val map: GameMap,
|
private val map: GameMapVM,
|
||||||
private val brushVM: BrushVM,
|
private val brushVM: BrushVM,
|
||||||
private val paintingCallback: (MapPaintingTrace) -> Unit
|
private val paintingCallback: (MapPaintingTrace) -> Unit
|
||||||
) : Renderable, MapMouseEventHandler {
|
) : Renderable, MapMouseEventHandler {
|
||||||
|
|||||||
@@ -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.command.model.Undoable
|
||||||
import com.bartlomiejpluta.base.editor.model.map.layer.TileLayer
|
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.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>()
|
private val trace = mutableListOf<Element>()
|
||||||
|
|
||||||
fun paint(layerIndex: Int, row: Int, column: Int, tile: Tile?) {
|
fun paint(layerIndex: Int, row: Int, column: Int, tile: Tile?) {
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
package com.bartlomiejpluta.base.editor.render.canvas.tileset
|
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.model.tileset.TileSet
|
||||||
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
|
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
|
||||||
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEventHandler
|
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEventHandler
|
||||||
import com.bartlomiejpluta.base.editor.render.model.Renderable
|
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.canvas.GraphicsContext
|
||||||
import javafx.scene.input.MouseButton
|
import javafx.scene.input.MouseButton
|
||||||
import javafx.scene.input.MouseEvent
|
import javafx.scene.input.MouseEvent
|
||||||
|
|||||||
@@ -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.Tile
|
||||||
import com.bartlomiejpluta.base.editor.model.tileset.TileSet
|
import com.bartlomiejpluta.base.editor.model.tileset.TileSet
|
||||||
import com.bartlomiejpluta.base.editor.render.model.Renderable
|
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.canvas.GraphicsContext
|
||||||
import javafx.scene.paint.Color
|
import javafx.scene.paint.Color
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
package com.bartlomiejpluta.base.editor.view.component.map
|
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.input.MapMouseEvent
|
||||||
import com.bartlomiejpluta.base.editor.render.canvas.map.MapCanvas
|
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.MapPainter
|
||||||
import com.bartlomiejpluta.base.editor.render.canvas.map.MapPaintingTrace
|
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.event.EventHandler
|
||||||
import javafx.scene.canvas.Canvas
|
import javafx.scene.canvas.Canvas
|
||||||
import javafx.scene.input.MouseEvent
|
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 var tileSet = map.tileSet
|
||||||
private val painter = MapPainter(map, brushVM, paintingCallback)
|
private val painter = MapPainter(map, brushVM, paintingCallback)
|
||||||
private val mapCanvas = MapCanvas(map, painter)
|
private val mapCanvas = MapCanvas(map, painter)
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
package com.bartlomiejpluta.base.editor.view.component.tileset
|
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.model.tileset.TileSet
|
||||||
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
|
import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent
|
||||||
import com.bartlomiejpluta.base.editor.render.canvas.tileset.TileSetCanvas
|
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.event.EventHandler
|
||||||
import javafx.scene.canvas.Canvas
|
import javafx.scene.canvas.Canvas
|
||||||
import javafx.scene.input.MouseEvent
|
import javafx.scene.input.MouseEvent
|
||||||
|
|||||||
@@ -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.model.map.map.GameMap
|
||||||
import com.bartlomiejpluta.base.editor.view.component.map.MapPane
|
import com.bartlomiejpluta.base.editor.view.component.map.MapPane
|
||||||
import com.bartlomiejpluta.base.editor.view.component.tileset.TileSetPane
|
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.beans.property.SimpleDoubleProperty
|
||||||
import javafx.scene.input.MouseButton
|
import javafx.scene.input.MouseButton
|
||||||
import javafx.scene.input.MouseEvent
|
import javafx.scene.input.MouseEvent
|
||||||
@@ -18,10 +19,12 @@ class MapFragment : Fragment() {
|
|||||||
|
|
||||||
val map: GameMap by param()
|
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)
|
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 tileSetPane = TileSetPane(map.tileSet, brushVM)
|
||||||
|
|
||||||
private val transformation = Scale(1.0, 1.0, 0.0, 0.0).apply {
|
private val transformation = Scale(1.0, 1.0, 0.0, 0.0).apply {
|
||||||
@@ -31,7 +34,6 @@ class MapFragment : Fragment() {
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
subscribe<RedrawMapRequestEvent> { mapPane.render() }
|
subscribe<RedrawMapRequestEvent> { mapPane.render() }
|
||||||
brushVM.item = map.tileSet.baseBrush
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override val root = borderpane {
|
override val root = borderpane {
|
||||||
|
|||||||
@@ -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.map.brush.Brush
|
||||||
import com.bartlomiejpluta.base.editor.model.tileset.Tile
|
import com.bartlomiejpluta.base.editor.model.tileset.Tile
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user