[Editor] Enable serialization and deserialization for passage map of ObjectLayer
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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() }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user