浏览代码

Consolidate saved data to a single big record. Add mechanics for stats

tags/v0.0.7
Fen Dweller 5 年前
父节点
当前提交
f40e0da5b5
找不到此签名对应的密钥 GPG 密钥 ID: E80B35A6F11C3656
共有 2 个文件被更改,包括 63 次插入16 次删除
  1. +7
    -0
      constants.js
  2. +56
    -16
      gorge.js

+ 7
- 0
constants.js 查看文件

@@ -1438,6 +1438,13 @@ const freeBuildingPowerupText = {
desc: "Just kidding. It's full of people." desc: "Just kidding. It's full of people."
} }
} }

const statTypes = {
powerups: {
name: "Powerups Clicked"
}
}

deepFreeze(prodUpgradeText); deepFreeze(prodUpgradeText);
deepFreeze(prodAllUpgradeText); deepFreeze(prodAllUpgradeText);
deepFreeze(clickUpgradeText); deepFreeze(clickUpgradeText);


+ 56
- 16
gorge.js 查看文件

@@ -2,6 +2,8 @@


const belongings = {}; const belongings = {};


const stats = {};

const macroDesc = { const macroDesc = {
name: "Fen", name: "Fen",
species: "crux" species: "crux"
@@ -648,6 +650,10 @@ function initializeData() {
Object.keys(powerups).filter(x => powerups[x].duration !== undefined).forEach(key => activePowerups[key] = { Object.keys(powerups).filter(x => powerups[x].duration !== undefined).forEach(key => activePowerups[key] = {
life: 0 life: 0
}); });

Object.entries(statTypes).forEach(([key, info]) => {
stats[key] = 0;
});
} }


function registerListeners() { function registerListeners() {
@@ -1224,44 +1230,78 @@ function save(e) {
function saveGame() { function saveGame() {
try { try {
let storage = window.localStorage; 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) { } catch (e) {
clickPopup("Can't save - no access to local storage.", "info", [window.innerWidth / 2, window.innerHeight / 5]); 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() { function load() {
try { try {
let storage = window.localStorage; 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; 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; 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; belongings[key] = value;
} }

for (const [key, value] of Object.entries(save.stats)) {
stats[key] = value;
}
} catch (e) { } catch (e) {
clickPopup("Can't load - no access to local storage.", "info", [window.innerWidth / 2, window.innerHeight / 5]); clickPopup("Can't load - no access to local storage.", "info", [window.innerWidth / 2, window.innerHeight / 5]);
} }


正在加载...
取消
保存