From 694b95c25cc2be2556423f60a14e5a27b021d576 Mon Sep 17 00:00:00 2001 From: Sense101 Date: Sun, 6 Feb 2022 15:42:35 +0000 Subject: [PATCH] Add save migration --- src/js/game/components/item_processor.js | 15 +++++++ src/js/savegame/savegame.js | 8 +++- .../savegame/savegame_interface_registry.js | 2 + src/js/savegame/schemas/1011.js | 44 +++++++++++++++++++ src/js/savegame/schemas/1011.json | 5 +++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/js/savegame/schemas/1011.js create mode 100644 src/js/savegame/schemas/1011.json diff --git a/src/js/game/components/item_processor.js b/src/js/game/components/item_processor.js index 9da8489a..da3dd3e3 100644 --- a/src/js/game/components/item_processor.js +++ b/src/js/game/components/item_processor.js @@ -1,6 +1,8 @@ import { types } from "../../savegame/serialization"; +import { TypeString } from "../../savegame/serialization_data_types"; import { BaseItem } from "../base_item"; import { Component } from "../component"; +import { typeItemSingleton } from "../item_resolver"; /** @enum {string} */ export const enumItemProcessorTypes = { @@ -54,6 +56,19 @@ export class ItemProcessorComponent extends Component { static getSchema() { return { nextOutputSlot: types.uint, + currentCharge: types.nullable( + types.structured({ + remainingTime: types.ufloat, + items: types.array( + types.structured({ + item: typeItemSingleton, + extraProgress: types.nullable(types.float), + requiredSlot: types.nullable(types.uint), + preferredSlot: types.nullable(types.uint), + }) + ), + }) + ), }; } diff --git a/src/js/savegame/savegame.js b/src/js/savegame/savegame.js index b4472b2b..4c274759 100644 --- a/src/js/savegame/savegame.js +++ b/src/js/savegame/savegame.js @@ -16,6 +16,7 @@ import { SavegameInterface_V1008 } from "./schemas/1008"; import { SavegameInterface_V1009 } from "./schemas/1009"; import { MODS } from "../mods/modloader"; import { SavegameInterface_V1010 } from "./schemas/1010"; +import { SavegameInterface_V1011 } from "./schemas/1011"; const logger = createLogger("savegame"); @@ -56,7 +57,7 @@ export class Savegame extends ReadWriteProxy { * @returns {number} */ static getCurrentVersion() { - return 1010; + return 1011; } /** @@ -168,6 +169,11 @@ export class Savegame extends ReadWriteProxy { data.version = 1010; } + if (data.version === 1010) { + SavegameInterface_V1011.migrate1010to1011(data); + data.version = 1011; + } + return ExplainedResult.good(); } diff --git a/src/js/savegame/savegame_interface_registry.js b/src/js/savegame/savegame_interface_registry.js index 089b15fc..fb645b57 100644 --- a/src/js/savegame/savegame_interface_registry.js +++ b/src/js/savegame/savegame_interface_registry.js @@ -11,6 +11,7 @@ import { SavegameInterface_V1007 } from "./schemas/1007"; import { SavegameInterface_V1008 } from "./schemas/1008"; import { SavegameInterface_V1009 } from "./schemas/1009"; import { SavegameInterface_V1010 } from "./schemas/1010"; +import { SavegameInterface_V1011 } from "./schemas/1011"; /** @type {Object.} */ export const savegameInterfaces = { @@ -25,6 +26,7 @@ export const savegameInterfaces = { 1008: SavegameInterface_V1008, 1009: SavegameInterface_V1009, 1010: SavegameInterface_V1010, + 1011: SavegameInterface_V1011, }; const logger = createLogger("savegame_interface_registry"); diff --git a/src/js/savegame/schemas/1011.js b/src/js/savegame/schemas/1011.js new file mode 100644 index 00000000..8f203250 --- /dev/null +++ b/src/js/savegame/schemas/1011.js @@ -0,0 +1,44 @@ +import { createLogger } from "../../core/logging.js"; +import { ItemProcessorComponent } from "../../game/components/item_processor.js"; +import { MinerComponent } from "../../game/components/miner.js"; +import { Entity } from "../../game/entity.js"; +import { SavegameInterface_V1010 } from "./1010.js"; + +const schema = require("./1011.json"); +const logger = createLogger("savegame_interface/1011"); + +export class SavegameInterface_V1011 extends SavegameInterface_V1010 { + getVersion() { + return 1011; + } + + getSchemaUncached() { + return schema; + } + + /** + * @param {import("../savegame_typedefs.js").SavegameData} data + */ + static migrate1010to1011(data) { + logger.log("Migrating 1010 to 1011"); + const dump = data.dump; + if (!dump) { + return true; + } + + /** @type {Array