codices serialised into the savegame

This commit is contained in:
minjaesong
2021-09-04 20:45:57 +09:00
parent 6bea9c9f07
commit 21a7a38477
10 changed files with 52 additions and 46 deletions

View File

@@ -10,3 +10,4 @@ const val MIDDOT = 0xB7.toChar()
const val ENDASH = 0x2013.toChar() const val ENDASH = 0x2013.toChar()
const val EMDASH = 0x2014.toChar() const val EMDASH = 0x2014.toChar()
const val ELLIPSIS = 0x2026.toChar()

View File

@@ -243,8 +243,8 @@ object ModMgr {
object GameBlockLoader { object GameBlockLoader {
@JvmStatic operator fun invoke(module: String) { @JvmStatic operator fun invoke(module: String) {
Terrarum.BlockCodex = BlockCodex(module, "blocks/blocks.csv") Terrarum.blockCodex = BlockCodex(module, "blocks/blocks.csv")
Terrarum.WireCodex = WireCodex(module, "wires/") Terrarum.wireCodex = WireCodex(module, "wires/")
} }
} }
@@ -266,7 +266,7 @@ object ModMgr {
} }
private fun register(module: String, csv: List<CSVRecord>) { private fun register(module: String, csv: List<CSVRecord>) {
Terrarum.ItemCodex = ItemCodex() Terrarum.itemCodex = ItemCodex()
csv.forEach { csv.forEach {
val className: String = it["classname"].toString() val className: String = it["classname"].toString()
@@ -296,7 +296,7 @@ object ModMgr {
val matePath = "materials/" val matePath = "materials/"
@JvmStatic operator fun invoke(module: String) { @JvmStatic operator fun invoke(module: String) {
Terrarum.MaterialCodex = MaterialCodex(module, matePath + "materials.csv") Terrarum.materialCodex = MaterialCodex(module, matePath + "materials.csv")
} }
} }
} }

View File

@@ -56,12 +56,12 @@ object Terrarum : Disposable {
} }
open lateinit var BlockCodex: BlockCodex var blockCodex = BlockCodex()
open lateinit var ItemCodex: ItemCodex var itemCodex = ItemCodex()
open lateinit var WireCodex: WireCodex var wireCodex = WireCodex()
open lateinit var MaterialCodex: MaterialCodex var materialCodex = MaterialCodex()
open lateinit var FactionCodex: FactionCodex var factionCodex = FactionCodex()
open var Apocryphas = HashMap<String, Any>() var apocryphas = HashMap<String, Any>()
////////////////////////////// //////////////////////////////
@@ -644,14 +644,14 @@ fun <T> List<T>.tail() = this.subList(1, this.size)
fun <T> List<T>.init() = this.subList(0, this.lastIndex) fun <T> List<T>.init() = this.subList(0, this.lastIndex)
val BlockCodex: BlockCodex val BlockCodex: BlockCodex
get() = Terrarum.BlockCodex get() = Terrarum.blockCodex
val ItemCodex: ItemCodex val ItemCodex: ItemCodex
get() = Terrarum.ItemCodex get() = Terrarum.itemCodex
val WireCodex: WireCodex val WireCodex: WireCodex
get() = Terrarum.WireCodex get() = Terrarum.wireCodex
val MaterialCodex: MaterialCodex val MaterialCodex: MaterialCodex
get() = Terrarum.MaterialCodex get() = Terrarum.materialCodex
val FactionCodex: FactionCodex val FactionCodex: FactionCodex
get() = Terrarum.FactionCodex get() = Terrarum.factionCodex
val Apocryphas: HashMap<String, Any> val Apocryphas: HashMap<String, Any>
get() = Terrarum.Apocryphas get() = Terrarum.apocryphas

View File

@@ -55,7 +55,7 @@ class BlockCodex {
virtualToTile.clear() virtualToTile.clear()
} }
private constructor() internal constructor()
/** /**
* Later entry (possible from other modules) will replace older ones * Later entry (possible from other modules) will replace older ones

View File

@@ -23,9 +23,9 @@ class WireCodex {
wireProps.clear() wireProps.clear()
} }
private constructor() { internal constructor() {
try { try {
Terrarum.ItemCodex["testtesttest"] Terrarum.itemCodex["testtesttest"]
} }
catch (e: UninitializedPropertyAccessException) { catch (e: UninitializedPropertyAccessException) {
throw UninitializedPropertyAccessException("ItemCodex not initialised!") throw UninitializedPropertyAccessException("ItemCodex not initialised!")

View File

@@ -1,12 +1,10 @@
package net.torvald.terrarum.itemproperties package net.torvald.terrarum.itemproperties
import net.torvald.terrarum.AppLoader.printmsg import net.torvald.terrarum.AppLoader.printmsg
import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.blockproperties.floatVal import net.torvald.terrarum.blockproperties.floatVal
import net.torvald.terrarum.blockproperties.intVal import net.torvald.terrarum.blockproperties.intVal
import net.torvald.terrarum.utils.CSVFetcher import net.torvald.terrarum.utils.CSVFetcher
import org.apache.commons.csv.CSVRecord import org.apache.commons.csv.CSVRecord
import java.io.IOException
/** /**
* To be used with items AND TILES (electricity resistance, thermal conductivity) * To be used with items AND TILES (electricity resistance, thermal conductivity)
@@ -33,7 +31,7 @@ class MaterialCodex {
val materialProps = HashMap<String, Material>() val materialProps = HashMap<String, Material>()
@Transient private val nullMaterial = Material() @Transient private val nullMaterial = Material()
private constructor() internal constructor()
internal constructor(module: String, path: String) : this() { internal constructor(module: String, path: String) : this() {
register(CSVFetcher.readFromModule(module, path)) register(CSVFetcher.readFromModule(module, path))

View File

@@ -9,7 +9,7 @@ import net.torvald.terrarum.serialise.Common
*/ */
object ExportCodices : ConsoleCommand { object ExportCodices : ConsoleCommand {
override fun execute(args: Array<String>) { override fun execute(args: Array<String>) {
println(Common.jsoner.toJson(Terrarum.BlockCodex)) println(Common.jsoner.toJson(Terrarum.blockCodex))
} }
override fun printUsage() { override fun printUsage() {

View File

@@ -1,17 +1,16 @@
package net.torvald.terrarum.modulebasegame.console package net.torvald.terrarum.modulebasegame.console
import com.badlogic.gdx.Gdx import net.torvald.terrarum.*
import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.ReferencingRanges
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.console.ConsoleCommand import net.torvald.terrarum.console.ConsoleCommand
import net.torvald.terrarum.console.Echo import net.torvald.terrarum.console.Echo
import net.torvald.terrarum.gameactors.Actor import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameactors.BlockMarkerActor import net.torvald.terrarum.gameactors.BlockMarkerActor
import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.* import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.DiskEntry
import net.torvald.terrarum.serialise.* 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.File
import java.io.IOException import java.io.IOException
@@ -42,6 +41,7 @@ object Save : ConsoleCommand {
WriteSavegame(disk, file, ingame) WriteSavegame(disk, file, ingame)
Echo ("${ccW}Saved with size of $ccG${file.length()}$ccW bytes")
} }
catch (e: IOException) { catch (e: IOException) {
Echo("Save: IOException raised.") Echo("Save: IOException raised.")

View File

@@ -1,8 +1,6 @@
package net.torvald.terrarum.serialise package net.torvald.terrarum.serialise
import net.torvald.terrarum.AppLoader import net.torvald.terrarum.*
import net.torvald.terrarum.SanicLoadScreen
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.* import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.*
@@ -38,24 +36,34 @@ object WriteSavegame {
addFile(disk, meta) addFile(disk, meta)
// Write BlockCodex// // 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) val blocks = DiskEntry(-16, 0, "blocks".toByteArray(), creation_t, time_t, blockCodexContent)
addFile(disk, blocks) addFile(disk, blocks)
// Write ItemCodex// // 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) val items = DiskEntry(-17, 0, "items".toByteArray(), creation_t, time_t, itemCodexContent)
addFile(disk, items) addFile(disk, items)
// Write WireCodex// // 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) val wires = DiskEntry(-18, 0, "wires".toByteArray(), creation_t, time_t, wireCodexContent)
addFile(disk, wires) addFile(disk, wires)
// Write MaterialCodex// // 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) 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 // // Write World //
val worldNum = ingame.world.worldIndex val worldNum = ingame.world.worldIndex

View File

@@ -16,6 +16,12 @@ Each file on the Savegame has following convention:
|Type|Filename|ID| |Type|Filename|ID|
|--|--|--| |--|--|--|
|Metadata|savegame|-1| |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| |Worlds|world$n ($n is a world index)|$n|
|Actors|actor$n ($n is an Actor ID)|$n| |Actors|actor$n ($n is an Actor ID)|$n|
@@ -46,13 +52,6 @@ Following code is an example Savegame JSON files.
lastplay_t: <last play time in real-world unix time>, lastplay_t: <last play time in real-world unix time>,
playtime_t: <total play time in real-world unix time>, playtime_t: <total play time in real-world unix time>,
thumb: <Ascii85-encoded gzipped thumbnail image in TGA>, thumb: <Ascii85-encoded gzipped thumbnail image in TGA>,
blocks: <BlockCodex serialised>,
items: <ItemCodex serialised>,
itemd: <DynamicItems serialised>,
wires: <WireCodex serialised>,
fluids: <FluidCodex serialised>,
materials: <MaterialCodex serialised>,
loadorder: <LoadOrder serialised>, loadorder: <LoadOrder serialised>,
worlds: [1,2,6,7] worlds: [1,2,6,7]
} }