[Editor] Enable basic serialization for object and image layers

The layers' properties are not serialized/deserialized yet. All the protos for object layer and image layer contains actually nothing except the layer name in Layer proto container.
This commit is contained in:
2021-02-17 14:37:10 +01:00
parent 78e11029e5
commit c76ad76d37
4 changed files with 47 additions and 2 deletions

View File

@@ -1,6 +1,8 @@
package com.bartlomiejpluta.base.editor.map.serial
import com.bartlomiejpluta.base.editor.map.model.layer.ImageLayer
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.project.context.ProjectContext
@@ -35,6 +37,8 @@ class ProtobufMapDeserializer : MapDeserializer {
private fun deserializeLayer(rows: Int, columns: Int, tileSet: TileSet, proto: GameMapProto.Layer): Layer {
return when {
proto.hasTileLayer() -> deserializeTileLayer(rows, columns, tileSet, proto)
proto.hasObjectLayer() -> deserializeObjectLayer(proto)
proto.hasImageLayer() -> deserializeImageLayer(proto)
else -> throw IllegalStateException("Not supported layer type")
}
@@ -44,12 +48,20 @@ class ProtobufMapDeserializer : MapDeserializer {
val layer: Array<Array<Tile?>> = Array(rows) { Array(columns) { null } }
proto.tileLayer.tilesList.forEachIndexed { index, tile ->
layer[index / columns][index % columns] = when(tile) {
layer[index / columns][index % columns] = when (tile) {
0 -> null
else -> tileSet.getTile(tile-1)
else -> tileSet.getTile(tile - 1)
}
}
return TileLayer(proto.name, rows, columns, layer)
}
private fun deserializeObjectLayer(proto: GameMapProto.Layer): Layer {
return ObjectLayer(proto.name)
}
private fun deserializeImageLayer(proto: GameMapProto.Layer): Layer {
return ImageLayer(proto.name)
}
}

View File

@@ -1,6 +1,8 @@
package com.bartlomiejpluta.base.editor.map.serial
import com.bartlomiejpluta.base.editor.map.model.layer.ImageLayer
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.proto.GameMapProto
@@ -29,6 +31,14 @@ class ProtobufMapSerializer : MapSerializer {
.build()
.let { GameMapProto.Layer.newBuilder().setName(layer.name).setTileLayer(it).build() }
is ObjectLayer -> GameMapProto.ObjectLayer.newBuilder()
.build()
.let { GameMapProto.Layer.newBuilder().setName(layer.name).setObjectLayer(it).build() }
is ImageLayer -> GameMapProto.ImageLayer.newBuilder()
.build()
.let { GameMapProto.Layer.newBuilder().setName(layer.name).setImageLayer(it).build() }
else -> throw IllegalStateException("Not supported layer type")
}
}