[Editor] Enable ImageLayer serialization
This commit is contained in:
@@ -38,10 +38,9 @@ class ObjectPaintingTrace(val map: GameMapVM, override val commandName: String)
|
|||||||
|
|
||||||
formerPassageAbility = layer.passageMap[row][column]
|
formerPassageAbility = layer.passageMap[row][column]
|
||||||
|
|
||||||
passageAbility = when (brushVM.mode) {
|
passageAbility = when (brushVM.mode!!) {
|
||||||
BrushMode.PAINTING_MODE -> PassageAbility.values()[(formerPassageAbility.ordinal + 1) % PassageAbility.values().size]
|
BrushMode.PAINTING_MODE -> PassageAbility.values()[(formerPassageAbility.ordinal + 1) % PassageAbility.values().size]
|
||||||
BrushMode.ERASING_MODE -> PassageAbility.ALLOW
|
BrushMode.ERASING_MODE -> PassageAbility.ALLOW
|
||||||
else -> throw IllegalStateException("Unknown brush mode")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
layer.passageMap[row][column] = passageAbility
|
layer.passageMap[row][column] = passageAbility
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
package com.bartlomiejpluta.base.editor.map.serial
|
package com.bartlomiejpluta.base.editor.map.serial
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.editor.map.model.enumeration.ImageLayerMode
|
||||||
import com.bartlomiejpluta.base.editor.map.model.enumeration.PassageAbility
|
import com.bartlomiejpluta.base.editor.map.model.enumeration.PassageAbility
|
||||||
import com.bartlomiejpluta.base.editor.map.model.layer.ColorLayer
|
import com.bartlomiejpluta.base.editor.map.model.layer.*
|
||||||
import com.bartlomiejpluta.base.editor.map.model.layer.Layer
|
|
||||||
import com.bartlomiejpluta.base.editor.map.model.layer.ObjectLayer
|
|
||||||
import com.bartlomiejpluta.base.editor.map.model.layer.TileLayer
|
|
||||||
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
||||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||||
import com.bartlomiejpluta.base.editor.tileset.model.Tile
|
import com.bartlomiejpluta.base.editor.tileset.model.Tile
|
||||||
@@ -40,6 +38,7 @@ class ProtobufMapDeserializer : MapDeserializer {
|
|||||||
proto.hasTileLayer() -> deserializeTileLayer(rows, columns, tileSet, proto)
|
proto.hasTileLayer() -> deserializeTileLayer(rows, columns, tileSet, proto)
|
||||||
proto.hasObjectLayer() -> deserializeObjectLayer(rows, columns, proto)
|
proto.hasObjectLayer() -> deserializeObjectLayer(rows, columns, proto)
|
||||||
proto.hasColorLayer() -> deserializeColorLayer(proto)
|
proto.hasColorLayer() -> deserializeColorLayer(proto)
|
||||||
|
proto.hasImageLayer() -> deserializeImageLayer(proto)
|
||||||
|
|
||||||
else -> throw IllegalStateException("Not supported layer type")
|
else -> throw IllegalStateException("Not supported layer type")
|
||||||
}
|
}
|
||||||
@@ -62,14 +61,13 @@ class ProtobufMapDeserializer : MapDeserializer {
|
|||||||
val passageMap: Array<Array<PassageAbility>> = Array(rows) { Array(columns) { PassageAbility.ALLOW } }
|
val passageMap: Array<Array<PassageAbility>> = Array(rows) { Array(columns) { PassageAbility.ALLOW } }
|
||||||
|
|
||||||
proto.objectLayer.passageMapList.forEachIndexed { index, passage ->
|
proto.objectLayer.passageMapList.forEachIndexed { index, passage ->
|
||||||
passageMap[index / columns][index % columns] = when (passage) {
|
passageMap[index / columns][index % columns] = when (passage!!) {
|
||||||
GameMapProto.PassageAbility.ALLOW -> PassageAbility.ALLOW
|
GameMapProto.PassageAbility.ALLOW -> PassageAbility.ALLOW
|
||||||
GameMapProto.PassageAbility.BLOCK -> PassageAbility.BLOCK
|
GameMapProto.PassageAbility.BLOCK -> PassageAbility.BLOCK
|
||||||
GameMapProto.PassageAbility.UP_ONLY -> PassageAbility.UP_ONLY
|
GameMapProto.PassageAbility.UP_ONLY -> PassageAbility.UP_ONLY
|
||||||
GameMapProto.PassageAbility.DOWN_ONLY -> PassageAbility.DOWN_ONLY
|
GameMapProto.PassageAbility.DOWN_ONLY -> PassageAbility.DOWN_ONLY
|
||||||
GameMapProto.PassageAbility.LEFT_ONLY -> PassageAbility.LEFT_ONLY
|
GameMapProto.PassageAbility.LEFT_ONLY -> PassageAbility.LEFT_ONLY
|
||||||
GameMapProto.PassageAbility.RIGHT_ONLY -> PassageAbility.RIGHT_ONLY
|
GameMapProto.PassageAbility.RIGHT_ONLY -> PassageAbility.RIGHT_ONLY
|
||||||
else -> throw IllegalStateException("Unknown passage ability type")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,4 +83,19 @@ class ProtobufMapDeserializer : MapDeserializer {
|
|||||||
alpha = proto.colorLayer.alpha
|
alpha = proto.colorLayer.alpha
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private fun deserializeImageLayer(proto: GameMapProto.Layer): Layer {
|
||||||
|
return ImageLayer(
|
||||||
|
name = proto.name,
|
||||||
|
imageAsset = projectContext.findImageAsset(proto.imageLayer.imageUID),
|
||||||
|
x = proto.imageLayer.x,
|
||||||
|
y = proto.imageLayer.y,
|
||||||
|
opacity = proto.imageLayer.opacity,
|
||||||
|
mode = when (proto.imageLayer.mode!!) {
|
||||||
|
GameMapProto.ImageLayerMode.NORMAL -> ImageLayerMode.NORMAL
|
||||||
|
GameMapProto.ImageLayerMode.FIT_SCREEN -> ImageLayerMode.FIT_SCREEN
|
||||||
|
GameMapProto.ImageLayerMode.FIT_MAP -> ImageLayerMode.FIT_MAP
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
package com.bartlomiejpluta.base.editor.map.serial
|
package com.bartlomiejpluta.base.editor.map.serial
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.editor.map.model.enumeration.ImageLayerMode
|
||||||
import com.bartlomiejpluta.base.editor.map.model.enumeration.PassageAbility
|
import com.bartlomiejpluta.base.editor.map.model.enumeration.PassageAbility
|
||||||
import com.bartlomiejpluta.base.editor.map.model.layer.ColorLayer
|
import com.bartlomiejpluta.base.editor.map.model.layer.*
|
||||||
import com.bartlomiejpluta.base.editor.map.model.layer.Layer
|
|
||||||
import com.bartlomiejpluta.base.editor.map.model.layer.ObjectLayer
|
|
||||||
import com.bartlomiejpluta.base.editor.map.model.layer.TileLayer
|
|
||||||
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
||||||
import com.bartlomiejpluta.base.proto.GameMapProto
|
import com.bartlomiejpluta.base.proto.GameMapProto
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
@@ -56,6 +54,22 @@ class ProtobufMapSerializer : MapSerializer {
|
|||||||
.build()
|
.build()
|
||||||
.let { GameMapProto.Layer.newBuilder().setName(layer.name).setColorLayer(it).build() }
|
.let { GameMapProto.Layer.newBuilder().setName(layer.name).setColorLayer(it).build() }
|
||||||
|
|
||||||
|
is ImageLayer -> GameMapProto.ImageLayer.newBuilder()
|
||||||
|
.setImageUID(layer.imageAsset.uid)
|
||||||
|
.setOpacity(layer.opacity)
|
||||||
|
.setMode(
|
||||||
|
when (layer.mode!!) {
|
||||||
|
ImageLayerMode.NORMAL -> GameMapProto.ImageLayerMode.NORMAL
|
||||||
|
ImageLayerMode.FIT_SCREEN -> GameMapProto.ImageLayerMode.FIT_SCREEN
|
||||||
|
ImageLayerMode.FIT_MAP -> GameMapProto.ImageLayerMode.FIT_MAP
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.setX(layer.x)
|
||||||
|
.setY(layer.y)
|
||||||
|
.build()
|
||||||
|
.let { GameMapProto.Layer.newBuilder().setName(layer.name).setImageLayer(it).build() }
|
||||||
|
|
||||||
|
|
||||||
else -> throw IllegalStateException("Not supported layer type")
|
else -> throw IllegalStateException("Not supported layer type")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,6 +134,11 @@ class DefaultProjectContext : ProjectContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun findImageAsset(uid: String) = project?.let {
|
||||||
|
it.images.firstOrNull { image -> image.uid == uid }
|
||||||
|
?: throw IllegalStateException("The Image with uid [$uid] does not exist ")
|
||||||
|
} ?: throw IllegalStateException("There is no open project in the context")
|
||||||
|
|
||||||
override fun loadImage(uid: String) = project?.let {
|
override fun loadImage(uid: String) = project?.let {
|
||||||
val asset = it.images.firstOrNull { image -> image.uid == uid }
|
val asset = it.images.firstOrNull { image -> image.uid == uid }
|
||||||
?: throw IllegalStateException("The Image with uid [$uid] does not exist ")
|
?: throw IllegalStateException("The Image with uid [$uid] does not exist ")
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.bartlomiejpluta.base.editor.project.context
|
package com.bartlomiejpluta.base.editor.project.context
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.editor.image.asset.ImageAsset
|
||||||
import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData
|
import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData
|
||||||
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
||||||
import com.bartlomiejpluta.base.editor.project.model.Project
|
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||||
@@ -24,5 +25,6 @@ interface ProjectContext {
|
|||||||
fun loadTileSet(uid: String): TileSet
|
fun loadTileSet(uid: String): TileSet
|
||||||
|
|
||||||
fun importImage(data: ImageAssetData)
|
fun importImage(data: ImageAssetData)
|
||||||
|
fun findImageAsset(uid: String): ImageAsset
|
||||||
fun loadImage(uid: String): Image
|
fun loadImage(uid: String): Image
|
||||||
}
|
}
|
||||||
@@ -47,6 +47,15 @@ message ColorLayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message ImageLayer {
|
message ImageLayer {
|
||||||
// TODO imageUID
|
required string imageUID = 1;
|
||||||
// TODO imageMode
|
required uint32 opacity = 2;
|
||||||
|
required ImageLayerMode mode = 3;
|
||||||
|
required int32 x = 4;
|
||||||
|
required int32 y = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ImageLayerMode {
|
||||||
|
NORMAL = 0;
|
||||||
|
FIT_SCREEN = 1;
|
||||||
|
FIT_MAP = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user