From f40e0da5b5540d633e5d121c907ff8dbae24fd07 Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Thu, 26 Dec 2019 15:56:18 -0600 Subject: [PATCH] Consolidate saved data to a single big record. Add mechanics for stats --- constants.js | 7 +++++ gorge.js | 72 ++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 63 insertions(+), 16 deletions(-) diff --git a/constants.js b/constants.js index d93c343..353e18b 100644 --- a/constants.js +++ b/constants.js @@ -1438,6 +1438,13 @@ const freeBuildingPowerupText = { desc: "Just kidding. It's full of people." } } + +const statTypes = { + powerups: { + name: "Powerups Clicked" + } +} + deepFreeze(prodUpgradeText); deepFreeze(prodAllUpgradeText); deepFreeze(clickUpgradeText); diff --git a/gorge.js b/gorge.js index 17448a6..29e2f53 100644 --- a/gorge.js +++ b/gorge.js @@ -2,6 +2,8 @@ const belongings = {}; +const stats = {}; + const macroDesc = { name: "Fen", species: "crux" @@ -648,6 +650,10 @@ function initializeData() { Object.keys(powerups).filter(x => powerups[x].duration !== undefined).forEach(key => activePowerups[key] = { life: 0 }); + + Object.entries(statTypes).forEach(([key, info]) => { + stats[key] = 0; + }); } function registerListeners() { @@ -1224,44 +1230,78 @@ function save(e) { function saveGame() { try { let storage = window.localStorage; + const save = {} - storage.setItem("save-version", 1); + save.version = migrations.length; + save.ownedUpgrades = ownedUpgrades; + save.resources = resources; + save.belongings = belongings; + save.stats = stats; - storage.setItem("ownedUpgrades", JSON.stringify(ownedUpgrades)); - - storage.setItem("resources", JSON.stringify(resources)); - - storage.setItem("belongings", JSON.stringify(belongings)); + storage.setItem("save", JSON.stringify(save)); } catch (e) { clickPopup("Can't save - no access to local storage.", "info", [window.innerWidth / 2, window.innerHeight / 5]); } } +const migrations = [ + // dummy migration, because there was no version 0 + + save => { + + }, + + // introduce stats + save => { + save.stats = {} + } +] + +function migrate(save) { + let version = save.version; + + while (version != migrations.length) { + migrations[version](save); + version += 1; + } + + save.version = version; +} + function load() { try { let storage = window.localStorage; - if (!storage.getItem("save-version")) { - return; + // migrate to everything in one + if (storage.getItem("save-version")) { + const save = {}; + save.ownedUpgrades = JSON.parse(storage.getItem("ownedUpgrades")); + save.resources = JSON.parse(storage.getItem("resources")); + save.belongings = JSON.parse(storage.getItem("belongings")); + save.version = 1; + storage.clear(); + storage.setItem("save", JSON.stringify(save)) } - let newOwnedUpgrades = JSON.parse(storage.getItem("ownedUpgrades")); + const save = JSON.parse(storage.getItem("save")); - for (const [key, value] of Object.entries(newOwnedUpgrades)) { + migrate(save); + + for (const [key, value] of Object.entries(save.ownedUpgrades)) { ownedUpgrades[key] = value; } - let newResources = JSON.parse(storage.getItem("resources")); - - for (const [key, value] of Object.entries(newResources)) { + for (const [key, value] of Object.entries(save.resources)) { resources[key] = value; } - let newBelongings = JSON.parse(storage.getItem("belongings")); - - for (const [key, value] of Object.entries(newBelongings)) { + for (const [key, value] of Object.entries(save.belongings)) { belongings[key] = value; } + + for (const [key, value] of Object.entries(save.stats)) { + stats[key] = value; + } } catch (e) { clickPopup("Can't load - no access to local storage.", "info", [window.innerWidth / 2, window.innerHeight / 5]); }