mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-13 12:04:06 +09:00
save/load with fixed entry id
This commit is contained in:
@@ -2,6 +2,7 @@ package net.torvald.terrarum.modulebasegame.console
|
|||||||
|
|
||||||
import com.badlogic.gdx.utils.JsonValue
|
import com.badlogic.gdx.utils.JsonValue
|
||||||
import net.torvald.terrarum.AppLoader
|
import net.torvald.terrarum.AppLoader
|
||||||
|
import net.torvald.terrarum.AppLoader.printdbg
|
||||||
import net.torvald.terrarum.Terrarum
|
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
|
||||||
@@ -10,8 +11,10 @@ import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.DiskEntry
|
|||||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.EntryFile
|
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.EntryFile
|
||||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VDUtil
|
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VDUtil
|
||||||
import net.torvald.terrarum.serialise.*
|
import net.torvald.terrarum.serialise.*
|
||||||
|
import net.torvald.terrarum.utils.JsonFetcher
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
import java.nio.ByteBuffer
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2021-08-30.
|
* Created by minjaesong on 2021-08-30.
|
||||||
@@ -22,13 +25,16 @@ object Load : ConsoleCommand {
|
|||||||
if (args.size == 2) {
|
if (args.size == 2) {
|
||||||
try {
|
try {
|
||||||
val charset = Common.CHARSET
|
val charset = Common.CHARSET
|
||||||
val file = File(AppLoader.defaultDir + "Exports/${args[1]}")
|
val file = File(AppLoader.defaultDir + "/Exports/${args[1]}")
|
||||||
val disk = VDUtil.readDiskArchive(file, charset = charset)
|
val disk = VDUtil.readDiskArchive(file, charset = charset)
|
||||||
|
|
||||||
val metaFile = VDUtil.getFile(disk, VDUtil.VDPath("savegame", charset))!!
|
val metaFile = disk.entries[-1]!!
|
||||||
val metaReader = ByteArray64Reader(metaFile.contents.serialize().array, charset)
|
val metaReader = ByteArray64Reader(metaFile.contents.serialize().array, charset)
|
||||||
val meta = Common.jsoner.fromJson(JsonValue::class.java, metaReader)
|
val meta = Common.jsoner.fromJson(JsonValue::class.java, metaReader)
|
||||||
|
|
||||||
|
JsonFetcher.forEach(meta) { key, value ->
|
||||||
|
println("$key\t$value")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (e: IOException) {
|
catch (e: IOException) {
|
||||||
Echo("Load: IOException raised.")
|
Echo("Load: IOException raised.")
|
||||||
|
|||||||
@@ -10,10 +10,7 @@ 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.DiskEntry
|
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.*
|
||||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.DiskEntryContent
|
|
||||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.EntryFile
|
|
||||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VDUtil
|
|
||||||
import net.torvald.terrarum.serialise.Common
|
import net.torvald.terrarum.serialise.Common
|
||||||
import net.torvald.terrarum.serialise.WriteActor
|
import net.torvald.terrarum.serialise.WriteActor
|
||||||
import net.torvald.terrarum.serialise.WriteMeta
|
import net.torvald.terrarum.serialise.WriteMeta
|
||||||
@@ -32,6 +29,12 @@ object Save : ConsoleCommand {
|
|||||||
actor != (CommonResourcePool.get("blockmarking_actor") as BlockMarkerActor)
|
actor != (CommonResourcePool.get("blockmarking_actor") as BlockMarkerActor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun addFile(disk: VirtualDisk, file: DiskEntry) {
|
||||||
|
VDUtil.getAsDirectory(disk, 0).add(file.entryID)
|
||||||
|
disk.entries[file.entryID] = file
|
||||||
|
file.parentEntryID = 0
|
||||||
|
}
|
||||||
|
|
||||||
override fun execute(args: Array<String>) {
|
override fun execute(args: Array<String>) {
|
||||||
if (args.size == 2) {
|
if (args.size == 2) {
|
||||||
try {
|
try {
|
||||||
@@ -45,19 +48,19 @@ object Save : ConsoleCommand {
|
|||||||
// NOTE: don't bother with the entryID of DiskEntries; it will be overwritten anyway
|
// NOTE: don't bother with the entryID of DiskEntries; it will be overwritten anyway
|
||||||
|
|
||||||
val metaContent = EntryFile(WriteMeta(ingame).encodeToByteArray64())
|
val metaContent = EntryFile(WriteMeta(ingame).encodeToByteArray64())
|
||||||
val meta = DiskEntry(0, 0, "savegame".toByteArray(), creation_t, time_t, metaContent)
|
val meta = DiskEntry(-1, 0, "savegame".toByteArray(), creation_t, time_t, metaContent)
|
||||||
VDUtil.addFile(disk, 0, meta)
|
addFile(disk, meta)
|
||||||
|
|
||||||
val worldContent = EntryFile(WriteWorld(ingame).encodeToByteArray64())
|
val worldContent = EntryFile(WriteWorld(ingame).encodeToByteArray64())
|
||||||
val world = DiskEntry(0, 0, "world${ingame.world.worldIndex}".toByteArray(), creation_t, time_t, worldContent)
|
val world = DiskEntry(ingame.world.worldIndex, 0, "world${ingame.world.worldIndex}".toByteArray(), creation_t, time_t, worldContent)
|
||||||
VDUtil.addFile(disk, 0, world)
|
addFile(disk, world)
|
||||||
|
|
||||||
listOf(ingame.actorContainerActive, ingame.actorContainerInactive).forEach { actors ->
|
listOf(ingame.actorContainerActive, ingame.actorContainerInactive).forEach { actors ->
|
||||||
actors.forEach {
|
actors.forEach {
|
||||||
if (acceptable(it)) {
|
if (acceptable(it)) {
|
||||||
val actorContent = EntryFile(WriteActor.encodeToByteArray64(it))
|
val actorContent = EntryFile(WriteActor.encodeToByteArray64(it))
|
||||||
val actor = DiskEntry(0, 0, "actor${it.referenceID}".toByteArray(), creation_t, time_t, actorContent)
|
val actor = DiskEntry(it.referenceID, 0, "actor${it.referenceID}".toByteArray(), creation_t, time_t, actorContent)
|
||||||
VDUtil.addFile(disk, 0, actor)
|
addFile(disk, actor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.torvald.terrarum.modulebasegame.gameactors
|
package net.torvald.terrarum.modulebasegame.gameactors
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
|
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
||||||
import net.torvald.terrarum.AppLoader.printdbg
|
import net.torvald.terrarum.AppLoader.printdbg
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF
|
||||||
@@ -20,7 +21,12 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
|||||||
open class DroppedItem : ActorWithBody {
|
open class DroppedItem : ActorWithBody {
|
||||||
|
|
||||||
private var itemID: ItemID = ""
|
private var itemID: ItemID = ""
|
||||||
private val textureRegion = ItemCodex.getItemImage(itemID)
|
set(value) {
|
||||||
|
field = value
|
||||||
|
textureRegion = ItemCodex.getItemImage(itemID)!!
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transient private lateinit var textureRegion: TextureRegion
|
||||||
|
|
||||||
var itemCount = 1
|
var itemCount = 1
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user