From 325071e38455d8df4b81207d2564da5240d0700a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Sat, 20 Feb 2021 11:50:19 +0100 Subject: [PATCH] [Editor] Add support for ImageLayer mode --- .../base/editor/map/canvas/MapCanvas.kt | 17 +++++++++++------ .../map/model/enumeration/ImageLayerMode.kt | 7 +++++++ .../base/editor/map/model/layer/ImageLayer.kt | 6 +++++- .../layer/ImageLayerParametersBinder.kt | 9 ++++++++- .../editor/map/view/editor/MapLayersView.kt | 4 +++- 5 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/enumeration/ImageLayerMode.kt diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/MapCanvas.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/MapCanvas.kt index bb8a9fc2..3492aeba 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/MapCanvas.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/canvas/MapCanvas.kt @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.editor.map.canvas +import com.bartlomiejpluta.base.editor.map.model.enumeration.ImageLayerMode import com.bartlomiejpluta.base.editor.map.model.layer.* import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM @@ -131,14 +132,18 @@ class MapCanvas(val map: GameMapVM, private val editorStateVM: EditorStateVM, pr } private fun renderImageLayer(gc: GraphicsContext, imageLayer: ImageLayer) { - imageLayer.image?.let { - val alpha = gc.globalAlpha - gc.globalAlpha = imageLayer.opacity / 100.0 + val alpha = gc.globalAlpha + gc.globalAlpha = imageLayer.opacity / 100.0 - gc.drawImage(it, 0.0, 0.0) - - gc.globalAlpha = alpha + when (imageLayer.mode) { + ImageLayerMode.NORMAL -> gc.drawImage(imageLayer.image, 0.0, 0.0) + ImageLayerMode.FIT_SCREEN -> gc.drawImage(imageLayer.image, 0.0, 0.0) + ImageLayerMode.FIT_MAP -> gc.drawImage(imageLayer.image, 0.0, 0.0, map.width, map.height) + else -> { + } } + + gc.globalAlpha = alpha } private fun renderGrid(gc: GraphicsContext) { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/enumeration/ImageLayerMode.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/enumeration/ImageLayerMode.kt new file mode 100644 index 00000000..dc474423 --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/enumeration/ImageLayerMode.kt @@ -0,0 +1,7 @@ +package com.bartlomiejpluta.base.editor.map.model.enumeration + +enum class ImageLayerMode { + NORMAL, + FIT_SCREEN, + FIT_MAP +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/layer/ImageLayer.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/layer/ImageLayer.kt index db0484a2..35985475 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/layer/ImageLayer.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/layer/ImageLayer.kt @@ -1,6 +1,7 @@ package com.bartlomiejpluta.base.editor.map.model.layer import com.bartlomiejpluta.base.editor.image.asset.ImageAsset +import com.bartlomiejpluta.base.editor.map.model.enumeration.ImageLayerMode import javafx.beans.binding.Bindings.createObjectBinding import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleStringProperty @@ -8,7 +9,7 @@ import javafx.scene.image.Image import tornadofx.getValue import tornadofx.setValue -class ImageLayer(name: String, imageAsset: ImageAsset, opacity: Int) : Layer { +class ImageLayer(name: String, imageAsset: ImageAsset, mode: ImageLayerMode, opacity: Int) : Layer { override val nameProperty = SimpleStringProperty(name) override var name by nameProperty @@ -25,6 +26,9 @@ class ImageLayer(name: String, imageAsset: ImageAsset, opacity: Int) : Layer { val opacityProperty = SimpleObjectProperty(opacity) var opacity by opacityProperty + val modeProperty = SimpleObjectProperty(mode) + var mode by modeProperty + override fun resize(rows: Int, columns: Int) { // We essentially need to do nothing } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/parameter/layer/ImageLayerParametersBinder.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/parameter/layer/ImageLayerParametersBinder.kt index f2784505..db2f628b 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/parameter/layer/ImageLayerParametersBinder.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/parameter/layer/ImageLayerParametersBinder.kt @@ -1,8 +1,10 @@ package com.bartlomiejpluta.base.editor.map.parameter.layer +import com.bartlomiejpluta.base.editor.common.parameter.model.EnumParameter import com.bartlomiejpluta.base.editor.common.parameter.model.GraphicAssetParameter import com.bartlomiejpluta.base.editor.common.parameter.model.IntegerParameter import com.bartlomiejpluta.base.editor.common.parameter.model.Parameter +import com.bartlomiejpluta.base.editor.map.model.enumeration.ImageLayerMode import com.bartlomiejpluta.base.editor.map.model.layer.ImageLayer import com.bartlomiejpluta.base.editor.project.model.Project import javafx.collections.ObservableList @@ -26,9 +28,14 @@ class ImageLayerParametersBinder : LayerParametersBinder { onCommit() } + val mode = EnumParameter("mode", ImageLayerMode.NORMAL, autocommit = true) { _, _, _ -> + onCommit() + } + image.bindBidirectional(layer.imageAssetProperty) opacity.bindBidirectional(layer.opacityProperty) + mode.bindBidirectional(layer.modeProperty) - parameters.addAll(image, opacity) + parameters.addAll(image, opacity, mode) } } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapLayersView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapLayersView.kt index d9df9388..d3e06115 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapLayersView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapLayersView.kt @@ -9,6 +9,7 @@ import com.bartlomiejpluta.base.editor.command.model.map.RenameLayerCommand import com.bartlomiejpluta.base.editor.command.service.UndoRedoService import com.bartlomiejpluta.base.editor.event.RedrawMapRequestEvent import com.bartlomiejpluta.base.editor.image.asset.ImageAsset +import com.bartlomiejpluta.base.editor.map.model.enumeration.ImageLayerMode import com.bartlomiejpluta.base.editor.map.model.layer.* import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM @@ -87,7 +88,8 @@ class MapLayersView : View() { val scope = UndoableScope() find(scope, SelectGraphicAssetFragment::assets to projectContext.project?.images!!).apply { onComplete { - val layer = ImageLayer("Layer ${mapVM.layers.size + 1}", it as ImageAsset,100) + val layer = + ImageLayer("Layer ${mapVM.layers.size + 1}", it as ImageAsset, ImageLayerMode.NORMAL, 100) val command = CreateLayerCommand(mapVM.item, layer) command.execute() layersPane.selectionModel.select(mapVM.layers.size - 1)