From a1fd83c03c2ad74861c6cb6229d43942b3d7ac0b Mon Sep 17 00:00:00 2001 From: tobspr Date: Thu, 14 May 2020 22:20:19 +0200 Subject: [PATCH] Fix serialization errors and implement hub deserialization --- src/js/game/hub_goals.js | 19 ++++++++++++++++++- src/js/game/hud/parts/game_menu.js | 1 - src/js/savegame/savegame_compressor.js | 16 ++++++++-------- src/js/savegame/savegame_serializer.js | 2 +- src/js/states/main_menu.js | 2 +- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js index 376cba8c..270fee85 100644 --- a/src/js/game/hub_goals.js +++ b/src/js/game/hub_goals.js @@ -35,7 +35,24 @@ export class HubGoals extends BasicSerializableObject { return errorCode; } - console.error("TODO: HubGoals deserialize() properly"); + // Compute gained rewards + for (let i = 0; i < this.level; ++i) { + if (i < tutorialGoals.length) { + const reward = tutorialGoals[i].reward; + this.gainedRewards[reward] = (this.gainedRewards[reward] || 0) + 1; + } + } + + // Compute upgrade improvements + for (const upgradeId in UPGRADES) { + const upgradeHandle = UPGRADES[upgradeId]; + const level = this.upgradeLevels[upgradeId] || 0; + let totalImprovement = upgradeHandle.baseValue || 1; + for (let i = 0; i < level; ++i) { + totalImprovement += upgradeHandle.tiers[i].improvement; + } + this.upgradeImprovements[upgradeId] = totalImprovement; + } } /** diff --git a/src/js/game/hud/parts/game_menu.js b/src/js/game/hud/parts/game_menu.js index db633355..74c4343e 100644 --- a/src/js/game/hud/parts/game_menu.js +++ b/src/js/game/hud/parts/game_menu.js @@ -80,7 +80,6 @@ export class HUDGameMenu extends BaseHUDPart { } onGameSaved() { - console.log("ON GAME SAVED"); this.saveButton.classList.toggle("animEven"); this.saveButton.classList.toggle("animOdd"); } diff --git a/src/js/savegame/savegame_compressor.js b/src/js/savegame/savegame_compressor.js index 3cfae5e9..4962171e 100644 --- a/src/js/savegame/savegame_compressor.js +++ b/src/js/savegame/savegame_compressor.js @@ -64,7 +64,7 @@ function compressObjectInternal(obj, keys = [], values = []) { result.push(compressObjectInternal(obj[i], keys, values)); } return result; - } else if (typeof obj === "object") { + } else if (typeof obj === "object" && obj !== null) { let result = {}; for (const key in obj) { let index = keys.indexOf(key); @@ -108,7 +108,7 @@ function decompressObjectInternal(obj, keys = [], values = []) { result.push(decompressObjectInternal(obj[i], keys, values)); } return result; - } else if (typeof obj === "object") { + } else if (typeof obj === "object" && obj !== null) { let result = {}; for (const key in obj) { const realIndex = decompressInt(key); @@ -124,11 +124,11 @@ function decompressObjectInternal(obj, keys = [], values = []) { } export function decompressObject(obj) { - if (G_IS_DEV) { - return obj; + if (obj.keys && obj.values && obj.data) { + const keys = obj.keys; + const values = obj.values; + const result = decompressObjectInternal(obj.data, keys, values); + return result; } - const keys = obj.keys; - const values = obj.values; - const result = decompressObjectInternal(obj.data, keys, values); - return result; + return obj; } diff --git a/src/js/savegame/savegame_serializer.js b/src/js/savegame/savegame_serializer.js index 96ff701f..ad9b9569 100644 --- a/src/js/savegame/savegame_serializer.js +++ b/src/js/savegame/savegame_serializer.js @@ -128,7 +128,7 @@ export class SavegameSerializer { if (!verifyResult.result) { return ExplainedResult.bad(verifyResult.reason); } - + console.log("SAVEGAME:", savegame); let errorReason = null; errorReason = errorReason || root.entityMgr.deserialize(savegame.entityMgr); diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index 0992437e..4cf3ad79 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -82,7 +82,7 @@ export class MainMenuState extends GameState { for (let i = 0; i < games.length; ++i) { const elem = makeDiv(parent, null, ["savegame"]); - makeDiv(elem, null, ["internalId"], games[i].internalId.substr(0, 15)); + makeDiv(elem, null, ["internalId"], games[i].internalId.substr(0, 6)); makeDiv( elem, null,