diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt index f2ab18b7..5557bcf7 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt @@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.editor.project.model import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.project.context.DefaultProjectContext +import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleStringProperty import tornadofx.getValue @@ -17,23 +18,32 @@ class Project { val sourceDirectory by sourceDirectoryProperty val maps = observableListOf() + val tileSets = observableListOf() val mapsDirectoryProperty = SimpleObjectProperty() var mapsDirectory by mapsDirectoryProperty private set + val tileSetsDirectoryProperty = SimpleObjectProperty() + var tileSetsDirectory by tileSetsDirectoryProperty + init { sourceDirectoryProperty.addListener { _, _, dir -> - dir?.let { mapsDirectory = File(it, MAPS_DIR) } + dir?.let { + mapsDirectory = File(it, MAPS_DIR) + tileSetsDirectory = File(it, TILESETS_DIR) + } } } fun mkdirs() { sourceDirectory?.mkdirs() mapsDirectory?.mkdirs() + tileSetsDirectory?.mkdirs() } companion object { const val MAPS_DIR = "maps" + const val TILESETS_DIR = "tilesets" } } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/serial/ProtobufProjectDeserializer.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/serial/ProtobufProjectDeserializer.kt index e399d9cf..05c03e92 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/serial/ProtobufProjectDeserializer.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/serial/ProtobufProjectDeserializer.kt @@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.editor.project.serial import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.project.model.Project +import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset import com.bartlomiejpluta.base.proto.ProjectProto import org.springframework.stereotype.Component import java.io.InputStream @@ -14,9 +15,18 @@ class ProtobufProjectDeserializer : ProjectDeserializer { val project = Project() project.name = proto.name project.maps.addAll(proto.mapsList.map(this::deserializeMap)) + project.tileSets.addAll(proto.tileSetsList.map(this::deserializeTileSet)) return project } private fun deserializeMap(map: ProjectProto.GameMapAsset) = GameMapAsset(uid = map.uid, name = map.name) + + private fun deserializeTileSet(tileSet: ProjectProto.TileSetAsset) = TileSetAsset( + uid = tileSet.uid, + source = tileSet.source, + name = tileSet.name, + rows = tileSet.rows, + columns = tileSet.columns + ) } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/serial/ProtobufProjectSerializer.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/serial/ProtobufProjectSerializer.kt index c3be4481..bf94a27c 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/serial/ProtobufProjectSerializer.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/serial/ProtobufProjectSerializer.kt @@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.editor.project.serial import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.project.model.Project +import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset import com.bartlomiejpluta.base.proto.ProjectProto import org.springframework.stereotype.Component import java.io.OutputStream @@ -13,6 +14,7 @@ class ProtobufProjectSerializer : ProjectSerializer { val proto = ProjectProto.Project.newBuilder() proto.name = item.name proto.addAllMaps(item.maps.map(this::serializeMap)) + proto.addAllTileSets(item.tileSets.map(this::serializeTileSet)) proto.build().writeTo(output) } @@ -22,4 +24,9 @@ class ProtobufProjectSerializer : ProjectSerializer { .setName(map.name) .build() + private fun serializeTileSet(tileSet: TileSetAsset) = ProjectProto.TileSetAsset.newBuilder() + .setUid(tileSet.uid) + .setSource(tileSet.source) + .setName(tileSet.name) + .build() } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/tileset/asset/TileSetAsset.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/tileset/asset/TileSetAsset.kt new file mode 100644 index 00000000..ca65cf38 --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/tileset/asset/TileSetAsset.kt @@ -0,0 +1,16 @@ +package com.bartlomiejpluta.base.editor.tileset.asset + +import com.bartlomiejpluta.base.editor.asset.model.Asset +import javafx.beans.property.SimpleStringProperty +import tornadofx.* + +class TileSetAsset( + override val uid: String, + override val source: String, + name: String, + val rows: Int, + val columns: Int +) : Asset { + val nameProperty = SimpleStringProperty(name) + override var name by nameProperty +} diff --git a/proto/src/main/proto/project.proto b/proto/src/main/proto/project.proto index eec7423b..6a0e41a5 100644 --- a/proto/src/main/proto/project.proto +++ b/proto/src/main/proto/project.proto @@ -6,10 +6,19 @@ option java_outer_classname = "ProjectProto"; message Project { required string name = 1; repeated GameMapAsset maps = 2; + repeated TileSetAsset tileSets = 3; } message GameMapAsset { required string uid = 1; required string source = 2; required string name = 3; +} + +message TileSetAsset { + required string uid = 1; + required string source = 2; + required string name = 3; + required uint32 rows = 4; + required uint32 columns = 5; } \ No newline at end of file