diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/command/service/DefaultUndoRedoService.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/command/service/DefaultUndoRedoService.kt index f37f738a..0f4cbbd8 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/command/service/DefaultUndoRedoService.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/command/service/DefaultUndoRedoService.kt @@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.editor.command.service import com.bartlomiejpluta.base.editor.command.model.Undoable import org.apache.commons.logging.LogFactory +import org.slf4j.LoggerFactory import org.springframework.stereotype.Component import java.util.* @@ -65,6 +66,6 @@ class DefaultUndoRedoService : UndoRedoService { get() = redo.last?.commandName ?: "" companion object { - private val log = LogFactory.getLog(DefaultUndoRedoService::class.java) + private val log = LoggerFactory.getLogger(DefaultUndoRedoService::class.java) } } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapMouseEvent.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/input/MapMouseEvent.kt similarity index 87% rename from editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapMouseEvent.kt rename to editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/input/MapMouseEvent.kt index 7b6e6ee4..34fda3b5 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapMouseEvent.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/input/MapMouseEvent.kt @@ -1,4 +1,4 @@ -package com.bartlomiejpluta.base.editor.render.canvas.map +package com.bartlomiejpluta.base.editor.render.canvas.input import com.bartlomiejpluta.base.editor.model.tileset.TileSet import javafx.event.EventType diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapMouseEventHandler.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/input/MapMouseEventHandler.kt similarity index 56% rename from editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapMouseEventHandler.kt rename to editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/input/MapMouseEventHandler.kt index 66df5a7b..951f84fc 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapMouseEventHandler.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/input/MapMouseEventHandler.kt @@ -1,4 +1,4 @@ -package com.bartlomiejpluta.base.editor.render.canvas.map +package com.bartlomiejpluta.base.editor.render.canvas.input interface MapMouseEventHandler { fun handleMouseInput(event: MapMouseEvent) diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapBrush.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapBrush.kt index 4efbbee5..97d57fda 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapBrush.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/map/MapBrush.kt @@ -2,6 +2,8 @@ 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 javafx.scene.canvas.GraphicsContext import javafx.scene.input.MouseButton @@ -59,7 +61,7 @@ class MapBrush( when (event.type) { MouseEvent.MOUSE_PRESSED -> beginTrace(event) - MouseEvent.MOUSE_DRAGGED -> proceedTrace() + MouseEvent.MOUSE_DRAGGED -> proceedTrace(event) MouseEvent.MOUSE_RELEASED -> commitTrace(event) } } @@ -76,11 +78,13 @@ class MapBrush( } } - private fun proceedTrace() { - currentTrace?.apply { - for ((row, columns) in brush.withIndex()) { - for ((column, tile) in columns.withIndex()) { - paint(0, mouseRow - centerRow + row, mouseColumn - centerColumn + column, tile) + private fun proceedTrace(event: MapMouseEvent) { + if (event.button == MouseButton.PRIMARY) { + currentTrace?.apply { + for ((row, columns) in brush.withIndex()) { + for ((column, tile) in columns.withIndex()) { + paint(0, mouseRow - centerRow + row, mouseColumn - centerColumn + column, tile) + } } } } 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 c5c878c9..e5619ef7 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 @@ -4,6 +4,8 @@ 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 javafx.scene.canvas.GraphicsContext 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 a198e863..efa3cb3b 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,16 +1,26 @@ package com.bartlomiejpluta.base.editor.render.canvas.tileset import com.bartlomiejpluta.base.editor.model.tileset.TileSet -import com.bartlomiejpluta.base.editor.render.canvas.map.MapMouseEvent -import com.bartlomiejpluta.base.editor.render.canvas.map.MapMouseEventHandler +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 javafx.scene.canvas.GraphicsContext +import javafx.scene.input.MouseButton +import javafx.scene.input.MouseEvent +import javafx.scene.paint.Color class TileSetCanvas(private val tileSet: TileSet) : Renderable, MapMouseEventHandler { private val tiles = tileSet.tiles + private var selection = TileSetSelection(tileSet) + + private var mouseRow = -1 + private var mouseColumn = -1 override fun render(gc: GraphicsContext) { + gc.clearRect(0.0, 0.0, gc.canvas.width, gc.canvas.height); + renderTiles(gc) + selection.render(gc) } private fun renderTiles(gc: GraphicsContext) { @@ -22,6 +32,24 @@ class TileSetCanvas(private val tileSet: TileSet) : Renderable, MapMouseEventHan } override fun handleMouseInput(event: MapMouseEvent) { + mouseRow = event.row + mouseColumn = event.column + when (event.type) { + MouseEvent.MOUSE_PRESSED -> beginSelection(event) + MouseEvent.MOUSE_DRAGGED -> proceedSelection(event) + } + } + + private fun beginSelection(event: MapMouseEvent) { + if(event.button == MouseButton.PRIMARY) { + selection.begin(event.row.toDouble(), event.column.toDouble()) + } + } + + private fun proceedSelection(event: MapMouseEvent) { + if(event.button == MouseButton.PRIMARY) { + selection.finish(event.row.toDouble(), event.column.toDouble()) + } } } \ No newline at end of file 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 new file mode 100755 index 00000000..c824e9fa --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/render/canvas/tileset/TileSetSelection.kt @@ -0,0 +1,62 @@ +package com.bartlomiejpluta.base.editor.render.canvas.tileset + +import com.bartlomiejpluta.base.editor.model.tileset.TileSet +import com.bartlomiejpluta.base.editor.render.model.Renderable +import javafx.scene.canvas.GraphicsContext +import javafx.scene.paint.Color +import org.apache.commons.logging.LogFactory +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import kotlin.math.abs +import kotlin.math.min + + +class TileSetSelection(tileSet: TileSet) : Renderable { + private val tileWidth = tileSet.tileWidth.toDouble() + private val tileHeight = tileSet.tileHeight.toDouble() + + private var startRow = 0.0 + private var startColumn = 0.0 + private var offsetRow = 0.0 + private var offsetColumn = 0.0 + private var x = 0.0 + private var y = 0.0 + private var width = tileWidth + private var height = tileHeight + + fun begin(row: Double, column: Double) { + startRow = row + offsetRow = 0.0 + startColumn = column + offsetColumn = 0.0 + + updateRect(row, column) + } + + private fun updateRect(row: Double, column: Double) { + x = min(column, startColumn) * tileWidth + y = min(row, startRow) * tileHeight + width = (offsetColumn + 1) * tileWidth + height = (offsetRow + 1) * tileHeight + } + + fun finish(row: Double, column: Double) { + offsetRow = abs(row - startRow) + offsetColumn = abs(column - startColumn) + + updateRect(row, column) + } + + override fun render(gc: GraphicsContext) { + gc.fill = SELECTION_FILL_COLOR + gc.fillRect(x, y, width, height) + + gc.stroke = SELECTION_STROKE_COLOR + gc.strokeRect(x, y, width, height) + } + + companion object { + private val SELECTION_FILL_COLOR = Color.color(0.0, 0.7, 1.0, 0.4) + private val SELECTION_STROKE_COLOR = Color.color(0.0, 0.7, 1.0, 1.0) + } +} \ No newline at end of file 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 ebf78fc7..2bd04d88 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 @@ -2,7 +2,7 @@ package com.bartlomiejpluta.base.editor.view.component.map import com.bartlomiejpluta.base.editor.model.map.map.GameMap import com.bartlomiejpluta.base.editor.render.canvas.map.MapCanvas -import com.bartlomiejpluta.base.editor.render.canvas.map.MapMouseEvent +import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent import com.bartlomiejpluta.base.editor.render.canvas.map.MapPaintingTrace import javafx.event.EventHandler import javafx.scene.canvas.Canvas 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 f969ea5c..61b9cd3f 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,7 +1,7 @@ package com.bartlomiejpluta.base.editor.view.component.tileset import com.bartlomiejpluta.base.editor.model.tileset.TileSet -import com.bartlomiejpluta.base.editor.render.canvas.map.MapMouseEvent +import com.bartlomiejpluta.base.editor.render.canvas.input.MapMouseEvent import com.bartlomiejpluta.base.editor.render.canvas.tileset.TileSetCanvas import javafx.event.EventHandler import javafx.scene.canvas.Canvas