diff --git a/src/net/torvald/terrarum/modulebasegame/console/Load.kt b/src/net/torvald/terrarum/modulebasegame/console/Load.kt index 05eaf5919..367a5d528 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/Load.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/Load.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum.modulebasegame.console import com.badlogic.gdx.utils.JsonValue import net.torvald.terrarum.AppLoader +import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.Terrarum import net.torvald.terrarum.console.ConsoleCommand 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.VDUtil import net.torvald.terrarum.serialise.* +import net.torvald.terrarum.utils.JsonFetcher import java.io.File import java.io.IOException +import java.nio.ByteBuffer /** * Created by minjaesong on 2021-08-30. @@ -22,13 +25,16 @@ object Load : ConsoleCommand { if (args.size == 2) { try { 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 metaFile = VDUtil.getFile(disk, VDUtil.VDPath("savegame", charset))!! + val metaFile = disk.entries[-1]!! val metaReader = ByteArray64Reader(metaFile.contents.serialize().array, charset) val meta = Common.jsoner.fromJson(JsonValue::class.java, metaReader) + JsonFetcher.forEach(meta) { key, value -> + println("$key\t$value") + } } catch (e: IOException) { Echo("Load: IOException raised.") diff --git a/src/net/torvald/terrarum/modulebasegame/console/Save.kt b/src/net/torvald/terrarum/modulebasegame/console/Save.kt index 270b76d78..bc211557d 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/Save.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/Save.kt @@ -10,10 +10,7 @@ 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.DiskEntry -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.modulecomputers.virtualcomputer.tvd.* import net.torvald.terrarum.serialise.Common import net.torvald.terrarum.serialise.WriteActor import net.torvald.terrarum.serialise.WriteMeta @@ -32,6 +29,12 @@ object Save : ConsoleCommand { 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) { if (args.size == 2) { try { @@ -45,19 +48,19 @@ object Save : ConsoleCommand { // NOTE: don't bother with the entryID of DiskEntries; it will be overwritten anyway val metaContent = EntryFile(WriteMeta(ingame).encodeToByteArray64()) - val meta = DiskEntry(0, 0, "savegame".toByteArray(), creation_t, time_t, metaContent) - VDUtil.addFile(disk, 0, meta) + val meta = DiskEntry(-1, 0, "savegame".toByteArray(), creation_t, time_t, metaContent) + addFile(disk, meta) val worldContent = EntryFile(WriteWorld(ingame).encodeToByteArray64()) - val world = DiskEntry(0, 0, "world${ingame.world.worldIndex}".toByteArray(), creation_t, time_t, worldContent) - VDUtil.addFile(disk, 0, world) + val world = DiskEntry(ingame.world.worldIndex, 0, "world${ingame.world.worldIndex}".toByteArray(), creation_t, time_t, worldContent) + addFile(disk, world) listOf(ingame.actorContainerActive, ingame.actorContainerInactive).forEach { actors -> actors.forEach { if (acceptable(it)) { val actorContent = EntryFile(WriteActor.encodeToByteArray64(it)) - val actor = DiskEntry(0, 0, "actor${it.referenceID}".toByteArray(), creation_t, time_t, actorContent) - VDUtil.addFile(disk, 0, actor) + val actor = DiskEntry(it.referenceID, 0, "actor${it.referenceID}".toByteArray(), creation_t, time_t, actorContent) + addFile(disk, actor) } } } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt index c63eb531d..df1c07f0e 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt @@ -1,6 +1,7 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF @@ -20,7 +21,12 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack open class DroppedItem : ActorWithBody { 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