diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/ImagePositionPaintingTrace.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/ImagePositionPaintingTrace.kt index ec2c3af9..9f195353 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/ImagePositionPaintingTrace.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/ImagePositionPaintingTrace.kt @@ -5,6 +5,7 @@ import com.bartlomiejpluta.base.editor.map.viewmodel.BrushVM import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM import com.bartlomiejpluta.base.editor.render.input.MapMouseEvent +import javafx.scene.input.MouseButton class ImagePositionPaintingTrace(val map: GameMapVM, override val commandName: String) : PaintingTrace { private var layerIndex = 0 @@ -65,4 +66,6 @@ class ImagePositionPaintingTrace(val map: GameMapVM, override val commandName: S layer.x = newX.toInt() layer.y = newY.toInt() } + + override val supportedButtons = arrayOf(MouseButton.PRIMARY) } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/MapPainter.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/MapPainter.kt index 2a4eb905..5f13126d 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/MapPainter.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/MapPainter.kt @@ -10,7 +10,6 @@ import com.bartlomiejpluta.base.editor.render.input.MapMouseEvent import com.bartlomiejpluta.base.editor.render.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 class MapPainter( @@ -56,29 +55,27 @@ class MapPainter( } private fun beginTrace(event: MapMouseEvent) { - if (event.button == MouseButton.PRIMARY && editorStateVM.selectedLayerIndex >= 0) { + if (currentTrace == null && editorStateVM.selectedLayerIndex >= 0) { currentTrace = when (editorStateVM.selectedLayer) { is TileLayer -> TilePaintingTrace(mapVM, "Paint trace") is ObjectLayer -> ObjectPaintingTrace(mapVM, "Toggle passage") is ImageLayer -> ImagePositionPaintingTrace(mapVM, "Move Image Layer") else -> null - }?.apply { beginTrace(editorStateVM, brushVM, event) } - } - } - - private fun proceedTrace(event: MapMouseEvent) { - if (event.button == MouseButton.PRIMARY) { - currentTrace?.proceedTrace(editorStateVM, brushVM, event) - } - } - - private fun commitTrace(event: MapMouseEvent) { - if (event.button == MouseButton.PRIMARY) { - currentTrace?.let { - it.commitTrace(editorStateVM, brushVM, event) - paintingCallback(it) - currentTrace = null } + ?.takeIf { event.button in it.supportedButtons } + ?.apply { beginTrace(editorStateVM, brushVM, event) } } } + + private fun proceedTrace(event: MapMouseEvent) = currentTrace + ?.takeIf { event.button in it.supportedButtons } + ?.proceedTrace(editorStateVM, brushVM, event) + + private fun commitTrace(event: MapMouseEvent) = currentTrace + ?.takeIf { event.button in it.supportedButtons } + ?.let { + it.commitTrace(editorStateVM, brushVM, event) + paintingCallback(it) + currentTrace = null + } } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/ObjectPaintingTrace.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/ObjectPaintingTrace.kt index 06dc158f..5265db5d 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/ObjectPaintingTrace.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/ObjectPaintingTrace.kt @@ -7,6 +7,7 @@ import com.bartlomiejpluta.base.editor.map.viewmodel.BrushVM import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM import com.bartlomiejpluta.base.editor.render.input.MapMouseEvent +import javafx.scene.input.MouseButton class ObjectPaintingTrace(val map: GameMapVM, override val commandName: String) : PaintingTrace { private var layerIndex = 0 @@ -38,9 +39,15 @@ class ObjectPaintingTrace(val map: GameMapVM, override val commandName: String) formerPassageAbility = layer.passageMap[row][column] - passageAbility = when (brushVM.mode!!) { - BrushMode.PAINTING_MODE -> PassageAbility.values()[(formerPassageAbility.ordinal + 1) % PassageAbility.values().size] - BrushMode.ERASING_MODE -> PassageAbility.ALLOW + passageAbility = when (mouseEvent.button) { + MouseButton.PRIMARY -> when (brushVM.mode!!) { + BrushMode.PAINTING_MODE -> PassageAbility.values()[(formerPassageAbility.ordinal + 1) % PassageAbility.values().size] + BrushMode.ERASING_MODE -> PassageAbility.ALLOW + } + + MouseButton.SECONDARY -> PassageAbility.ALLOW + + else -> throw IllegalStateException("Unsupported mouse button") } layer.passageMap[row][column] = passageAbility @@ -53,4 +60,6 @@ class ObjectPaintingTrace(val map: GameMapVM, override val commandName: String) override fun redo() { layer.passageMap[row][column] = passageAbility } + + override val supportedButtons = arrayOf(MouseButton.PRIMARY, MouseButton.SECONDARY) } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/PaintingTrace.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/PaintingTrace.kt index 134a77bc..154523d7 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/PaintingTrace.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/PaintingTrace.kt @@ -4,9 +4,12 @@ import com.bartlomiejpluta.base.editor.command.model.base.Undoable import com.bartlomiejpluta.base.editor.map.viewmodel.BrushVM import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM import com.bartlomiejpluta.base.editor.render.input.MapMouseEvent +import javafx.scene.input.MouseButton interface PaintingTrace : Undoable { fun beginTrace(editorStateVM: EditorStateVM, brushVM: BrushVM, mouseEvent: MapMouseEvent) fun proceedTrace(editorStateVM: EditorStateVM, brushVM: BrushVM, mouseEvent: MapMouseEvent) fun commitTrace(editorStateVM: EditorStateVM, brushVM: BrushVM, mouseEvent: MapMouseEvent) + + val supportedButtons: Array } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/TilePaintingTrace.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/TilePaintingTrace.kt index 734a14de..74dde474 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/TilePaintingTrace.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/TilePaintingTrace.kt @@ -6,6 +6,7 @@ import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM import com.bartlomiejpluta.base.editor.render.input.MapMouseEvent import com.bartlomiejpluta.base.editor.tileset.model.Tile +import javafx.scene.input.MouseButton data class TilePaintingTrace(val map: GameMapVM, override val commandName: String) : PaintingTrace { @@ -40,7 +41,10 @@ data class TilePaintingTrace(val map: GameMapVM, override val commandName: Strin editorStateVM.selectedLayerIndex, editorStateVM.cursorRow - centerRow + row, editorStateVM.cursorColumn - centerColumn + column, - tile + when (mouseEvent.button) { + MouseButton.PRIMARY -> tile + else -> null + } ) } } @@ -51,7 +55,10 @@ data class TilePaintingTrace(val map: GameMapVM, override val commandName: Strin editorStateVM.selectedLayerIndex, editorStateVM.cursorRow - centerRow + row, editorStateVM.cursorColumn - centerColumn + column, - tile + when (mouseEvent.button) { + MouseButton.PRIMARY -> tile + else -> null + } ) } } @@ -81,4 +88,6 @@ data class TilePaintingTrace(val map: GameMapVM, override val commandName: Strin val tile: Tile? ) } + + override val supportedButtons = arrayOf(MouseButton.PRIMARY, MouseButton.SECONDARY) } \ No newline at end of file