From 23db5b117ed06aecf5579958bc24757544a0f75b Mon Sep 17 00:00:00 2001 From: tobspr <> Date: Mon, 1 Jun 2020 12:49:04 +0200 Subject: [PATCH] Migrate old savegames --- src/html/index.html | 3 ++ src/js/changelog.js | 8 ++++ src/js/platform/browser/google_analytics.js | 5 --- src/js/savegame/savegame.js | 17 +++++++-- .../savegame/savegame_interface_registry.js | 6 ++- src/js/savegame/schemas/1002.js | 37 +++++++++++++++++++ src/js/savegame/schemas/1002.json | 5 +++ version | 2 +- 8 files changed, 72 insertions(+), 11 deletions(-) create mode 100644 src/js/savegame/schemas/1002.js create mode 100644 src/js/savegame/schemas/1002.json diff --git a/src/html/index.html b/src/html/index.html index b1d89377..243455ea 100644 --- a/src/html/index.html +++ b/src/html/index.html @@ -40,6 +40,9 @@ + + + diff --git a/src/js/changelog.js b/src/js/changelog.js index 452cf7a4..dd219290 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,4 +1,12 @@ export const CHANGELOG = [ + { + version: "1.1.3", + date: "unreleased", + entries: [ + "Allow binding mouse buttons to actions (by Dimava)", + "Fix belts being too slow when copied via blueprint (by Dimava)", + ], + }, { version: "1.1.2", date: "30.05.2020", diff --git a/src/js/platform/browser/google_analytics.js b/src/js/platform/browser/google_analytics.js index 55de95cc..3c54fbbd 100644 --- a/src/js/platform/browser/google_analytics.js +++ b/src/js/platform/browser/google_analytics.js @@ -66,11 +66,6 @@ export class GoogleAnalyticsImpl extends AnalyticsInterface { } trackUiClick(elementName) { - // Only track a fraction of clicks to not annoy google analytics - if (Math_random() < 0.9) { - return; - } - const stateKey = this.app.stateMgr.getCurrentState().key; const fullSelector = stateKey + ">" + elementName; diff --git a/src/js/savegame/savegame.js b/src/js/savegame/savegame.js index a78200f9..7d59a056 100644 --- a/src/js/savegame/savegame.js +++ b/src/js/savegame/savegame.js @@ -10,8 +10,9 @@ import { BaseSavegameInterface } from "./savegame_interface"; import { createLogger } from "../core/logging"; import { globalConfig } from "../core/config"; import { SavegameInterface_V1000 } from "./schemas/1000"; -import { getSavegameInterface } from "./savegame_interface_registry"; +import { getSavegameInterface, savegameInterfaces } from "./savegame_interface_registry"; import { SavegameInterface_V1001 } from "./schemas/1001"; +import { SavegameInterface_V1002 } from "./schemas/1002"; const logger = createLogger("savegame"); @@ -30,6 +31,11 @@ export class Savegame extends ReadWriteProxy { /** @type {import("./savegame_typedefs").SavegameData} */ this.currentData = this.getDefaultData(); + + assert( + savegameInterfaces[Savegame.getCurrentVersion()], + "Savegame interface not defined: " + Savegame.getCurrentVersion() + ); } //////// RW Proxy Impl ////////// @@ -38,14 +44,14 @@ export class Savegame extends ReadWriteProxy { * @returns {number} */ static getCurrentVersion() { - return 1001; + return 1002; } /** * @returns {typeof BaseSavegameInterface} */ static getReaderClass() { - return SavegameInterface_V1001; + return savegameInterfaces[Savegame.getCurrentVersion()]; } /** @@ -82,6 +88,11 @@ export class Savegame extends ReadWriteProxy { data.version = 1001; } + if (data.version === 1001) { + SavegameInterface_V1002.migrate1001to1002(data); + data.version = 1002; + } + return ExplainedResult.good(); } diff --git a/src/js/savegame/savegame_interface_registry.js b/src/js/savegame/savegame_interface_registry.js index 2560b23e..7c6db250 100644 --- a/src/js/savegame/savegame_interface_registry.js +++ b/src/js/savegame/savegame_interface_registry.js @@ -2,11 +2,13 @@ import { BaseSavegameInterface } from "./savegame_interface"; import { SavegameInterface_V1000 } from "./schemas/1000"; import { createLogger } from "../core/logging"; import { SavegameInterface_V1001 } from "./schemas/1001"; +import { SavegameInterface_V1002 } from "./schemas/1002"; /** @type {Object.} */ -const interfaces = { +export const savegameInterfaces = { 1000: SavegameInterface_V1000, 1001: SavegameInterface_V1001, + 1002: SavegameInterface_V1002, }; const logger = createLogger("savegame_interface_registry"); @@ -27,7 +29,7 @@ export function getSavegameInterface(savegame) { return null; } - const interfaceClass = interfaces[version]; + const interfaceClass = savegameInterfaces[version]; if (!interfaceClass) { logger.warn("Version", version, "has no implemented interface!"); return null; diff --git a/src/js/savegame/schemas/1002.js b/src/js/savegame/schemas/1002.js new file mode 100644 index 00000000..92dadfc1 --- /dev/null +++ b/src/js/savegame/schemas/1002.js @@ -0,0 +1,37 @@ +import { createLogger } from "../../core/logging.js"; +import { T } from "../../translations.js"; +import { SavegameInterface_V1001 } from "./1001.js"; + +const schema = require("./1002.json"); +const logger = createLogger("savegame_interface/1002"); + +export class SavegameInterface_V1002 extends SavegameInterface_V1001 { + getVersion() { + return 1002; + } + + getSchemaUncached() { + return schema; + } + + /** + * @param {import("../savegame_typedefs.js").SavegameData} data + */ + static migrate1001to1002(data) { + logger.log("Migrating 1001 to 1002"); + const dump = data.dump; + if (!dump) { + return true; + } + + const entities = dump.entities; + for (let i = 0; i < entities.length; ++i) { + const entity = entities[i]; + const beltComp = entity.components.Belt; + const ejectorComp = entity.components.ItemEjector; + if (beltComp && ejectorComp) { + ejectorComp.instantEject = true; + } + } + } +} diff --git a/src/js/savegame/schemas/1002.json b/src/js/savegame/schemas/1002.json new file mode 100644 index 00000000..6682f615 --- /dev/null +++ b/src/js/savegame/schemas/1002.json @@ -0,0 +1,5 @@ +{ + "type": "object", + "required": [], + "additionalProperties": true +} diff --git a/version b/version index 8428158d..9c1218c2 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.1.2 \ No newline at end of file +1.1.3 \ No newline at end of file