From f6eb567385a11010331786b78939b00c2bc9c322 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 29 Sep 2021 12:53:46 +0900 Subject: [PATCH] making copy of the savegame immediately after the initial save --- src/net/torvald/terrarum/IngameInstance.kt | 22 +++++++++++++++++++ .../terrarum/modulebasegame/TerrarumIngame.kt | 3 +-- .../modulebasegame/ui/UIInventoryEscMenu.kt | 8 +++---- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/net/torvald/terrarum/IngameInstance.kt b/src/net/torvald/terrarum/IngameInstance.kt index 2cfc839b0..233f920c2 100644 --- a/src/net/torvald/terrarum/IngameInstance.kt +++ b/src/net/torvald/terrarum/IngameInstance.kt @@ -18,6 +18,9 @@ import net.torvald.terrarum.tvda.VirtualDisk import net.torvald.terrarum.ui.ConsoleWindow import net.torvald.util.SortedArrayList import org.khelekore.prtree.* +import java.io.File +import java.io.FileNotFoundException +import java.io.IOException import java.util.concurrent.locks.Lock /** @@ -357,6 +360,25 @@ open class IngameInstance(val batch: SpriteBatch) : Screen { } } + /** + * Copies most recent `save` to `save.1`, leaving `save` for overwriting, previous `save.1` will be copied to `save.2` + */ + fun makeSavegameBackupCopy() { + try { + File(App.defaultSaveDir, INGAME.savegameNickname+".1").copyTo( + File(App.defaultSaveDir, INGAME.savegameNickname+".2"), // don't use .bak as it's used by the savecracker + true + ) + } catch (e: NoSuchFileException) {} + try { + File(App.defaultSaveDir, INGAME.savegameNickname).copyTo( + File(App.defaultSaveDir, INGAME.savegameNickname+".1"), // don't use .bak as it's used by the savecracker + true + ) + } catch (e: NoSuchFileException) {} + } + + // simple euclidean norm, squared private val actorDistanceCalculator = DistanceCalculator { t: ActorWithBody, p: PointND -> diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 01251791e..172b23ba2 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -313,9 +313,8 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) { ) // make initial savefile -// pause() WriteSavegame.immediate(savegameArchive, File(App.defaultSaveDir, savegameNickname), this) { -// resume() + makeSavegameBackupCopy() } } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt index 761f732ec..babca5c89 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt @@ -85,11 +85,9 @@ class UIInventoryEscMenu(val full: UIInventoryFull) : UICanvas() { screen = 3; gameMenuButtons.deselect() full.handler.lockToggle() full.lockTransition() - // make backup of the old save - File(App.defaultSaveDir, INGAME.savegameNickname).copyTo( - File(App.defaultSaveDir, INGAME.savegameNickname+".1"), // don't use .bak as it's used by the savecracker - true - ) + + INGAME.makeSavegameBackupCopy() + // save the game WriteSavegame(INGAME.savegameArchive, File(App.defaultSaveDir, INGAME.savegameNickname), Terrarum.ingame!! as TerrarumIngame) { // callback: