diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/model/Asset.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/model/Asset.kt index d3bd737b..186ac855 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/model/Asset.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/model/Asset.kt @@ -3,4 +3,5 @@ package com.bartlomiejpluta.base.editor.asset.model interface Asset { val uid: String val source: String + var name: String } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt index 40dd3bab..6c3846c8 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt @@ -40,7 +40,7 @@ class MainController : Controller() { find(scope).apply { onComplete { vm.item.build().let { map -> - projectContext.attachMap(map) + projectContext.importMap(vm.name, map) openMaps[scope] = map } } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainView.kt index efdba799..8dee97fb 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainView.kt @@ -29,7 +29,7 @@ class MainView : View("BASE Game Editor") { Tab().apply { val vm = GameMapVM(map) setInScope(vm, scope) - textProperty().bindBidirectional(map.nameProperty) + projectContext.project?.maps?.get(map.uid)?.let { textProperty().bindBidirectional(it.nameProperty) } content = find(scope).root setOnClosed { mainController.openMaps.remove(scope) } } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/asset/GameMapAsset.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/asset/GameMapAsset.kt index 26c637ff..c8c2a1ad 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/asset/GameMapAsset.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/asset/GameMapAsset.kt @@ -1,13 +1,18 @@ package com.bartlomiejpluta.base.editor.map.asset import com.bartlomiejpluta.base.editor.asset.model.Asset +import javafx.beans.property.SimpleStringProperty +import tornadofx.* // TODO(Add tileSetUID field) -data class GameMapAsset( +class GameMapAsset( override val uid: String, - val name: String, + name: String, val rows: Int, val columns: Int, ) : Asset { override val source = "$uid.dat" + + val nameProperty = SimpleStringProperty(name) + override var name by nameProperty } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/map/GameMap.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/map/GameMap.kt index b40cf851..946bf4e3 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/map/GameMap.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/map/GameMap.kt @@ -17,9 +17,6 @@ class GameMap(val tileSet: TileSet) { val layers = observableListOf() - val nameProperty = SimpleStringProperty() - var name by nameProperty - val tileWidth = tileSet.tileWidth.toDouble() val tileHeight = tileSet.tileHeight.toDouble() diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/map/GameMapBuilder.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/map/GameMapBuilder.kt index 0ae249fe..7289c5cd 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/map/GameMapBuilder.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/model/map/GameMapBuilder.kt @@ -20,8 +20,7 @@ class GameMapBuilder { var columns by columnsProperty fun build() = GameMap(tileSet).apply { - name = this@GameMapBuilder.name - rows = this@GameMapBuilder.rows - columns = this@GameMapBuilder.columns + this.rows = this@GameMapBuilder.rows + this.columns = this@GameMapBuilder.columns } } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/serial/ProtobufMapDeserializer.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/serial/ProtobufMapDeserializer.kt index 9ff0a46a..3ec82719 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/serial/ProtobufMapDeserializer.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/serial/ProtobufMapDeserializer.kt @@ -19,7 +19,6 @@ class ProtobufMapDeserializer : MapDeserializer { val map = GameMap(tileset) val proto = GameMapProto.GameMap.parseFrom(input) map.uid = proto.uid - map.name = proto.name map.rows = proto.rows map.columns = proto.columns diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/serial/ProtobufMapSerializer.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/serial/ProtobufMapSerializer.kt index c11fb1ea..6a98b8c8 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/serial/ProtobufMapSerializer.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/serial/ProtobufMapSerializer.kt @@ -13,7 +13,6 @@ class ProtobufMapSerializer : MapSerializer { override fun serialize(item: GameMap, output: OutputStream) { val protoMap = GameMapProto.GameMap.newBuilder() protoMap.uid = item.uid - protoMap.name = item.name protoMap.rows = item.rows protoMap.columns = item.columns diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapBasicDataSettingsFragment.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapSettingsFragment.kt similarity index 89% rename from editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapBasicDataSettingsFragment.kt rename to editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapSettingsFragment.kt index 40b147de..1896c609 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapBasicDataSettingsFragment.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapSettingsFragment.kt @@ -5,7 +5,7 @@ import com.bartlomiejpluta.base.editor.command.service.UndoRedoService import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM import tornadofx.* -class MapBasicDataSettingsFragment : Fragment("Map Settings") { +class MapSettingsFragment : Fragment("Map Settings") { override val scope = super.scope as UndoableScope private val undoRedoService: UndoRedoService by di() @@ -16,13 +16,6 @@ class MapBasicDataSettingsFragment : Fragment("Map Settings") { override val root = form { fieldset("Map Settings") { - field("Map name") { - textfield(mapVM.nameProperty) { - required() - whenDocked { requestFocus() } - } - } - field("Rows") { textfield(mapVM.rowsProperty) { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapToolbarView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapToolbarView.kt index e0603e35..b8deadf9 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapToolbarView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/view/editor/MapToolbarView.kt @@ -98,7 +98,7 @@ class MapToolbarView : View() { button(graphic = FontIcon("fa-sliders")) { action { - find().openModal(block = true, resizable = false) + find().openModal(block = true, resizable = false) } } } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/viewmodel/GameMapVM.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/viewmodel/GameMapVM.kt index d205bbf9..5d7d0e91 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/viewmodel/GameMapVM.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/map/viewmodel/GameMapVM.kt @@ -10,9 +10,6 @@ import tornadofx.setValue class GameMapVM(map: GameMap) : ItemViewModel(map) { val layers: SimpleListProperty = bind(GameMap::layers) - val nameProperty = bind(GameMap::nameProperty) - var name by nameProperty - val tileSetProperty = bind(GameMap::tileSet) val tileSet by tileSetProperty diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt index 2cda87f2..cdad8a77 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt @@ -69,12 +69,12 @@ class DefaultProjectContext : ProjectContext { .let { project = it } } - override fun attachMap(map: GameMap) { + override fun importMap(name: String, map: GameMap) { project?.let { - UID.next(it.maps.map(Asset::uid)).let { uid -> - val asset = GameMapAsset(uid, map.name, map.rows, map.columns) + UID.next(it.maps.keys).let { uid -> + val asset = GameMapAsset(uid, name, map.rows, map.columns) map.uid = uid - it.maps += asset + it.maps[uid] = asset save() File(mapsDirectory, asset.source).outputStream().use { fos -> mapSerializer.serialize(map, fos) } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/ProjectContext.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/ProjectContext.kt index d3d4271d..8a439b89 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/ProjectContext.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/ProjectContext.kt @@ -12,5 +12,5 @@ interface ProjectContext { fun save() fun open(file: File) - fun attachMap(map: GameMap) + fun importMap(name: String, map: GameMap) } \ No newline at end of file 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 4dc4d485..c414702d 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 @@ -5,6 +5,7 @@ import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleStringProperty import tornadofx.getValue import tornadofx.observableListOf +import tornadofx.observableMapOf import tornadofx.setValue import java.io.File @@ -15,5 +16,5 @@ class Project { val sourceDirectoryProperty = SimpleObjectProperty() val sourceDirectory by sourceDirectoryProperty - val maps = observableListOf() + val maps = observableMapOf() } 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 ce885fae..ee89e638 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 @@ -14,7 +14,7 @@ class ProtobufProjectDeserializer : ProjectDeserializer { val proto = ProjectProto.Project.parseFrom(input) val project = Project() project.name = proto.name - project.maps.addAll(proto.mapsList.map(this::deserializeMap)) + project.maps.putAll(proto.mapsList.map { it.uid to deserializeMap(it) }) return project } 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 6b34edd3..d69e3746 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 @@ -12,7 +12,7 @@ class ProtobufProjectSerializer : ProjectSerializer { override fun serialize(item: Project, output: OutputStream) { val proto = ProjectProto.Project.newBuilder() proto.name = item.name - proto.addAllMaps(item.maps.map(this::serializeMap)) + proto.addAllMaps(item.maps.values.map(this::serializeMap)) proto.build().writeTo(output) } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/util/uid/UID.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/util/uid/UID.kt index c1af6c65..9fc6beb5 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/util/uid/UID.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/util/uid/UID.kt @@ -3,12 +3,12 @@ package com.bartlomiejpluta.base.editor.util.uid import java.util.* object UID { - fun next(sequence: List): String { + fun next(sequence: Iterable): String { var uid: String do { uid = UUID.randomUUID().toString() - } while(uid in sequence) + } while (uid in sequence) return uid } diff --git a/proto/src/main/proto/map.proto b/proto/src/main/proto/map.proto index 3eaa50dc..1bc3c510 100644 --- a/proto/src/main/proto/map.proto +++ b/proto/src/main/proto/map.proto @@ -5,10 +5,9 @@ option java_outer_classname = "GameMapProto"; message GameMap { required string uid = 1; - required string name = 2; - required uint32 rows = 3; - required uint32 columns = 4; - repeated Layer layers = 5; + required uint32 rows = 2; + required uint32 columns = 3; + repeated Layer layers = 4; } message Layer {