diff --git a/src/App.vue b/src/App.vue index d8ec3c4..bedd0bf 100644 --- a/src/App.vue +++ b/src/App.vue @@ -14,6 +14,7 @@ import {RouterLink, RouterView} from 'vue-router' :adventurers="adventurers" :quests="missives" @finalizeQuest="finalizeQuest($event)" + @wipeSave="resetSave()" /> @@ -66,7 +67,7 @@ export default defineComponent({ B: {} as { [key: string]: Quest }, A: {} as { [key: string]: Quest }, S: {} as { [key: string]: Quest }, - }, + } as { [key: string]: { [key: string]: Quest } }, }), methods: { async updateMissives() { @@ -97,7 +98,6 @@ export default defineComponent({ } missive.adventurers = []; delete this.missives[missive.rank.toString() as QuestRank][missive.id]; - this.saveGame(); }, getRandomQuest(rank: QuestRank): Quest | null { const keys = Object.keys(this.quests[rank]); @@ -114,6 +114,7 @@ export default defineComponent({ this.missives[rank][newId] = quest; }, saveGame() { + console.debug("Saving game...") window.localStorage.setItem("savedGame", JSON.stringify({ guild: this.guild, adventurers: this.adventurers, @@ -130,17 +131,45 @@ export default defineComponent({ for (const id in saveData.adventurers) { const data = saveData.adventurers[id]; - adventurers[data.id] = new Adventurer(data.id, data.name, data.portrait, data.attackPerLevel, data.defensePerLevel); + const adventurer = new Adventurer(data.id, data.name, data.portrait, data.attackPerLevel, data.defensePerLevel); + adventurer.busy = data.busy; + adventurers[data.id] = adventurer; + } + this.adventurers = adventurers; + + const missives = {} as { [key: string]: { [key: string]: Quest } }; + + console.log(saveData.missives) + + for (const id in saveData.missives) { + const missiveRank = {} as { [key: string]: Quest } + for (const questId in saveData.missives[id]) { + const data = saveData.missives[id][questId]; + const quest = new Quest(id, getFromString(data.rank), data.title, data.text, data.maxProgress, data.expReward, data.goldReward); + quest.progressPoints = data.progressPoints; + if (data.adventurers.length > 0) { + quest.adventurers.push(this.adventurers[data.adventurers[0].id]) + } + missiveRank[questId] = quest; + } + missives[id] = missiveRank; } - this.adventurers = adventurers; - this.missives = saveData.missives; + this.missives = missives; + }, + resetSave() { + if (!confirm("You are about to wipe your save file. Are you sure?")) return; + window.localStorage.removeItem("savedGame"); + window.location.reload(); } }, mounted() { - this.loadGame(); + setInterval(() => { + this.saveGame(); + }, 30*1000) + setInterval(() => { this.updateMissives(); }, 1000); diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 0eaf7d0..91f1737 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -14,6 +14,9 @@ ({{ guild.displayUpgradeCost }}) +
+ Wipe your save data +
@@ -62,6 +65,13 @@ export default defineComponent({ } .upgrade { text-align: center; + .wipe-save { + display: inline-flex; + font-weight: bold; + margin-block: 1rem; + color: #d52121; + cursor: pointer; + } p { margin: 0; font-size: 1.5rem; diff --git a/src/views/QuestView.vue b/src/views/QuestView.vue index 94a2d92..723b2aa 100644 --- a/src/views/QuestView.vue +++ b/src/views/QuestView.vue @@ -101,14 +101,14 @@ export default defineComponent({ quests: { type: Object as PropType<{ [key: string]: Quest }>, default() { - return {} + return {}; }, }, }, data() { return {}; }, - emits: [ 'finalizeQuest' ], + emits: [ 'finalizeQuest', 'wipeSave' ], })