From d96b7d1b8409de40a19d77ae127bc69c0f8a2ec8 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 11 Jul 2023 00:34:32 +0900 Subject: [PATCH] fix: creating new game works again --- src/net/torvald/terrarum/IngameInstance.kt | 2 +- .../terrarum/modulebasegame/TerrarumIngame.kt | 18 ++++++++++-------- .../modulebasegame/serialise/WriteSavegame.kt | 5 ++--- .../modulebasegame/ui/UINewCharacter.kt | 12 ++++++++---- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/net/torvald/terrarum/IngameInstance.kt b/src/net/torvald/terrarum/IngameInstance.kt index 40395be75..5e64fc311 100644 --- a/src/net/torvald/terrarum/IngameInstance.kt +++ b/src/net/torvald/terrarum/IngameInstance.kt @@ -64,7 +64,7 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo lateinit var playerDisk: VirtualDisk; internal set lateinit var worldSavefileName: String; internal set lateinit var playerSavefileName: String; internal set - var savegameNickname: String = "SplinesReticulated"; internal set + var worldName: String = "SplinesReticulated"; internal set // worldName is stored as a name of the disk var screenZoom = 1.0f val ZOOM_MAXIMUM = 4.0f diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 06472e967..1ac88d9f8 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -28,7 +28,6 @@ import net.torvald.terrarum.gameparticles.ParticleBase import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.WorldSimulator import net.torvald.terrarum.langpack.Lang -import net.torvald.terrarum.modulebasegame.clut.Skybox import net.torvald.terrarum.modulebasegame.gameactors.* import net.torvald.terrarum.modulebasegame.gameactors.physicssolver.CollisionSolver import net.torvald.terrarum.modulebasegame.gameitems.PickaxeCore @@ -57,7 +56,9 @@ import net.torvald.terrarum.worlddrawer.WorldCamera import net.torvald.unicode.EMDASH import net.torvald.util.CircularArray import org.khelekore.prtree.PRTree +import java.io.File import java.util.* +import java.util.logging.Level import kotlin.math.roundToInt @@ -400,15 +401,11 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { worldDisk = VDUtil.createNewDisk( 1L shl 60, - savegameNickname, + worldName, Common.CHARSET ) - playerDisk = VDUtil.createNewDisk( - 1L shl 60, - actorGamer.actorValue.getAsString(AVKey.NAME) ?: "", - Common.CHARSET - ) + playerDisk = VDUtil.readDiskArchive(App.savegamePlayers[actorGamer.uuid]!!.loadable().diskFile, Level.INFO) // go to spawn position printdbg(this, "World Spawn position: (${world.spawnX}, ${world.spawnY})") @@ -435,6 +432,9 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { makeSavegameBackupCopy(getWorldSaveFiledesc(worldSavefileName)) // don't put it on the postInit() or render(); must be called using callback uiAutosaveNotifier.setAsClose() + + App.savegameWorlds[world.worldIndex] = SavegameCollection.collectFromBaseFilename(File(worldsDir), worldSavefileName) + App.savegameWorldsName[world.worldIndex] = worldName } } } @@ -476,7 +476,7 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { historicalFigureIDBucket = ArrayList() - savegameNickname = worldParams.savegameName + worldName = worldParams.savegameName world.worldCreator = UUID.fromString(player.uuid.toString()) @@ -489,6 +489,8 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { forceAddActor(player) WeatherMixer.internalReset() + + UILoadGovernor.worldUUID = world.worldIndex } KeyToggler.forceSet(Input.Keys.Q, false) diff --git a/src/net/torvald/terrarum/modulebasegame/serialise/WriteSavegame.kt b/src/net/torvald/terrarum/modulebasegame/serialise/WriteSavegame.kt index 105a339b1..ddcab0f31 100644 --- a/src/net/torvald/terrarum/modulebasegame/serialise/WriteSavegame.kt +++ b/src/net/torvald/terrarum/modulebasegame/serialise/WriteSavegame.kt @@ -4,7 +4,6 @@ import com.badlogic.gdx.graphics.Pixmap import net.torvald.terrarum.* import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.console.Echo -import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameworld.BlockLayer import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.langpack.Lang @@ -112,7 +111,7 @@ object WriteSavegame { */ object LoadSavegame { - fun getSavegameNickname(worldDisk: SimpleFileSystem) = worldDisk.getDiskName(Common.CHARSET) + fun getWorldName(worldDisk: SimpleFileSystem) = worldDisk.getDiskName(Common.CHARSET) fun getWorldSavefileName(world: GameWorld) = "${world.worldIndex}" fun getPlayerSavefileName(player: IngamePlayer) = "${player.uuid}" @@ -144,7 +143,7 @@ object LoadSavegame { newIngame.world = world // must be set before the loadscreen, otherwise the loadscreen will try to read from the NullWorld which is already destroyed newIngame.worldDisk = VDUtil.readDiskArchive(worldDisk.diskFile, Level.INFO) newIngame.playerDisk = VDUtil.readDiskArchive(playerDisk.diskFile, Level.INFO) - newIngame.savegameNickname = getSavegameNickname(worldDisk) + newIngame.worldName = getWorldName(worldDisk) newIngame.worldSavefileName = getWorldSavefileName(world) newIngame.playerSavefileName = getPlayerSavefileName(player) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt b/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt index acc2bda2a..69bd3a3a3 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt @@ -3,10 +3,9 @@ package net.torvald.terrarum.modulebasegame.ui import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch -import net.torvald.terrarum.App +import net.torvald.terrarum.* +import net.torvald.terrarum.App.playersDir import net.torvald.terrarum.App.printdbg -import net.torvald.terrarum.Second -import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameactors.PlayerBuilderTestSubject1 @@ -18,6 +17,7 @@ import net.torvald.terrarum.modulebasegame.serialise.LoadSavegame import net.torvald.terrarum.modulebasegame.serialise.WritePlayer import net.torvald.terrarum.ui.* import net.torvald.terrarum.utils.RandomWordsName +import java.io.File /** * Created by minjaesong on 2021-12-09. @@ -75,10 +75,14 @@ class UINewCharacter(val remoCon: UIRemoCon) : UICanvas() { WritePlayer(player, disk, null, time_t) VDUtil.dumpToRealMachine(disk, outFile) + App.savegamePlayers[player.uuid] = SavegameCollection.collectFromBaseFilename(File(playersDir), outFile.name) + App.savegamePlayersName[player.uuid] = player.actorValue.getAsString(AVKey.NAME) + UILoadGovernor.playerUUID = player.uuid + + uiLocked = false returnedFromChargen = true - // comment below if chargen must send gamers back to the charcters list // UILoadGovernor.playerDisk = DiskSkimmer(outFile) // comment above if chargen must send gamers back to the charcters list