From 21a7a38477e13594ea68b3d7c7915c7ad83b0ca8 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sat, 4 Sep 2021 20:45:57 +0900 Subject: [PATCH] codices serialised into the savegame --- src/net/torvald/UniTextShortcuts.kt | 3 ++- src/net/torvald/terrarum/ModMgr.kt | 8 +++---- src/net/torvald/terrarum/Terrarum.kt | 24 +++++++++---------- .../terrarum/blockproperties/BlockCodex.kt | 2 +- .../terrarum/blockproperties/WireCodex.kt | 4 ++-- .../terrarum/itemproperties/Material.kt | 4 +--- .../modulebasegame/console/ExportCodices.kt | 2 +- .../terrarum/modulebasegame/console/Save.kt | 14 +++++------ .../terrarum/serialise/WriteSavegame.kt | 24 ++++++++++++------- .../DataFormats/just-json-it-saveformat.md | 13 +++++----- 10 files changed, 52 insertions(+), 46 deletions(-) diff --git a/src/net/torvald/UniTextShortcuts.kt b/src/net/torvald/UniTextShortcuts.kt index 59d35d110..b041051dc 100644 --- a/src/net/torvald/UniTextShortcuts.kt +++ b/src/net/torvald/UniTextShortcuts.kt @@ -9,4 +9,5 @@ const val CURRENCY = 0xA4.toChar() const val MIDDOT = 0xB7.toChar() const val ENDASH = 0x2013.toChar() -const val EMDASH = 0x2014.toChar() \ No newline at end of file +const val EMDASH = 0x2014.toChar() +const val ELLIPSIS = 0x2026.toChar() diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index 03d65bc25..166f108e6 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -243,8 +243,8 @@ object ModMgr { object GameBlockLoader { @JvmStatic operator fun invoke(module: String) { - Terrarum.BlockCodex = BlockCodex(module, "blocks/blocks.csv") - Terrarum.WireCodex = WireCodex(module, "wires/") + Terrarum.blockCodex = BlockCodex(module, "blocks/blocks.csv") + Terrarum.wireCodex = WireCodex(module, "wires/") } } @@ -266,7 +266,7 @@ object ModMgr { } private fun register(module: String, csv: List) { - Terrarum.ItemCodex = ItemCodex() + Terrarum.itemCodex = ItemCodex() csv.forEach { val className: String = it["classname"].toString() @@ -296,7 +296,7 @@ object ModMgr { val matePath = "materials/" @JvmStatic operator fun invoke(module: String) { - Terrarum.MaterialCodex = MaterialCodex(module, matePath + "materials.csv") + Terrarum.materialCodex = MaterialCodex(module, matePath + "materials.csv") } } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index d389797f6..0169a0254 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -56,12 +56,12 @@ object Terrarum : Disposable { } - open lateinit var BlockCodex: BlockCodex - open lateinit var ItemCodex: ItemCodex - open lateinit var WireCodex: WireCodex - open lateinit var MaterialCodex: MaterialCodex - open lateinit var FactionCodex: FactionCodex - open var Apocryphas = HashMap() + var blockCodex = BlockCodex() + var itemCodex = ItemCodex() + var wireCodex = WireCodex() + var materialCodex = MaterialCodex() + var factionCodex = FactionCodex() + var apocryphas = HashMap() ////////////////////////////// @@ -644,14 +644,14 @@ fun List.tail() = this.subList(1, this.size) fun List.init() = this.subList(0, this.lastIndex) val BlockCodex: BlockCodex - get() = Terrarum.BlockCodex + get() = Terrarum.blockCodex val ItemCodex: ItemCodex - get() = Terrarum.ItemCodex + get() = Terrarum.itemCodex val WireCodex: WireCodex - get() = Terrarum.WireCodex + get() = Terrarum.wireCodex val MaterialCodex: MaterialCodex - get() = Terrarum.MaterialCodex + get() = Terrarum.materialCodex val FactionCodex: FactionCodex - get() = Terrarum.FactionCodex + get() = Terrarum.factionCodex val Apocryphas: HashMap - get() = Terrarum.Apocryphas \ No newline at end of file + get() = Terrarum.apocryphas \ No newline at end of file diff --git a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt index c93a90b44..81eeb4093 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt @@ -55,7 +55,7 @@ class BlockCodex { virtualToTile.clear() } - private constructor() + internal constructor() /** * Later entry (possible from other modules) will replace older ones diff --git a/src/net/torvald/terrarum/blockproperties/WireCodex.kt b/src/net/torvald/terrarum/blockproperties/WireCodex.kt index d8d321736..0995c75be 100644 --- a/src/net/torvald/terrarum/blockproperties/WireCodex.kt +++ b/src/net/torvald/terrarum/blockproperties/WireCodex.kt @@ -23,9 +23,9 @@ class WireCodex { wireProps.clear() } - private constructor() { + internal constructor() { try { - Terrarum.ItemCodex["testtesttest"] + Terrarum.itemCodex["testtesttest"] } catch (e: UninitializedPropertyAccessException) { throw UninitializedPropertyAccessException("ItemCodex not initialised!") diff --git a/src/net/torvald/terrarum/itemproperties/Material.kt b/src/net/torvald/terrarum/itemproperties/Material.kt index d554587a9..68ff82aea 100644 --- a/src/net/torvald/terrarum/itemproperties/Material.kt +++ b/src/net/torvald/terrarum/itemproperties/Material.kt @@ -1,12 +1,10 @@ package net.torvald.terrarum.itemproperties import net.torvald.terrarum.AppLoader.printmsg -import net.torvald.terrarum.ModMgr import net.torvald.terrarum.blockproperties.floatVal import net.torvald.terrarum.blockproperties.intVal import net.torvald.terrarum.utils.CSVFetcher import org.apache.commons.csv.CSVRecord -import java.io.IOException /** * To be used with items AND TILES (electricity resistance, thermal conductivity) @@ -33,7 +31,7 @@ class MaterialCodex { val materialProps = HashMap() @Transient private val nullMaterial = Material() - private constructor() + internal constructor() internal constructor(module: String, path: String) : this() { register(CSVFetcher.readFromModule(module, path)) diff --git a/src/net/torvald/terrarum/modulebasegame/console/ExportCodices.kt b/src/net/torvald/terrarum/modulebasegame/console/ExportCodices.kt index 7d96e7485..f0fecf5ee 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/ExportCodices.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/ExportCodices.kt @@ -9,7 +9,7 @@ import net.torvald.terrarum.serialise.Common */ object ExportCodices : ConsoleCommand { override fun execute(args: Array) { - println(Common.jsoner.toJson(Terrarum.BlockCodex)) + println(Common.jsoner.toJson(Terrarum.blockCodex)) } override fun printUsage() { diff --git a/src/net/torvald/terrarum/modulebasegame/console/Save.kt b/src/net/torvald/terrarum/modulebasegame/console/Save.kt index 5d387eae4..1eaf867cb 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/Save.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/Save.kt @@ -1,17 +1,16 @@ package net.torvald.terrarum.modulebasegame.console -import com.badlogic.gdx.Gdx -import net.torvald.terrarum.AppLoader -import net.torvald.terrarum.CommonResourcePool -import net.torvald.terrarum.ReferencingRanges -import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.* import net.torvald.terrarum.console.ConsoleCommand import net.torvald.terrarum.console.Echo import net.torvald.terrarum.gameactors.Actor import net.torvald.terrarum.gameactors.BlockMarkerActor import net.torvald.terrarum.modulebasegame.TerrarumIngame -import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.* -import net.torvald.terrarum.serialise.* +import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.DiskEntry +import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VDUtil +import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VirtualDisk +import net.torvald.terrarum.serialise.Common +import net.torvald.terrarum.serialise.WriteSavegame import java.io.File import java.io.IOException @@ -42,6 +41,7 @@ object Save : ConsoleCommand { WriteSavegame(disk, file, ingame) + Echo ("${ccW}Saved with size of $ccG${file.length()}$ccW bytes") } catch (e: IOException) { Echo("Save: IOException raised.") diff --git a/src/net/torvald/terrarum/serialise/WriteSavegame.kt b/src/net/torvald/terrarum/serialise/WriteSavegame.kt index f1d5452fa..bcf284c1d 100644 --- a/src/net/torvald/terrarum/serialise/WriteSavegame.kt +++ b/src/net/torvald/terrarum/serialise/WriteSavegame.kt @@ -1,8 +1,6 @@ package net.torvald.terrarum.serialise -import net.torvald.terrarum.AppLoader -import net.torvald.terrarum.SanicLoadScreen -import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.* import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.* @@ -38,24 +36,34 @@ object WriteSavegame { addFile(disk, meta) // Write BlockCodex// - /*val blockCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(BlockCodex, BlockCodex.javaClass).toByteArray(Common.CHARSET))) + val blockCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(BlockCodex).toByteArray(Common.CHARSET))) val blocks = DiskEntry(-16, 0, "blocks".toByteArray(), creation_t, time_t, blockCodexContent) addFile(disk, blocks) // Write ItemCodex// - val itemCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(ItemCodex, ItemCodex.javaClass).toByteArray(Common.CHARSET))) + val itemCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(ItemCodex).toByteArray(Common.CHARSET))) val items = DiskEntry(-17, 0, "items".toByteArray(), creation_t, time_t, itemCodexContent) addFile(disk, items) // Write WireCodex// - val wireCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(WireCodex, WireCodex.javaClass).toByteArray(Common.CHARSET))) + val wireCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(WireCodex).toByteArray(Common.CHARSET))) val wires = DiskEntry(-18, 0, "wires".toByteArray(), creation_t, time_t, wireCodexContent) addFile(disk, wires) // Write MaterialCodex// - val materialCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(MaterialCodex, MaterialCodex.javaClass).toByteArray(Common.CHARSET))) + val materialCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(MaterialCodex).toByteArray(Common.CHARSET))) val materials = DiskEntry(-19, 0, "materials".toByteArray(), creation_t, time_t, materialCodexContent) - addFile(disk, materials)*/ + addFile(disk, materials) + + // Write FactionCodex// + val factionCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(FactionCodex).toByteArray(Common.CHARSET))) + val factions = DiskEntry(-20, 0, "factions".toByteArray(), creation_t, time_t, factionCodexContent) + addFile(disk, factions) + + // Write Apocryphas// + val apocryphasContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(Apocryphas).toByteArray(Common.CHARSET))) + val apocryphas = DiskEntry(-1024, 0, "modprops".toByteArray(), creation_t, time_t, apocryphasContent) + addFile(disk, apocryphas) // Write World // val worldNum = ingame.world.worldIndex diff --git a/work_files/DataFormats/just-json-it-saveformat.md b/work_files/DataFormats/just-json-it-saveformat.md index 67faea77e..748ec7732 100644 --- a/work_files/DataFormats/just-json-it-saveformat.md +++ b/work_files/DataFormats/just-json-it-saveformat.md @@ -16,6 +16,12 @@ Each file on the Savegame has following convention: |Type|Filename|ID| |--|--|--| |Metadata|savegame|-1| +|Blocks Properties|blocks|-16| +|Items Properties|items|-17| +|Wires Properties|wires|-18| +|Materials Properties|materials|-19| +|Factions Properties|factions|-20| +|Other Properties used by modules|modprops|-1024| |Worlds|world$n ($n is a world index)|$n| |Actors|actor$n ($n is an Actor ID)|$n| @@ -46,13 +52,6 @@ Following code is an example Savegame JSON files. lastplay_t: , playtime_t: , thumb: , - - blocks: , - items: , - itemd: , - wires: , - fluids: , - materials: , loadorder: , worlds: [1,2,6,7] }