fixed a bug when loading a packaged player, loading a spriteglow would read normal sprite's data instead

This commit is contained in:
minjaesong
2022-12-04 03:38:17 +09:00
parent 1e01d3027e
commit 400cdd5b3c
8 changed files with 79 additions and 38 deletions

View File

@@ -24,6 +24,9 @@ import net.torvald.terrarum.savegame.EntryFile
import net.torvald.terrarum.serialise.Common
import net.torvald.terrarum.serialise.SaveLoadError
import net.torvald.terrarum.modulebasegame.serialise.LoadSavegame
import net.torvald.terrarum.savegame.VDFileID.BODYPART_TO_ENTRY_MAP
import net.torvald.terrarum.savegame.VDFileID.SAVEGAMEINFO
import net.torvald.terrarum.savegame.VDFileID.SPRITEDEF
import net.torvald.terrarum.spriteassembler.ADProperties
import net.torvald.terrarum.spriteassembler.ADProperties.Companion.EXTRA_HEADROOM_X
import net.torvald.terrarum.spriteassembler.ADProperties.Companion.EXTRA_HEADROOM_Y
@@ -497,7 +500,7 @@ class UIItemPlayerCells(
private var playerUUID: UUID? = null
init {
skimmer.getFile(-1L)?.bytes?.let {
skimmer.getFile(SAVEGAMEINFO)?.bytes?.let {
val json = JsonReader().parse(ByteArray64Reader(it, Common.CHARSET))
playerUUID = UUID.fromString(json["uuid"]?.asString())
@@ -554,15 +557,15 @@ class UIItemPlayerCells(
override fun render(batch: SpriteBatch, camera: Camera) {
// try to generate a texture
if (skimmer.initialised && !hasTexture) {
skimmer.getFile(-1L)?.bytes?.let {
skimmer.getFile(SAVEGAMEINFO)?.bytes?.let {
try {
printdbg(this, "Generating portrait for $playerName")
val frameName = "ANIM_IDLE_1"
val animFile = skimmer.getFile(-2L)!!
val animFile = skimmer.getFile(SPRITEDEF)!!
val props = ADProperties(ByteArray64Reader(animFile.bytes, Common.CHARSET))
val imagesSelfContained = skimmer.hasEntry(-1025L)
val bodypartMapping = Properties().also { if (imagesSelfContained) it.load(ByteArray64Reader(skimmer.getFile(-1025L)!!.bytes, Common.CHARSET)) }
val imagesSelfContained = skimmer.hasEntry(BODYPART_TO_ENTRY_MAP)
val bodypartMapping = Properties().also { if (imagesSelfContained) it.load(ByteArray64Reader(skimmer.getFile(BODYPART_TO_ENTRY_MAP)!!.bytes, Common.CHARSET)) }
val fileGetter = if (imagesSelfContained)
AssembleSheetPixmap.getVirtualDiskFileGetter(bodypartMapping, skimmer)

View File

@@ -20,6 +20,7 @@ import net.torvald.terrarum.savegame.ByteArray64Reader
import net.torvald.terrarum.savegame.VirtualDisk
import net.torvald.terrarum.serialise.Common
import net.torvald.terrarum.modulebasegame.serialise.ReadActor
import net.torvald.terrarum.savegame.VDFileID.SAVEGAMEINFO
import net.torvald.terrarum.ui.*
import net.torvald.terrarum.utils.RandomWordsName
@@ -91,7 +92,7 @@ class UINewWorld(val remoCon: UIRemoCon) : UICanvas() {
// printdbg(this, "generate! Size=${sizeSelector.selection}, Name=${nameInput.getTextOrPlaceholder()}, Seed=${seedInput.getTextOrPlaceholder()}")
val ingame = TerrarumIngame(App.batch)
val player = ReadActor.invoke(UILoadGovernor.playerDisk!!, ByteArray64Reader(UILoadGovernor.playerDisk!!.getFile(-1L)!!.bytes, Common.CHARSET)) as IngamePlayer
val player = ReadActor.invoke(UILoadGovernor.playerDisk!!, ByteArray64Reader(UILoadGovernor.playerDisk!!.getFile(SAVEGAMEINFO)!!.bytes, Common.CHARSET)) as IngamePlayer
val seed = try {
seedInput.getTextOrPlaceholder().toLong()
}