diff --git a/src/App.vue b/src/App.vue index d97111c..a0c25ff 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,5 @@ +import {RouterLink, RouterView} from 'vue-router' @@ -10,7 +9,12 @@ import {RouterLink, RouterView} from 'vue-router' - + diff --git a/src/classes/Guild.ts b/src/classes/Guild.ts index 4ee8fb3..1bc1960 100644 --- a/src/classes/Guild.ts +++ b/src/classes/Guild.ts @@ -1,9 +1,36 @@ export class Guild { gold: number; level: number; + displayUpgradeCost: number|string; constructor(level: number, gold: number) { this.gold = gold; this.level = level; + this.displayUpgradeCost = this.getUpgradeCost() ?? "Max level"; } -} \ No newline at end of file + + upgrade(): void { + const cost = this.getUpgradeCost(); + if (cost === null) return; + if (this.gold < cost) return; + this.gold -= cost; + this.level += 1; + if (this.level > 7) { + this.displayUpgradeCost = "Max level"; + } + } + + getUpgradeCost(): number|null { + return upgradeCosts[this.level] ?? null; + } +} + +const upgradeCosts = { + "1": 1000, + "2": 2500, + "3": 5000, + "4": 10000, + "5": 25000, + "6": 50000, + "7": 100000, +} as {[index:string]: number} \ No newline at end of file diff --git a/src/classes/Quest.ts b/src/classes/Quest.ts index bac587a..c38475d 100644 --- a/src/classes/Quest.ts +++ b/src/classes/Quest.ts @@ -1,26 +1,27 @@ import type {Adventurer} from "@/classes/Adventurer"; +import type {QuestRank} from "@/classes/QuestRank"; export class Quest { id: string; + rank: QuestRank; title: string; text: string; adventurers: Array; progressPoints: number; maxProgress: number; expReward: number; + goldReward: number; - constructor(id: string, title: string, text: string, maxProgress: number, expReward: number) { + constructor(id: string, rank: QuestRank, title: string, text: string, maxProgress: number, expReward: number, goldReward: number) { this.id = id; + this.rank = rank; this.title = title; this.text = text; this.maxProgress = maxProgress; this.expReward = expReward; + this.goldReward = goldReward; this.progressPoints = 0; this.adventurers = []; } } - -export function createRandomQuest(budget: number) { - -} diff --git a/src/classes/QuestRank.ts b/src/classes/QuestRank.ts new file mode 100644 index 0000000..c594562 --- /dev/null +++ b/src/classes/QuestRank.ts @@ -0,0 +1,13 @@ +export enum QuestRank { + S = "S", + A = "A", + B = "B", + C = "C", + D = "D", + E = "E", + F = "F", +} + +export function getFromString(string: keyof typeof QuestRank): QuestRank { + return QuestRank[string]; +} \ No newline at end of file diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 02bee0e..0eaf7d0 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -9,9 +9,9 @@ Guild level: {{ guild.level }} - + Upgrade guild level - (1000 gold) + ({{ guild.displayUpgradeCost }}) diff --git a/src/views/QuestView.vue b/src/views/QuestView.vue index a17cef1..94a2d92 100644 --- a/src/views/QuestView.vue +++ b/src/views/QuestView.vue @@ -5,25 +5,25 @@ { if (missive.progressPoints < missive.maxProgress) return; - finalizeQuest(missive, 'F'); + $emit('finalizeQuest', missive) }" > - {{missive.title}} - {{missive.text}} + {{ missive.title }} + {{ missive.text }} { + :adventurer="missive.adventurers[0]" + :all-adventurers="adventurers" + @hire-adventurer="(id) => { adventurers[id].busy = true; missive.adventurers[0] = adventurers[id]; }" - @free-adventurer="(id) => { + @free-adventurer="(id) => { if (missive.progressPoints >= missive.maxProgress) return; adventurers[id].busy = false; missive.adventurers.splice(0, 1); @@ -44,15 +44,15 @@ { if (missive.progressPoints < missive.maxProgress) return; - finalizeQuest(missive, 'E'); + $emit('finalizeQuest', missive) }" > - {{missive.title}} - {{missive.text}} + {{ missive.title }} + {{ missive.text }} , + type: Object as PropType<{ [key: string]: Adventurer }>, default() { return {}; }, }, quests: { - type: Object as PropType<{[key: string]: Quest}>, + type: Object as PropType<{ [key: string]: Quest }>, default() { return {} }, }, }, data() { - return { - missiveUpdateTask: null as null|number, - newMissiveTask: null as null|number, - missives: { - F: {} as { [key: string]: Quest }, - E: {} as { [key: string]: Quest }, - D: {} as { [key: string]: Quest }, - C: {} as { [key: string]: Quest }, - B: {} as { [key: string]: Quest }, - A: {} as { [key: string]: Quest }, - S: {} as { [key: string]: Quest }, - } , - } + return {}; }, - methods: { - updateMissives() { - for (const missiveId in this.missives.F) { - const missive = this.missives.F[missiveId]; - if (missive.adventurers.length <= 0) { - missive.progressPoints = 0; - continue; - } - for (const adventurerId in missive.adventurers) { - const adventurer = missive.adventurers[adventurerId]; - const attack = adventurer.attackPerLevel * adventurer.level; - missive.progressPoints = Math.min(missive.progressPoints + attack, missive.maxProgress); - } - } - }, - finalizeQuest(missive: Quest, rank: "F"|"E"|"D"|"C"|"B"|"A"|"S") { - missive.progressPoints = 0; - for (const adventurerId in missive.adventurers) { - const adventurer = missive.adventurers[adventurerId]; - adventurer.exp += (missive.expReward / missive.adventurers.length); - adventurer.busy = false; - } - missive.adventurers = []; - delete this.missives[rank][missive.id]; - }, - getRandomQuest(rank: "F"|"E"|"D"|"C"|"B"|"A"|"S"): Quest|null { - const keys = Object.keys(this.quests[rank]); - if (keys.length <= 0) return null; - const questsForRank = this.quests[rank] as unknown as { [key: string]: Quest }; - const randomId = keys.length * Math.random() << 0; - const randomIdString = keys[randomId] as string; - return questsForRank[randomIdString]; - }, - createMissive(questToAdd: Quest, rank: "F"|"E"|"D"|"C"|"B"|"A"|"S") { - const quest = JSON.parse(JSON.stringify(questToAdd)); - const newId = Math.random().toString(16).slice(2).toString(); - quest.id = newId; - this.missives[rank][newId] = quest; - } - }, - mounted() { - const quest = this.getRandomQuest("F"); - if (quest !== null) { - this.createMissive(quest, "F"); - } - this.missiveUpdateTask = setInterval(() => { - this.updateMissives(); - }, 1000) - this.newMissiveTask = setInterval(() => { - const keys = Object.keys(this.missives["F"]); - if (keys.length >= 5) return; - const quest = this.getRandomQuest("F"); - if (quest !== null) { - this.createMissive(quest, "F"); - } - }, 10000) - }, - beforeUnmount() { - if (this.missiveUpdateTask) clearInterval(this.missiveUpdateTask); - if (this.newMissiveTask) clearInterval(this.newMissiveTask); - } + emits: [ 'finalizeQuest' ], })
Guild level: {{ guild.level }}
{{missive.text}}
{{ missive.text }}