finish up base recruitment system

This commit is contained in:
2025-05-31 19:53:31 +02:00
parent 2cb9221da1
commit a821094513
9 changed files with 148 additions and 39 deletions
+8 -1
View File
@@ -13,7 +13,10 @@
<p>Exp: {{ adventurer.exp }} / {{ adventurer.getNextLevelExpRequirement() }}</p>
<p>DPS: {{ formatDamage(adventurer.getDPS()) }}</p>
</div>
<div class="adventurer-upgrades">
<div
v-if="showPrestigeButton"
class="adventurer-upgrades"
>
<button
class="button metal"
:disabled="!adventurer.canPrestigeUp()"
@@ -44,6 +47,10 @@ export default defineComponent({
type: Object as PropType<Adventurer | null>,
required: true,
},
showPrestigeButton: {
type: Boolean,
default: true,
},
},
mounted() {
const refs = this.$refs as any;
+30 -19
View File
@@ -1,33 +1,34 @@
<template>
<section class="recruit panel pinned-paper">
<h1>Applying adventurers</h1>
<h1>Applying adventurers
{{ `(${Object.keys(adventurersForHire).length}/${guild.recruitmentCapacity.getRecruitmentCapacity()})` }}</h1>
<div class="adventurers">
<div v-for="adventurerForHire in currentlyForHire" :key="adventurerForHire.id">
<div class="adventurer-tile">
<adventurer-tile class="hire-tile" :adventurer="adventurerForHire"/>
<div class="decision">
<div class="adventurer-tile" v-for="adventurerForHire in currentlyForHire" :key="adventurerForHire.id">
<adventurer-tile
class="hire-tile"
:adventurer="adventurerForHire"
@click="previewAdventurer(adventurerForHire)"
/>
<div class="decision">
<span
title="Hire"
@click="hireAdventurer(adventurerForHire)"
:class="{disabled: Object.keys(adventurersForHire).length >= guild.adventurerCapacity.getAdventurerCapacity()}"
:class="{disabled: !canRecruitMore}"
>
</span>
<span
:title="Object.keys(adventurersForHire).length > 0 ? 'Dismiss' : ''"
:class="{disabled: Object.keys(adventurersForHire).length <= 0}"
@click="dismissAdventurer(adventurerForHire)"
>
<span
:title="Object.keys(adventurersForHire).length > 0 ? 'Dismiss' : ''"
:class="{disabled: Object.keys(adventurersForHire).length <= 0}"
@click="dismissAdventurer(adventurerForHire)"
>
</span>
</div>
</div>
</div>
<div v-if="Object.keys(adventurersForHire).length == 0">
<span>Noone applied as of now. Check back later!</span>
<span>No one applied as of now. Check back later!</span>
</div>
</div>
</section>
</template>
@@ -46,16 +47,22 @@ export default defineComponent({
currentlyForHire(): Array<Adventurer> {
return Object.values(this.adventurersForHire);
},
canRecruitMore() {
return Object.keys(this.adventurersForHire).length < this.guild.adventurerCapacity.getAdventurerCapacity();
},
},
methods: {
hireAdventurer(adventurer: Adventurer): void {
if (Object.keys(this.adventurersForHire).length >= this.guild.adventurerCapacity.getAdventurerCapacity()) return;
if (!this.canRecruitMore) return;
this.$emit("hireAdventurer", adventurer);
},
dismissAdventurer(adventurer: Adventurer) {
if (Object.keys(this.adventurersForHire).length <= 0) return;
this.$emit("dismissAdventurer", adventurer);
}
},
previewAdventurer(adventurer: Adventurer): void {
this.$emit("previewAdventurer", adventurer);
},
},
props: {
guild: {
@@ -67,7 +74,7 @@ export default defineComponent({
required: true,
},
},
emits: ["dismissAdventurer", "hireAdventurer"],
emits: ["dismissAdventurer", "hireAdventurer", "previewAdventurer"],
})
</script>
@@ -88,8 +95,10 @@ export default defineComponent({
gap: 0.25rem;
font-size: 1.1rem;
cursor: pointer;
padding-block: 1rem;
padding-inline: 0.5rem;
.entry {
.hire-tile {
height: 7rem;
width: 7rem;
}
@@ -112,6 +121,8 @@ export default defineComponent({
align-items: center;
font-size: 2rem;
gap: 1rem;
line-height: 1;
width: 100%;
span {
cursor: pointer;
+1
View File
@@ -48,6 +48,7 @@ export default defineComponent({
overflow: clip;
font-size: 5rem;
line-height: 1;
aspect-ratio: 1/1;
color: rgba(0, 0, 0, 0.75);
position: relative;
background: rgb(2,0,36);
+21
View File
@@ -13,6 +13,19 @@
Upgrade ({{ formatGold(guild.adventurerCapacity.nextLevelCost) }} gold)
</button>
</div>
<div class="upgrade">
<span>Recruitment capacity (level {{ guild.recruitmentCapacity.level }})</span>
<small>Increases the maximum amount of adventurers that await recruitment</small>
<button
class="button metal"
v-if="guild.recruitmentCapacity.nextLevelCost"
:disabled="guild.gold < guild.recruitmentCapacity.nextLevelCost || guild.recruitmentCapacity.isMaxLevel()"
@click="upgradeRecruitmentCapacity()"
>
<span v-if="!guild.recruitmentCapacity.isMaxLevel()">Upgrade ({{ formatGold(guild.recruitmentCapacity.nextLevelCost) }} gold)</span>
<span v-else>Max level</span>
</button>
</div>
<div class="upgrade" v-if="guild.level >= guild.autoFinishQuestsUpgrade.guildLevelRequirement">
<span>Auto-finish quests (level {{ guild.autoFinishQuestsUpgrade.level - 1 }})</span>
<small>Automatically finish quests when they are completed.</small>
@@ -75,6 +88,14 @@ export default defineComponent({
this.guild.gold -= this.guild.adventurerCapacity.nextLevelCost;
this.guild.adventurerCapacity.upgrade();
},
upgradeRecruitmentCapacity(): void {
if (!this.guild.recruitmentCapacity) return;
if (this.guild.recruitmentCapacity.isMaxLevel()) return;
if (!this.guild.recruitmentCapacity.nextLevelCost) return;
if (this.guild.gold < this.guild.recruitmentCapacity.nextLevelCost) return;
this.guild.gold -= this.guild.recruitmentCapacity.nextLevelCost;
this.guild.recruitmentCapacity.upgrade();
},
upgradeAutoFinishQuests(): void {
if (!this.guild.autoFinishQuestsUpgrade) return;
if (this.guild.autoFinishQuestsUpgrade.isMaxLevel()) return;