[Editor] Create TileSetAsset object

This commit is contained in:
2021-02-11 22:20:14 +01:00
parent 63458fdf1c
commit 1804f7c50e
5 changed files with 53 additions and 1 deletions

View File

@@ -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<GameMapAsset>()
val tileSets = observableListOf<TileSetAsset>()
val mapsDirectoryProperty = SimpleObjectProperty<File>()
var mapsDirectory by mapsDirectoryProperty
private set
val tileSetsDirectoryProperty = SimpleObjectProperty<File>()
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"
}
}

View File

@@ -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
)
}

View File

@@ -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()
}

View File

@@ -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
}

View File

@@ -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;
}