From 9fb64e75398e85e67c2e0bc50dfd87a2e5a9af38 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Fri, 24 Mar 2023 01:43:17 +0100 Subject: [PATCH] save/load logic moved to its own file --- src/App.vue | 31 +++++++++++++---------------- src/GameData.ts | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 17 deletions(-) create mode 100644 src/GameData.ts diff --git a/src/App.vue b/src/App.vue index cd335f9..59280d4 100644 --- a/src/App.vue +++ b/src/App.vue @@ -27,6 +27,7 @@ import {Adventurer} from "@/classes/Adventurer"; import {Quest} from "@/classes/Quest"; import {Guild} from "@/classes/Guild"; import {getFromString, QuestRank} from "@/classes/QuestRank"; +import {GameData, loadGame, saveGame} from "@/GameData"; export default defineComponent({ name: "GuildView", @@ -53,7 +54,7 @@ export default defineComponent({ D: null as null|number, E: null as null|number, F: null as null|number, - }, + } as { [key: string]: null|number }, lastRecruitHandled: null as null|number, adventurers: { } as { [key: string]: Adventurer }, @@ -149,20 +150,9 @@ export default defineComponent({ quest.id = newId; this.missives[rank][newId] = quest; }, - saveGame() { - console.debug("Saving game..."); - window.localStorage.setItem("savedGame", JSON.stringify({ - guild: this.guild, - adventurers: this.adventurers, - missives: this.missives, - lastQuestGot: this.lastQuestGot, - lastRecruitAction: this.lastRecruitHandled, - })); - }, loadGame() { - const rawData = window.localStorage.getItem("savedGame"); - if (!rawData) return; - const saveData = JSON.parse(rawData); + const saveData = loadGame(); + if (saveData === null) return; this.lastQuestGot = saveData.lastQuestGot; @@ -172,7 +162,7 @@ export default defineComponent({ for (const id in saveData.adventurers) { const data = saveData.adventurers[id]; - const adventurer = new Adventurer(data.id, data.name, data.portrait, data.attackPerLevel, data.defensePerLevel, data.level); + const adventurer = new Adventurer(data.id, data.name, data.portrait, data.attackPerLevel, data.level, data.exp); adventurer.busy = data.busy; adventurers[data.id] = adventurer; } @@ -208,8 +198,15 @@ export default defineComponent({ this.loadGame(); setInterval(() => { - this.saveGame(); - }, 30*1000) + saveGame(new GameData( + this.guild, + this.adventurers, + this.missives, + this.lastQuestGot, + this.lastRecruitHandled + ) + ); + }, 10*1000) setInterval(() => { this.updateMissives(); diff --git a/src/GameData.ts b/src/GameData.ts new file mode 100644 index 0000000..ef79ab5 --- /dev/null +++ b/src/GameData.ts @@ -0,0 +1,53 @@ +import type {Guild} from "@/classes/Guild"; +import type {Adventurer} from "@/classes/Adventurer"; +import type {Quest} from "@/classes/Quest"; + +export class GameData { + guild: Guild; + adventurers: { [key: string]: Adventurer }; + missives: { [key: string]: { [key: string]: Quest } }; + lastQuestGot: { [key: string]: null | number }; + lastRecruitAction: null | number; + + constructor(guild: Guild, adventurers: { [key: string]: Adventurer }, missives: { [key: string]: { [key: string]: Quest } }, lastQuestGot: { [key: string]: null | number }, lastRecruitAction: null | number) { + this.guild = guild; + this.adventurers = adventurers; + this.missives = missives; + this.lastQuestGot = lastQuestGot; + this.lastRecruitAction = lastRecruitAction; + } +} + + +/** + * Save the game to local storage + */ +export function saveGame( + data: GameData +): void { + console.debug("Saving game..."); + window.localStorage.setItem("savedGame", JSON.stringify({ + guild: data.guild, + adventurers: data.adventurers, + missives: data.missives, + lastQuestGot: data.lastQuestGot, + lastRecruitAction: data.lastRecruitAction, + })); +} + +export function loadGame(): GameData | null { + const savedGame = window.localStorage.getItem("savedGame"); + if (!savedGame) return null; + console.debug("Loading game..."); + const parsedGame = JSON.parse(savedGame); + return new GameData( + parsedGame.guild, + parsedGame.adventurers, + parsedGame.missives, + parsedGame.lastQuestGot, + parsedGame.lastRecruitAction + ); + + +} +