[Editor] Add support for ImageLayer mode

This commit is contained in:
2021-02-20 11:50:19 +01:00
parent 878d6de678
commit 325071e384
5 changed files with 34 additions and 9 deletions

View File

@@ -1,5 +1,6 @@
package com.bartlomiejpluta.base.editor.map.canvas 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.model.layer.*
import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM
import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM 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) { private fun renderImageLayer(gc: GraphicsContext, imageLayer: ImageLayer) {
imageLayer.image?.let { val alpha = gc.globalAlpha
val alpha = gc.globalAlpha gc.globalAlpha = imageLayer.opacity / 100.0
gc.globalAlpha = imageLayer.opacity / 100.0
gc.drawImage(it, 0.0, 0.0) when (imageLayer.mode) {
ImageLayerMode.NORMAL -> gc.drawImage(imageLayer.image, 0.0, 0.0)
gc.globalAlpha = alpha 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) { private fun renderGrid(gc: GraphicsContext) {

View File

@@ -0,0 +1,7 @@
package com.bartlomiejpluta.base.editor.map.model.enumeration
enum class ImageLayerMode {
NORMAL,
FIT_SCREEN,
FIT_MAP
}

View File

@@ -1,6 +1,7 @@
package com.bartlomiejpluta.base.editor.map.model.layer package com.bartlomiejpluta.base.editor.map.model.layer
import com.bartlomiejpluta.base.editor.image.asset.ImageAsset 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.binding.Bindings.createObjectBinding
import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleObjectProperty
import javafx.beans.property.SimpleStringProperty import javafx.beans.property.SimpleStringProperty
@@ -8,7 +9,7 @@ import javafx.scene.image.Image
import tornadofx.getValue import tornadofx.getValue
import tornadofx.setValue 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 val nameProperty = SimpleStringProperty(name)
override var name by nameProperty override var name by nameProperty
@@ -25,6 +26,9 @@ class ImageLayer(name: String, imageAsset: ImageAsset, opacity: Int) : Layer {
val opacityProperty = SimpleObjectProperty(opacity) val opacityProperty = SimpleObjectProperty(opacity)
var opacity by opacityProperty var opacity by opacityProperty
val modeProperty = SimpleObjectProperty(mode)
var mode by modeProperty
override fun resize(rows: Int, columns: Int) { override fun resize(rows: Int, columns: Int) {
// We essentially need to do nothing // We essentially need to do nothing
} }

View File

@@ -1,8 +1,10 @@
package com.bartlomiejpluta.base.editor.map.parameter.layer 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.GraphicAssetParameter
import com.bartlomiejpluta.base.editor.common.parameter.model.IntegerParameter import com.bartlomiejpluta.base.editor.common.parameter.model.IntegerParameter
import com.bartlomiejpluta.base.editor.common.parameter.model.Parameter 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.map.model.layer.ImageLayer
import com.bartlomiejpluta.base.editor.project.model.Project import com.bartlomiejpluta.base.editor.project.model.Project
import javafx.collections.ObservableList import javafx.collections.ObservableList
@@ -26,9 +28,14 @@ class ImageLayerParametersBinder : LayerParametersBinder<ImageLayer> {
onCommit() onCommit()
} }
val mode = EnumParameter("mode", ImageLayerMode.NORMAL, autocommit = true) { _, _, _ ->
onCommit()
}
image.bindBidirectional(layer.imageAssetProperty) image.bindBidirectional(layer.imageAssetProperty)
opacity.bindBidirectional(layer.opacityProperty) opacity.bindBidirectional(layer.opacityProperty)
mode.bindBidirectional(layer.modeProperty)
parameters.addAll(image, opacity) parameters.addAll(image, opacity, mode)
} }
} }

View File

@@ -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.command.service.UndoRedoService
import com.bartlomiejpluta.base.editor.event.RedrawMapRequestEvent import com.bartlomiejpluta.base.editor.event.RedrawMapRequestEvent
import com.bartlomiejpluta.base.editor.image.asset.ImageAsset 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.model.layer.*
import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM import com.bartlomiejpluta.base.editor.map.viewmodel.EditorStateVM
import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM
@@ -87,7 +88,8 @@ class MapLayersView : View() {
val scope = UndoableScope() val scope = UndoableScope()
find<SelectGraphicAssetFragment>(scope, SelectGraphicAssetFragment::assets to projectContext.project?.images!!).apply { find<SelectGraphicAssetFragment>(scope, SelectGraphicAssetFragment::assets to projectContext.project?.images!!).apply {
onComplete { 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) val command = CreateLayerCommand(mapVM.item, layer)
command.execute() command.execute()
layersPane.selectionModel.select(mapVM.layers.size - 1) layersPane.selectionModel.select(mapVM.layers.size - 1)