[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:
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,10 @@ public class ProtobufMapDeserializer extends MapDeserializer {
|
||||
private void deserializeLayer(GameMap map, GameMapProto.Layer proto) {
|
||||
if (proto.hasTileLayer()) {
|
||||
deserializeTileLayer(map, proto);
|
||||
} else if (proto.hasObjectLayer()) {
|
||||
deserializeObjectLayer(map, proto);
|
||||
} else if (proto.hasImageLayer()) {
|
||||
deserializeImageLayer(map, proto);
|
||||
} else {
|
||||
throw new AppException("Not supported layer type");
|
||||
}
|
||||
@@ -51,4 +55,12 @@ public class ProtobufMapDeserializer extends MapDeserializer {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deserializeObjectLayer(GameMap map, GameMapProto.Layer proto) {
|
||||
var layer = map.createObjectLayer();
|
||||
}
|
||||
|
||||
private void deserializeImageLayer(GameMap map, GameMapProto.Layer proto) {
|
||||
// TODO(return new ImageLayer(...))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,20 @@ message Layer {
|
||||
|
||||
oneof layer {
|
||||
TileLayer tileLayer = 2;
|
||||
ObjectLayer objectLayer = 3;
|
||||
ImageLayer imageLayer = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message TileLayer {
|
||||
repeated uint32 tiles = 1;
|
||||
}
|
||||
|
||||
message ObjectLayer {
|
||||
// TODO list of passage abilities
|
||||
}
|
||||
|
||||
message ImageLayer {
|
||||
// TODO optional imageUID
|
||||
// TODO r, g, b, alpha
|
||||
}
|
||||
Reference in New Issue
Block a user