diff --git a/src/App.vue b/src/App.vue index d638585..72e491b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -9,7 +9,6 @@ import {RouterLink, RouterView} from 'vue-router' Adventurers - = missive.maxProgress) continue; for (const adventurerId in missive.adventurers) { const adventurer = missive.adventurers[adventurerId]; const attack = adventurer.getAttack(); @@ -142,7 +107,13 @@ export default defineComponent({ this.lastQuestGot = saveData.lastQuestGot; - this.guild = new Guild(saveData.guild.level, saveData.guild.gold); + const guildUpgrades = {} as { [key: string]: GuildUpgrade }; + if (saveData.guild.adventurerCapacity) { + console.log(saveData.guild.adventurerCapacity); + guildUpgrades.adventurerCapacity = new AdventurerCapacityUpgrade(saveData.guild.adventurerCapacity.level); + } + + this.guild = new Guild(saveData.guild.level, saveData.guild.gold, guildUpgrades); const adventurers = {} as { [key: string]: Adventurer }; diff --git a/src/GameData.ts b/src/GameData.ts index 382e451..af92b9c 100644 --- a/src/GameData.ts +++ b/src/GameData.ts @@ -84,9 +84,6 @@ export async function loadAvailableQuests(): Promise<{ [key: string]: { [key: st ); } } - - console.log(quests); - return quests; } @@ -113,4 +110,4 @@ export async function loadAdventurersForHire(currentAdventurerIds: Array } return adventurers; -} \ No newline at end of file +} diff --git a/src/classes/Guild.ts b/src/classes/Guild.ts index 3900172..33012ca 100644 --- a/src/classes/Guild.ts +++ b/src/classes/Guild.ts @@ -1,15 +1,23 @@ +import type {GuildUpgrade} from "@/classes/GuildUpgrade"; +import {AdventurerCapacityUpgrade} from "@/classes/guildUpgrades/AdventurerCapacityUpgrade"; + export class Guild { gold: number; level: number; displayUpgradeCost: number|string; - upgradeCost: number|null = null; + adventurerCapacity: AdventurerCapacityUpgrade; - constructor(level: number, gold: number) { + constructor(level: number, gold: number, upgrades: {[index:string]: GuildUpgrade} = {}) { this.gold = gold; this.level = level; this.displayUpgradeCost = this.getUpgradeCost() ?? "Max level"; this.upgradeCost = this.getUpgradeCost(); + + console.log(upgrades) + + this.adventurerCapacity = upgrades.adventurerCapacity as AdventurerCapacityUpgrade ?? new AdventurerCapacityUpgrade(); + } upgrade(): void { @@ -43,4 +51,4 @@ const upgradeCosts = { "4": 10000, "5": 25000, "6": 50000, -} as {[index:string]: number} \ No newline at end of file +} as {[index:string]: number} diff --git a/src/classes/GuildUpgrade.ts b/src/classes/GuildUpgrade.ts new file mode 100644 index 0000000..6cf5341 --- /dev/null +++ b/src/classes/GuildUpgrade.ts @@ -0,0 +1,7 @@ +export class GuildUpgrade { + + level: number = 1; + nextLevelCost: number | null = null; + guildLevelRequirement: number = 1; + +} diff --git a/src/classes/guildUpgrades/AdventurerCapacityUpgrade.ts b/src/classes/guildUpgrades/AdventurerCapacityUpgrade.ts new file mode 100644 index 0000000..680a9da --- /dev/null +++ b/src/classes/guildUpgrades/AdventurerCapacityUpgrade.ts @@ -0,0 +1,26 @@ +import {GuildUpgrade} from "@/classes/GuildUpgrade"; + +export class AdventurerCapacityUpgrade extends GuildUpgrade { + constructor(level: number = 1) { + super(); + this.level = level; + this.nextLevelCost = this.getCostForLevel(this.level); + this.guildLevelRequirement = 1; + } + + upgrade(): void { + this.level += 1; + this.nextLevelCost = this.getCostForLevel(this.level); + } + + getCostForLevel(level: number): number { + return 1500 + ((level - 1) * 1.15 * 1500); + } + + /** + * Returns the number of adventurers the guild can have + */ + getAdventurerCapacity(): number { + return 2 + this.level ; + } +} diff --git a/src/views/AdventurerView.vue b/src/views/AdventurerView.vue index 8938d7c..9794ca6 100644 --- a/src/views/AdventurerView.vue +++ b/src/views/AdventurerView.vue @@ -9,11 +9,12 @@ @@ -28,7 +29,7 @@
-

Recruited adventurers

+

Recruited adventurers ({{ Object.keys(adventurers).length }} / {{ guild.adventurerCapacity.getAdventurerCapacity() }})

@@ -45,6 +46,7 @@ import {defineComponent} from "vue"; import AdventurerTile from "@/components/AdventurerTile.vue"; import type {Adventurer} from "@/classes/Adventurer"; import { loadAdventurersForHire } from "@/GameData"; +import type {Guild} from "@/classes/Guild"; export default defineComponent({ name: "RecruitView", @@ -56,6 +58,12 @@ export default defineComponent({ } }, props: { + guild: { + type: Object as PropType, + default() { + return {} as Guild + }, + }, adventurers: { type: Object as PropType<{ [key: string]: Adventurer }>, default() { @@ -92,6 +100,7 @@ export default defineComponent({ }, hireAdventurer(adventurer: Adventurer|any): void { + if (Object.keys(this.adventurers).length >= this.guild.adventurerCapacity.getAdventurerCapacity()) return; this.adventurers[adventurer.id] = adventurer; this.currentlyForHire = null; window.localStorage.removeItem("currentlyForHire"); @@ -196,7 +205,8 @@ export default defineComponent({ color: #fff; } &.disabled { - color: rgba(0,0,0, 0.5) + color: rgba(0,0,0, 0.5); + cursor: default; } } } @@ -206,4 +216,4 @@ export default defineComponent({ } } - \ No newline at end of file + diff --git a/src/views/QuestView.vue b/src/views/QuestView.vue index 2bc8381..55fe014 100644 --- a/src/views/QuestView.vue +++ b/src/views/QuestView.vue @@ -145,6 +145,7 @@ export default defineComponent({ h1 { font-size: 3rem; + text-align: center; } .missives {