save/load logic moved to its own file

This commit is contained in:
2023-03-24 01:43:17 +01:00
parent 01152a9ad4
commit 9fb64e7539
2 changed files with 67 additions and 17 deletions
+14 -17
View File
@@ -27,6 +27,7 @@ import {Adventurer} from "@/classes/Adventurer";
import {Quest} from "@/classes/Quest"; import {Quest} from "@/classes/Quest";
import {Guild} from "@/classes/Guild"; import {Guild} from "@/classes/Guild";
import {getFromString, QuestRank} from "@/classes/QuestRank"; import {getFromString, QuestRank} from "@/classes/QuestRank";
import {GameData, loadGame, saveGame} from "@/GameData";
export default defineComponent({ export default defineComponent({
name: "GuildView", name: "GuildView",
@@ -53,7 +54,7 @@ export default defineComponent({
D: null as null|number, D: null as null|number,
E: null as null|number, E: null as null|number,
F: null as null|number, F: null as null|number,
}, } as { [key: string]: null|number },
lastRecruitHandled: null as null|number, lastRecruitHandled: null as null|number,
adventurers: { adventurers: {
} as { [key: string]: Adventurer }, } as { [key: string]: Adventurer },
@@ -149,20 +150,9 @@ export default defineComponent({
quest.id = newId; quest.id = newId;
this.missives[rank][newId] = quest; 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() { loadGame() {
const rawData = window.localStorage.getItem("savedGame"); const saveData = loadGame();
if (!rawData) return; if (saveData === null) return;
const saveData = JSON.parse(rawData);
this.lastQuestGot = saveData.lastQuestGot; this.lastQuestGot = saveData.lastQuestGot;
@@ -172,7 +162,7 @@ export default defineComponent({
for (const id in saveData.adventurers) { for (const id in saveData.adventurers) {
const data = saveData.adventurers[id]; 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; adventurer.busy = data.busy;
adventurers[data.id] = adventurer; adventurers[data.id] = adventurer;
} }
@@ -208,8 +198,15 @@ export default defineComponent({
this.loadGame(); this.loadGame();
setInterval(() => { setInterval(() => {
this.saveGame(); saveGame(new GameData(
}, 30*1000) this.guild,
this.adventurers,
this.missives,
this.lastQuestGot,
this.lastRecruitHandled
)
);
}, 10*1000)
setInterval(() => { setInterval(() => {
this.updateMissives(); this.updateMissives();
+53
View File
@@ -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
);
}