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

@@ -9,4 +9,5 @@ const val CURRENCY = 0xA4.toChar()
const val MIDDOT = 0xB7.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 {
@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<CSVRecord>) {
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")
}
}
}

View File

@@ -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<String, Any>()
var blockCodex = BlockCodex()
var itemCodex = ItemCodex()
var wireCodex = WireCodex()
var materialCodex = MaterialCodex()
var factionCodex = FactionCodex()
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)
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<String, Any>
get() = Terrarum.Apocryphas
get() = Terrarum.apocryphas

View File

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

View File

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

View File

@@ -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<String, Material>()
@Transient private val nullMaterial = Material()
private constructor()
internal constructor()
internal constructor(module: String, path: String) : this() {
register(CSVFetcher.readFromModule(module, path))

View File

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

View File

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

View File

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

View File

@@ -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: <last 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>,
blocks: <BlockCodex serialised>,
items: <ItemCodex serialised>,
itemd: <DynamicItems serialised>,
wires: <WireCodex serialised>,
fluids: <FluidCodex serialised>,
materials: <MaterialCodex serialised>,
loadorder: <LoadOrder serialised>,
worlds: [1,2,6,7]
}