[Editor] Enable serialization and deserialization for passage map of ObjectLayer

This commit is contained in:
2021-02-17 22:42:48 +01:00
parent 7f57514b18
commit 973b0ada58
5 changed files with 55 additions and 4 deletions

View File

@@ -5,7 +5,7 @@ import javafx.scene.canvas.GraphicsContext
import javafx.scene.paint.Color
object PassageAbilitySymbol {
private const val SIZE = 0.6
private const val SIZE = 0.7
fun render(gc: GraphicsContext, x: Double, y: Double, w: Double, h: Double, passageAbility: PassageAbility) {
val fill = gc.fill

View File

@@ -1,5 +1,6 @@
package com.bartlomiejpluta.base.editor.map.serial
import com.bartlomiejpluta.base.editor.map.model.enumeration.PassageAbility
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
@@ -58,7 +59,21 @@ class ProtobufMapDeserializer : MapDeserializer {
}
private fun deserializeObjectLayer(rows: Int, columns: Int, proto: GameMapProto.Layer): Layer {
return ObjectLayer(proto.name, rows, columns)
val passageMap: Array<Array<PassageAbility>> = Array(rows) { Array(columns) { PassageAbility.ALLOW } }
proto.objectLayer.passageMapList.forEachIndexed { index, passage ->
passageMap[index / columns][index % columns] = when (passage) {
GameMapProto.PassageAbility.ALLOW -> PassageAbility.ALLOW
GameMapProto.PassageAbility.BLOCK -> PassageAbility.BLOCK
GameMapProto.PassageAbility.UP_ONLY -> PassageAbility.UP_ONLY
GameMapProto.PassageAbility.DOWN_ONLY -> PassageAbility.DOWN_ONLY
GameMapProto.PassageAbility.LEFT_ONLY -> PassageAbility.LEFT_ONLY
GameMapProto.PassageAbility.RIGHT_ONLY -> PassageAbility.RIGHT_ONLY
else -> throw IllegalStateException("Unknown passage ability type")
}
}
return ObjectLayer(proto.name, rows, columns, passageMap)
}
private fun deserializeImageLayer(proto: GameMapProto.Layer): Layer {

View File

@@ -1,5 +1,6 @@
package com.bartlomiejpluta.base.editor.map.serial
import com.bartlomiejpluta.base.editor.map.model.enumeration.PassageAbility
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
@@ -31,7 +32,19 @@ class ProtobufMapSerializer : MapSerializer {
.build()
.let { GameMapProto.Layer.newBuilder().setName(layer.name).setTileLayer(it).build() }
is ObjectLayer -> GameMapProto.ObjectLayer.newBuilder()
is ObjectLayer -> layer.passageMap.flatMap { it.asIterable() }
.fold(GameMapProto.ObjectLayer.newBuilder()) { acc, passage ->
acc.addPassageMap(
when (passage) {
PassageAbility.ALLOW -> GameMapProto.PassageAbility.ALLOW
PassageAbility.BLOCK -> GameMapProto.PassageAbility.BLOCK
PassageAbility.UP_ONLY -> GameMapProto.PassageAbility.UP_ONLY
PassageAbility.DOWN_ONLY -> GameMapProto.PassageAbility.DOWN_ONLY
PassageAbility.LEFT_ONLY -> GameMapProto.PassageAbility.LEFT_ONLY
PassageAbility.RIGHT_ONLY -> GameMapProto.PassageAbility.RIGHT_ONLY
}
)
}
.build()
.let { GameMapProto.Layer.newBuilder().setName(layer.name).setObjectLayer(it).build() }