[Editor] Enable full support icon sets in editor

This commit is contained in:
2022-08-22 19:22:59 +02:00
parent 5fc12dbe66
commit b5f13b95b2
13 changed files with 283 additions and 3 deletions

View File

@@ -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.entityset.asset.EntitySet
import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset
import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset 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.image.asset.ImageAsset
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset
import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset 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 ImageAsset -> FontIcon("fa-image")
is EntitySet -> FontIcon("fa-male") is EntitySet -> FontIcon("fa-male")
is AnimationAsset -> FontIcon("fa-film") is AnimationAsset -> FontIcon("fa-film")
is IconSetAsset -> FontIcon("fa-file-image-o")
is FontAsset -> FontIcon("fa-font") is FontAsset -> FontIcon("fa-font")
is WidgetAsset -> FontIcon("fa-tachometer") is WidgetAsset -> FontIcon("fa-tachometer")
is SoundAsset -> FontIcon("fa-music") is SoundAsset -> FontIcon("fa-music")

View File

@@ -37,6 +37,10 @@ class AssetsListView : View() {
menuitem("Import Animation...") { mainController.importAnimation() } menuitem("Import Animation...") { mainController.importAnimation() }
} }
private val iconSets = AssetCategory("Icon Sets").apply {
menuitem("Import Icon Set...") { mainController.importIconSet() }
}
private val fonts = AssetCategory("Fonts").apply { private val fonts = AssetCategory("Fonts").apply {
menuitem("Import Font...") { mainController.importFont() } menuitem("Import Font...") { mainController.importFont() }
} }
@@ -56,6 +60,7 @@ class AssetsListView : View() {
images, images,
entitySet, entitySet,
animations, animations,
iconSets,
fonts, fonts,
widgets, widgets,
audio audio
@@ -71,6 +76,7 @@ class AssetsListView : View() {
bindContent(images.items, it.images) bindContent(images.items, it.images)
bindContent(entitySet.items, it.entitySets) bindContent(entitySet.items, it.entitySets)
bindContent(animations.items, it.animations) bindContent(animations.items, it.animations)
bindContent(iconSets.items, it.iconSets)
bindContent(fonts.items, it.fonts) bindContent(fonts.items, it.fonts)
bindContent(widgets.items, it.widgets) bindContent(widgets.items, it.widgets)
bindContent(audio.items, it.sounds) bindContent(audio.items, it.sounds)

View File

@@ -25,6 +25,7 @@ class AssetMapCodeGenerator : CodeGenerator {
generateAssetClass("entsets", project.entitySets), generateAssetClass("entsets", project.entitySets),
generateAssetClass("images", project.images), generateAssetClass("images", project.images),
generateAssetClass("animations", project.animations), generateAssetClass("animations", project.animations),
generateAssetClass("iconsets", project.iconSets),
generateAssetClass("fonts", project.fonts), generateAssetClass("fonts", project.fonts),
generateAssetClass("widgets", project.widgets), generateAssetClass("widgets", project.widgets),
generateAssetClass("sounds", project.sounds) generateAssetClass("sounds", project.sounds)

View File

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

View File

@@ -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<File>()
var file by fileProperty
}

View File

@@ -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<IconSetAssetDataVM>()
private val imagePreview = SimpleObjectProperty<Image?>()
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() }
}
}
}
}

View File

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

View File

@@ -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.view.importing.ImportFontFragment
import com.bartlomiejpluta.base.editor.gui.font.viewmodel.FontAssetDataVM import com.bartlomiejpluta.base.editor.gui.font.viewmodel.FontAssetDataVM
import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAssetData 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.view.importing.ImportImageFragment
import com.bartlomiejpluta.base.editor.image.viewmodel.ImageAssetDataVM import com.bartlomiejpluta.base.editor.image.viewmodel.ImageAssetDataVM
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset 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<ImportIconSetFragment>(scope).apply {
onComplete {
projectContext.importIconSet(it)
}
openModal(block = true, resizable = false)
}
}
fun importFont() { fun importFont() {
val vm = FontAssetDataVM() val vm = FontAssetDataVM()
val scope = Scope() val scope = Scope()
@@ -269,6 +285,7 @@ class MainController : Controller() {
} }
} }
fun closeAsset(asset: Asset) { fun closeAsset(asset: Asset) {
when (asset) { when (asset) {
is GameMapAsset -> openItems.entries.firstOrNull { (_, item) -> item is GameMapVM && item.uid == asset.uid }?.key?.let { 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) { fun closeScript(fsNode: FileNode) {
openItems.entries.firstOrNull { (_, item) -> item is CodeVM && item.fileNode.absolutePath == fsNode.absolutePath }?.key?.let { openItems.entries.firstOrNull { (_, item) -> item is CodeVM && item.fileNode.absolutePath == fsNode.absolutePath }?.key?.let {
openItems.remove(it) openItems.remove(it)

View File

@@ -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.font.asset.FontAssetData
import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset
import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAssetData 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.ImageAsset
import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset 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) { override fun importFont(data: FontAssetData) {
project?.let { project?.let {
UID.next(it.fonts.map(Asset::uid)).let { uid -> UID.next(it.fonts.map(Asset::uid)).let { uid ->

View File

@@ -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.font.asset.FontAssetData
import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset
import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAssetData 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.ImageAsset
import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData
import com.bartlomiejpluta.base.editor.map.model.map.GameMap import com.bartlomiejpluta.base.editor.map.model.map.GameMap
@@ -43,12 +44,13 @@ interface ProjectContext {
fun importAnimation(data: AnimationAssetData) fun importAnimation(data: AnimationAssetData)
fun importIconSet(data: IconSetAssetData)
fun importFont(data: FontAssetData) fun importFont(data: FontAssetData)
fun createWidget(data: WidgetAssetData): WidgetAsset fun createWidget(data: WidgetAssetData): WidgetAsset
fun importSound(data: SoundAssetData) fun importSound(data: SoundAssetData)
fun deleteAsset(asset: Asset) fun deleteAsset(asset: Asset)
fun loadScript(fileNode: FileNode, execute: ((String) -> Unit)?, saveable: Boolean): Code fun loadScript(fileNode: FileNode, execute: ((String) -> Unit)?, saveable: Boolean): Code
fun saveScript(code: Code) fun saveScript(code: Code)

View File

@@ -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.file.model.FileSystemNode
import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset
import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset 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.image.asset.ImageAsset
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset
import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset
@@ -39,11 +40,12 @@ class Project {
val images = observableListOf<ImageAsset>() val images = observableListOf<ImageAsset>()
val entitySets = observableListOf<EntitySet>() val entitySets = observableListOf<EntitySet>()
val animations = observableListOf<AnimationAsset>() val animations = observableListOf<AnimationAsset>()
val iconSets = observableListOf<IconSetAsset>()
val fonts = observableListOf<FontAsset>() val fonts = observableListOf<FontAsset>()
val widgets = observableListOf<WidgetAsset>() val widgets = observableListOf<WidgetAsset>()
val sounds = observableListOf<SoundAsset>() val sounds = observableListOf<SoundAsset>()
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<File>() val mapsDirectoryProperty = SimpleObjectProperty<File>()
var mapsDirectory by mapsDirectoryProperty var mapsDirectory by mapsDirectoryProperty
@@ -65,6 +67,10 @@ class Project {
var animationsDirectory by animationsDirectoryProperty var animationsDirectory by animationsDirectoryProperty
private set private set
val iconSetsDirectoryProperty = SimpleObjectProperty<File>()
var iconSetsDirectory by iconSetsDirectoryProperty
private set
val fontsDirectoryProperty = SimpleObjectProperty<File>() val fontsDirectoryProperty = SimpleObjectProperty<File>()
var fontsDirectory by fontsDirectoryProperty var fontsDirectory by fontsDirectoryProperty
private set private set
@@ -126,6 +132,7 @@ class Project {
imagesDirectory = File(it, IMAGES_DIR) imagesDirectory = File(it, IMAGES_DIR)
entitySetsDirectory = File(it, ENTITY_SETS_DIR) entitySetsDirectory = File(it, ENTITY_SETS_DIR)
animationsDirectory = File(it, ANIMATIONS_DIR) animationsDirectory = File(it, ANIMATIONS_DIR)
iconSetsDirectory = File(it, ICONSETS_DIR)
fontsDirectory = File(it, FONTS_DIR) fontsDirectory = File(it, FONTS_DIR)
widgetsDirectory = File(it, WIDGETS_DIR) widgetsDirectory = File(it, WIDGETS_DIR)
audioDirectory = File(it, AUDIO_DIR) audioDirectory = File(it, AUDIO_DIR)
@@ -156,6 +163,7 @@ class Project {
imagesDirectory?.mkdirs() imagesDirectory?.mkdirs()
entitySetsDirectory?.mkdirs() entitySetsDirectory?.mkdirs()
animationsDirectory?.mkdirs() animationsDirectory?.mkdirs()
iconSetsDirectory?.mkdirs()
fontsDirectory?.mkdirs() fontsDirectory?.mkdirs()
widgetsDirectory?.mkdirs() widgetsDirectory?.mkdirs()
audioDirectory?.mkdirs() audioDirectory?.mkdirs()
@@ -173,6 +181,7 @@ class Project {
const val IMAGES_DIR = "images" const val IMAGES_DIR = "images"
const val ENTITY_SETS_DIR = "entsets" const val ENTITY_SETS_DIR = "entsets"
const val ANIMATIONS_DIR = "animations" const val ANIMATIONS_DIR = "animations"
const val ICONSETS_DIR = "iconsets"
const val FONTS_DIR = "fonts" const val FONTS_DIR = "fonts"
const val WIDGETS_DIR = "widgets" const val WIDGETS_DIR = "widgets"
const val AUDIO_DIR = "audio" const val AUDIO_DIR = "audio"

View File

@@ -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.entityset.asset.EntitySet
import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset
import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset 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.image.asset.ImageAsset
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset
import com.bartlomiejpluta.base.editor.project.model.Project import com.bartlomiejpluta.base.editor.project.model.Project
@@ -27,6 +28,7 @@ class ProtobufProjectDeserializer : ProjectDeserializer {
images.addAll(proto.imagesList.map { deserializeImage(this, it) }) images.addAll(proto.imagesList.map { deserializeImage(this, it) })
entitySets.addAll(proto.entitySetsList.map { deserializeEntitySet(this, it) }) entitySets.addAll(proto.entitySetsList.map { deserializeEntitySet(this, it) })
animations.addAll(proto.animationsList.map { deserializeAnimation(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) }) fonts.addAll(proto.fontsList.map { deserializeFont(this, it) })
widgets.addAll(proto.widgetsList.map { deserializeWidget(this, it) }) widgets.addAll(proto.widgetsList.map { deserializeWidget(this, it) })
sounds.addAll(proto.soundsList.map { deserializeSound(this, it) }) sounds.addAll(proto.soundsList.map { deserializeSound(this, it) })
@@ -73,6 +75,15 @@ class ProtobufProjectDeserializer : ProjectDeserializer {
columns = animationAsset.columns 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( private fun deserializeFont(project: Project, fontAsset: ProjectProto.FontAsset) = FontAsset(
project = project, project = project,
uid = fontAsset.uid, uid = fontAsset.uid,

View File

@@ -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.entityset.asset.EntitySet
import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset
import com.bartlomiejpluta.base.editor.gui.widget.asset.WidgetAsset 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.image.asset.ImageAsset
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset
import com.bartlomiejpluta.base.editor.project.model.Project import com.bartlomiejpluta.base.editor.project.model.Project
@@ -25,6 +26,7 @@ class ProtobufProjectSerializer : ProjectSerializer {
proto.addAllImages(item.images.map(this::serializeImage)) proto.addAllImages(item.images.map(this::serializeImage))
proto.addAllEntitySets(item.entitySets.map(this::serializeEntitySet)) proto.addAllEntitySets(item.entitySets.map(this::serializeEntitySet))
proto.addAllAnimations(item.animations.map(this::serializeAnimation)) proto.addAllAnimations(item.animations.map(this::serializeAnimation))
proto.addAllIconSets(item.iconSets.map(this::serializeIconSet))
proto.addAllFonts(item.fonts.map(this::serializeFont)) proto.addAllFonts(item.fonts.map(this::serializeFont))
proto.addAllWidgets(item.widgets.map(this::serializeWidget)) proto.addAllWidgets(item.widgets.map(this::serializeWidget))
proto.addAllSounds(item.sounds.map(this::serializeSound)) proto.addAllSounds(item.sounds.map(this::serializeSound))
@@ -67,6 +69,14 @@ class ProtobufProjectSerializer : ProjectSerializer {
.setColumns(animation.columns) .setColumns(animation.columns)
.build() .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() private fun serializeFont(font: FontAsset) = ProjectProto.FontAsset.newBuilder()
.setUid(font.uid) .setUid(font.uid)
.setSource(font.source) .setSource(font.source)