From b5f13b95b22e46b75d9d11f7f6f91729c2e45246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Mon, 22 Aug 2022 19:22:59 +0200 Subject: [PATCH] [Editor] Enable full support icon sets in editor --- .../editor/asset/component/AssetTreeCell.kt | 2 + .../editor/asset/view/list/AssetsListView.kt | 6 + .../build/generator/AssetMapCodeGenerator.kt | 1 + .../base/editor/iconset/asset/IconSetAsset.kt | 7 + .../editor/iconset/asset/IconSetAssetData.kt | 28 ++++ .../view/importing/ImportIconSetFragment.kt | 147 ++++++++++++++++++ .../iconset/viewmodel/IconSetAssetDataVM.kt | 26 ++++ .../editor/main/controller/MainController.kt | 18 ++- .../project/context/DefaultProjectContext.kt | 15 ++ .../editor/project/context/ProjectContext.kt | 4 +- .../base/editor/project/model/Project.kt | 11 +- .../serial/ProtobufProjectDeserializer.kt | 11 ++ .../serial/ProtobufProjectSerializer.kt | 10 ++ 13 files changed, 283 insertions(+), 3 deletions(-) create mode 100644 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/asset/IconSetAsset.kt create mode 100644 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/asset/IconSetAssetData.kt create mode 100644 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/view/importing/ImportIconSetFragment.kt create mode 100644 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/viewmodel/IconSetAssetDataVM.kt diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/component/AssetTreeCell.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/component/AssetTreeCell.kt index 7d45ea6c..a8e44ae4 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/component/AssetTreeCell.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/component/AssetTreeCell.kt @@ -7,6 +7,7 @@ import com.bartlomiejpluta.base.editor.audio.asset.SoundAsset import com.bartlomiejpluta.base.editor.entityset.asset.EntitySet import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset +import com.bartlomiejpluta.base.editor.iconset.asset.IconSetAsset import com.bartlomiejpluta.base.editor.image.asset.ImageAsset import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset @@ -75,6 +76,7 @@ class AssetTreeCell(renameAsset: (asset: Asset, name: String) -> Asset, deleteAs is ImageAsset -> FontIcon("fa-image") is EntitySet -> FontIcon("fa-male") is AnimationAsset -> FontIcon("fa-film") + is IconSetAsset -> FontIcon("fa-file-image-o") is FontAsset -> FontIcon("fa-font") is WidgetAsset -> FontIcon("fa-tachometer") is SoundAsset -> FontIcon("fa-music") diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/view/list/AssetsListView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/view/list/AssetsListView.kt index 888ea84c..5fe6526f 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/view/list/AssetsListView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/asset/view/list/AssetsListView.kt @@ -37,6 +37,10 @@ class AssetsListView : View() { menuitem("Import Animation...") { mainController.importAnimation() } } + private val iconSets = AssetCategory("Icon Sets").apply { + menuitem("Import Icon Set...") { mainController.importIconSet() } + } + private val fonts = AssetCategory("Fonts").apply { menuitem("Import Font...") { mainController.importFont() } } @@ -56,6 +60,7 @@ class AssetsListView : View() { images, entitySet, animations, + iconSets, fonts, widgets, audio @@ -71,6 +76,7 @@ class AssetsListView : View() { bindContent(images.items, it.images) bindContent(entitySet.items, it.entitySets) bindContent(animations.items, it.animations) + bindContent(iconSets.items, it.iconSets) bindContent(fonts.items, it.fonts) bindContent(widgets.items, it.widgets) bindContent(audio.items, it.sounds) diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/generator/AssetMapCodeGenerator.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/generator/AssetMapCodeGenerator.kt index 8e260a7c..75d0d92d 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/generator/AssetMapCodeGenerator.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/generator/AssetMapCodeGenerator.kt @@ -25,6 +25,7 @@ class AssetMapCodeGenerator : CodeGenerator { generateAssetClass("entsets", project.entitySets), generateAssetClass("images", project.images), generateAssetClass("animations", project.animations), + generateAssetClass("iconsets", project.iconSets), generateAssetClass("fonts", project.fonts), generateAssetClass("widgets", project.widgets), generateAssetClass("sounds", project.sounds) diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/asset/IconSetAsset.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/asset/IconSetAsset.kt new file mode 100644 index 00000000..4080f1dd --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/asset/IconSetAsset.kt @@ -0,0 +1,7 @@ +package com.bartlomiejpluta.base.editor.iconset.asset + +import com.bartlomiejpluta.base.editor.asset.model.Asset +import com.bartlomiejpluta.base.editor.project.model.Project + +class IconSetAsset(project: Project, uid: String, source: String, name: String, val rows: Int, val columns: Int) : + Asset(project.iconSetsDirectoryProperty, uid, source, name) \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/asset/IconSetAssetData.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/asset/IconSetAssetData.kt new file mode 100644 index 00000000..9b3a350b --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/asset/IconSetAssetData.kt @@ -0,0 +1,28 @@ +package com.bartlomiejpluta.base.editor.iconset.asset + +import javafx.beans.property.SimpleIntegerProperty +import javafx.beans.property.SimpleObjectProperty +import javafx.beans.property.SimpleStringProperty +import tornadofx.getValue +import tornadofx.setValue +import java.io.File + +class IconSetAssetData { + val nameProperty = SimpleStringProperty() + var name by nameProperty + + val rowsProperty = SimpleIntegerProperty(1) + var rows by rowsProperty + + val columnsProperty = SimpleIntegerProperty(1) + var columns by columnsProperty + + val iconWidthProperty = SimpleIntegerProperty(1) + var iconWidth by iconWidthProperty + + val iconHeightProperty = SimpleIntegerProperty(1) + var iconHeight by iconHeightProperty + + val fileProperty = SimpleObjectProperty() + var file by fileProperty +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/view/importing/ImportIconSetFragment.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/view/importing/ImportIconSetFragment.kt new file mode 100644 index 00000000..641ae6ee --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/view/importing/ImportIconSetFragment.kt @@ -0,0 +1,147 @@ +package com.bartlomiejpluta.base.editor.iconset.view.importing + +import com.bartlomiejpluta.base.editor.iconset.asset.IconSetAssetData +import com.bartlomiejpluta.base.editor.iconset.viewmodel.IconSetAssetDataVM +import com.bartlomiejpluta.base.editor.util.fx.TextFieldUtil +import javafx.beans.property.SimpleObjectProperty +import javafx.scene.Cursor +import javafx.scene.image.Image +import javafx.stage.FileChooser +import tornadofx.* + +class ImportIconSetFragment : Fragment("Import Icon Set") { + private val dataVM = find() + private val imagePreview = SimpleObjectProperty() + + private var onCompleteConsumer: ((IconSetAssetData) -> Unit)? = null + + init { + dataVM.fileProperty.addListener { _, _, file -> + when (file) { + null -> imagePreview.value = null + else -> file.inputStream().use { imagePreview.value = Image(it) } + } + } + + dataVM.iconWidthProperty.addListener { _, _, width -> + dataVM.columns = (imagePreview.value?.width?.toInt() ?: 1) / width.toInt() + } + + dataVM.iconHeightProperty.addListener { _, _, height -> + dataVM.rows = (imagePreview.value?.height?.toInt() ?: 1) / height.toInt() + } + + dataVM.columnsProperty.addListener { _, _, columns -> + dataVM.iconWidth = (imagePreview.value?.width?.toInt() ?: 1) / columns.toInt() + } + + dataVM.rowsProperty.addListener { _, _, rows -> + dataVM.iconHeight = (imagePreview.value?.height?.toInt() ?: 1) / rows.toInt() + } + + imagePreview.addListener { _, _, _ -> + dataVM.columns = 1 + dataVM.rows = 1 + } + } + + fun onComplete(consumer: (IconSetAssetData) -> Unit) { + this.onCompleteConsumer = consumer + } + + override val root = form { + prefHeight = 480.0 + + fieldset("Import Icon Set") { + hbox { + vbox { + scrollpane { + prefWidth = 300.0 + prefHeightProperty().bind(this@form.heightProperty()) + imageview(imagePreview) + tooltip = tooltip("Click to choose Icon Set file") + cursor = Cursor.HAND + + setOnMouseClicked { + dataVM.file = chooseFile( + title = "Select Icon Set", + filters = arrayOf(FileChooser.ExtensionFilter("PNG Images (*.png)", "*.png")) + ).getOrNull(0) + } + + dataVM.validationContext.addValidator(this@vbox, dataVM.fileProperty) { + when { + it == null -> error("This field is required") + !it.exists() -> error("The file must exist") + else -> null + } + } + } + } + + vbox { + paddingLeft = 20.0 + + field("Icon Set Name") { + textfield(dataVM.nameProperty) { + required() + trimWhitespace() + } + } + + field("Icon Set Rows") { + enableWhen(imagePreview.isNotNull) + spinner(min = 1, max = Integer.MAX_VALUE, property = dataVM.rowsProperty, editable = true) { + required() + editor.textFormatter = TextFieldUtil.integerFormatter(dataVM.rows) + } + } + + field("Icon Set Columns") { + enableWhen(imagePreview.isNotNull) + spinner(min = 1, max = Integer.MAX_VALUE, property = dataVM.columnsProperty, editable = true) { + required() + editor.textFormatter = TextFieldUtil.integerFormatter(dataVM.columns) + } + } + + field("Icon width") { + enableWhen(imagePreview.isNotNull) + spinner(min = 1, max = Integer.MAX_VALUE, property = dataVM.iconWidthProperty, editable = true) { + required() + editor.textFormatter = TextFieldUtil.integerFormatter(dataVM.rows) + } + } + + field("Icon height") { + enableWhen(imagePreview.isNotNull) + spinner(min = 1, max = Integer.MAX_VALUE, property = dataVM.iconHeightProperty, editable = true) { + required() + editor.textFormatter = TextFieldUtil.integerFormatter(dataVM.columns) + } + } + } + } + } + + buttonbar { + button("Import") { + action { + if (dataVM.commit()) { + onCompleteConsumer?.let { it(dataVM.item) } + close() + } + } + } + + button("Reset") { + action { dataVM.rollback() } + } + + + button("Cancel") { + action { close() } + } + } + } +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/viewmodel/IconSetAssetDataVM.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/viewmodel/IconSetAssetDataVM.kt new file mode 100644 index 00000000..1be040df --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/iconset/viewmodel/IconSetAssetDataVM.kt @@ -0,0 +1,26 @@ +package com.bartlomiejpluta.base.editor.iconset.viewmodel + +import com.bartlomiejpluta.base.editor.iconset.asset.IconSetAssetData +import tornadofx.ItemViewModel +import tornadofx.getValue +import tornadofx.setValue + +class IconSetAssetDataVM : ItemViewModel(IconSetAssetData()) { + val nameProperty = bind(IconSetAssetData::nameProperty) + var name by nameProperty + + val rowsProperty = bind(IconSetAssetData::rowsProperty) + var rows by rowsProperty + + val columnsProperty = bind(IconSetAssetData::columnsProperty) + var columns by columnsProperty + + val iconWidthProperty = bind(IconSetAssetData::iconWidthProperty) + var iconWidth by iconWidthProperty + + val iconHeightProperty = bind(IconSetAssetData::iconHeightProperty) + var iconHeight by iconHeightProperty + + val fileProperty = bind(IconSetAssetData::fileProperty) + var file by fileProperty +} \ 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 b57fb511..41c2353a 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 @@ -18,6 +18,8 @@ import com.bartlomiejpluta.base.editor.file.model.ScriptAssetFileNode import com.bartlomiejpluta.base.editor.gui.font.view.importing.ImportFontFragment import com.bartlomiejpluta.base.editor.gui.font.viewmodel.FontAssetDataVM import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAssetData +import com.bartlomiejpluta.base.editor.iconset.view.importing.ImportIconSetFragment +import com.bartlomiejpluta.base.editor.iconset.viewmodel.IconSetAssetDataVM import com.bartlomiejpluta.base.editor.image.view.importing.ImportImageFragment import com.bartlomiejpluta.base.editor.image.viewmodel.ImageAssetDataVM import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset @@ -229,6 +231,20 @@ class MainController : Controller() { } } + fun importIconSet() { + val vm = IconSetAssetDataVM() + val scope = Scope() + setInScope(vm, scope) + + find(scope).apply { + onComplete { + projectContext.importIconSet(it) + } + + openModal(block = true, resizable = false) + } + } + fun importFont() { val vm = FontAssetDataVM() val scope = Scope() @@ -269,6 +285,7 @@ class MainController : Controller() { } } + fun closeAsset(asset: Asset) { when (asset) { is GameMapAsset -> openItems.entries.firstOrNull { (_, item) -> item is GameMapVM && item.uid == asset.uid }?.key?.let { @@ -279,7 +296,6 @@ class MainController : Controller() { } } - fun closeScript(fsNode: FileNode) { openItems.entries.firstOrNull { (_, item) -> item is CodeVM && item.fileNode.absolutePath == fsNode.absolutePath }?.key?.let { openItems.remove(it) 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 32995710..b967b054 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 @@ -15,6 +15,8 @@ import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset import com.bartlomiejpluta.base.editor.gui.font.asset.FontAssetData import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAssetData +import com.bartlomiejpluta.base.editor.iconset.asset.IconSetAsset +import com.bartlomiejpluta.base.editor.iconset.asset.IconSetAssetData import com.bartlomiejpluta.base.editor.image.asset.ImageAsset import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset @@ -224,6 +226,19 @@ class DefaultProjectContext : ProjectContext { } } + override fun importIconSet(data: IconSetAssetData) { + project?.let { + UID.next(it.iconSets.map(Asset::uid)).let { uid -> + val source = "$uid.${data.file.extension}" + val targetFile = File(it.iconSetsDirectory, source) + data.file.copyTo(targetFile) + it.iconSets += IconSetAsset(it, uid, source, data.name, data.rows, data.columns) + + save() + } + } + } + override fun importFont(data: FontAssetData) { project?.let { UID.next(it.fonts.map(Asset::uid)).let { uid -> 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 2444598e..27158898 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 @@ -9,6 +9,7 @@ import com.bartlomiejpluta.base.editor.file.model.FileNode import com.bartlomiejpluta.base.editor.gui.font.asset.FontAssetData import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAssetData +import com.bartlomiejpluta.base.editor.iconset.asset.IconSetAssetData import com.bartlomiejpluta.base.editor.image.asset.ImageAsset import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData import com.bartlomiejpluta.base.editor.map.model.map.GameMap @@ -43,12 +44,13 @@ interface ProjectContext { fun importAnimation(data: AnimationAssetData) + fun importIconSet(data: IconSetAssetData) + fun importFont(data: FontAssetData) fun createWidget(data: WidgetAssetData): WidgetAsset fun importSound(data: SoundAssetData) - fun deleteAsset(asset: Asset) fun loadScript(fileNode: FileNode, execute: ((String) -> Unit)?, saveable: Boolean): Code fun saveScript(code: Code) 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 c9c1d6bd..a81fe687 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 @@ -7,6 +7,7 @@ import com.bartlomiejpluta.base.editor.entityset.asset.EntitySet import com.bartlomiejpluta.base.editor.file.model.FileSystemNode import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset +import com.bartlomiejpluta.base.editor.iconset.asset.IconSetAsset import com.bartlomiejpluta.base.editor.image.asset.ImageAsset import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset @@ -39,11 +40,12 @@ class Project { val images = observableListOf() val entitySets = observableListOf() val animations = observableListOf() + val iconSets = observableListOf() val fonts = observableListOf() val widgets = observableListOf() val sounds = observableListOf() - val assetLists = listOf(maps, tileSets, images, entitySets, animations, fonts, widgets, sounds) + val assetLists = listOf(maps, tileSets, images, entitySets, animations, iconSets, fonts, widgets, sounds) val mapsDirectoryProperty = SimpleObjectProperty() var mapsDirectory by mapsDirectoryProperty @@ -65,6 +67,10 @@ class Project { var animationsDirectory by animationsDirectoryProperty private set + val iconSetsDirectoryProperty = SimpleObjectProperty() + var iconSetsDirectory by iconSetsDirectoryProperty + private set + val fontsDirectoryProperty = SimpleObjectProperty() var fontsDirectory by fontsDirectoryProperty private set @@ -126,6 +132,7 @@ class Project { imagesDirectory = File(it, IMAGES_DIR) entitySetsDirectory = File(it, ENTITY_SETS_DIR) animationsDirectory = File(it, ANIMATIONS_DIR) + iconSetsDirectory = File(it, ICONSETS_DIR) fontsDirectory = File(it, FONTS_DIR) widgetsDirectory = File(it, WIDGETS_DIR) audioDirectory = File(it, AUDIO_DIR) @@ -156,6 +163,7 @@ class Project { imagesDirectory?.mkdirs() entitySetsDirectory?.mkdirs() animationsDirectory?.mkdirs() + iconSetsDirectory?.mkdirs() fontsDirectory?.mkdirs() widgetsDirectory?.mkdirs() audioDirectory?.mkdirs() @@ -173,6 +181,7 @@ class Project { const val IMAGES_DIR = "images" const val ENTITY_SETS_DIR = "entsets" const val ANIMATIONS_DIR = "animations" + const val ICONSETS_DIR = "iconsets" const val FONTS_DIR = "fonts" const val WIDGETS_DIR = "widgets" const val AUDIO_DIR = "audio" 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 8ea56376..dd4b0bfb 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 @@ -5,6 +5,7 @@ import com.bartlomiejpluta.base.editor.audio.asset.SoundAsset import com.bartlomiejpluta.base.editor.entityset.asset.EntitySet import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset +import com.bartlomiejpluta.base.editor.iconset.asset.IconSetAsset import com.bartlomiejpluta.base.editor.image.asset.ImageAsset import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.project.model.Project @@ -27,6 +28,7 @@ class ProtobufProjectDeserializer : ProjectDeserializer { images.addAll(proto.imagesList.map { deserializeImage(this, it) }) entitySets.addAll(proto.entitySetsList.map { deserializeEntitySet(this, it) }) animations.addAll(proto.animationsList.map { deserializeAnimation(this, it) }) + iconSets.addAll(proto.iconSetsList.map { deserializeIconSet(this, it) }) fonts.addAll(proto.fontsList.map { deserializeFont(this, it) }) widgets.addAll(proto.widgetsList.map { deserializeWidget(this, it) }) sounds.addAll(proto.soundsList.map { deserializeSound(this, it) }) @@ -73,6 +75,15 @@ class ProtobufProjectDeserializer : ProjectDeserializer { columns = animationAsset.columns ) + private fun deserializeIconSet(project: Project, iconSetAsset: ProjectProto.IconSetAsset) = IconSetAsset( + project = project, + uid = iconSetAsset.uid, + source = iconSetAsset.source, + name = iconSetAsset.name, + rows = iconSetAsset.rows, + columns = iconSetAsset.columns + ) + private fun deserializeFont(project: Project, fontAsset: ProjectProto.FontAsset) = FontAsset( project = project, uid = fontAsset.uid, 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 2b7fab64..5b141dc1 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 @@ -5,6 +5,7 @@ import com.bartlomiejpluta.base.editor.audio.asset.SoundAsset import com.bartlomiejpluta.base.editor.entityset.asset.EntitySet import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset +import com.bartlomiejpluta.base.editor.iconset.asset.IconSetAsset import com.bartlomiejpluta.base.editor.image.asset.ImageAsset import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.project.model.Project @@ -25,6 +26,7 @@ class ProtobufProjectSerializer : ProjectSerializer { proto.addAllImages(item.images.map(this::serializeImage)) proto.addAllEntitySets(item.entitySets.map(this::serializeEntitySet)) proto.addAllAnimations(item.animations.map(this::serializeAnimation)) + proto.addAllIconSets(item.iconSets.map(this::serializeIconSet)) proto.addAllFonts(item.fonts.map(this::serializeFont)) proto.addAllWidgets(item.widgets.map(this::serializeWidget)) proto.addAllSounds(item.sounds.map(this::serializeSound)) @@ -67,6 +69,14 @@ class ProtobufProjectSerializer : ProjectSerializer { .setColumns(animation.columns) .build() + private fun serializeIconSet(iconSet: IconSetAsset) = ProjectProto.IconSetAsset.newBuilder() + .setUid(iconSet.uid) + .setSource(iconSet.source) + .setName(iconSet.name) + .setRows(iconSet.rows) + .setColumns(iconSet.columns) + .build() + private fun serializeFont(font: FontAsset) = ProjectProto.FontAsset.newBuilder() .setUid(font.uid) .setSource(font.source)