add a button that instantly finds new recruit

This commit is contained in:
2025-06-02 20:55:03 +02:00
parent 49baa613bd
commit 6cc8304018
3 changed files with 34 additions and 3 deletions
+6
View File
@@ -54,6 +54,12 @@ import {version} from "@/../package.json";
@finalizeQuest="finalizeQuest($event)" @finalizeQuest="finalizeQuest($event)"
@hireAdventurer="recruitAdventurer($event)" @hireAdventurer="recruitAdventurer($event)"
@dismissAdventurer="dismissRecruit($event)" @dismissAdventurer="dismissRecruit($event)"
@findNewRecruit="() => {
const newAdventurerForHire = getNewAdventurerForHire(Object.values(adventurersDatabase), Object.values(adventurers));
if (newAdventurerForHire === null) return;
adventurersForHire[newAdventurerForHire.id] = newAdventurerForHire;
setNextRecruitArrival(new Date().getTime())
}"
/> />
</template> </template>
+26 -1
View File
@@ -30,6 +30,13 @@
<span>No one applied as of now. Check back later!</span> <span>No one applied as of now. Check back later!</span>
</div> </div>
</div> </div>
<div>
<button
class="button metal"
:disabled="recruitSlotsFilled || guild.gold < newRecruitCost"
@click="findNewRecruit()"
>Find a recruit now {{(`${formatGold(newRecruitCost)} gold`)}}</button>
</div>
</section> </section>
</template> </template>
@@ -39,6 +46,7 @@ import {defineComponent, type PropType} from "vue";
import AdventurerTile from "@/components/AdventurerTile.vue"; import AdventurerTile from "@/components/AdventurerTile.vue";
import type {Guild} from "@/classes/Guild"; import type {Guild} from "@/classes/Guild";
import type {Adventurer} from "@/classes/Adventurer"; import type {Adventurer} from "@/classes/Adventurer";
import {formatGold} from "@/classes/NumberMagic";
export default defineComponent({ export default defineComponent({
name: "RecruitView", name: "RecruitView",
@@ -50,8 +58,16 @@ export default defineComponent({
canRecruitMore() { canRecruitMore() {
return Object.keys(this.adventurersForHire).length < this.guild.adventurerCapacity.getAdventurerCapacity(); return Object.keys(this.adventurersForHire).length < this.guild.adventurerCapacity.getAdventurerCapacity();
}, },
newRecruitCost(): number {
const guildLevel = this.guild.level;
return Math.max(500, 500 * Math.pow(2, guildLevel - 1));
},
recruitSlotsFilled(): boolean {
return Object.keys(this.adventurersForHire).length >= this.guild.recruitmentCapacity.getRecruitmentCapacity();
}
}, },
methods: { methods: {
formatGold,
hireAdventurer(adventurer: Adventurer): void { hireAdventurer(adventurer: Adventurer): void {
if (!this.canRecruitMore) return; if (!this.canRecruitMore) return;
this.$emit("hireAdventurer", adventurer); this.$emit("hireAdventurer", adventurer);
@@ -63,6 +79,10 @@ export default defineComponent({
previewAdventurer(adventurer: Adventurer): void { previewAdventurer(adventurer: Adventurer): void {
this.$emit("previewAdventurer", adventurer); this.$emit("previewAdventurer", adventurer);
}, },
findNewRecruit(): void {
if (!this.canRecruitMore) return;
this.$emit("findNewRecruit");
},
}, },
props: { props: {
guild: { guild: {
@@ -74,11 +94,16 @@ export default defineComponent({
required: true, required: true,
}, },
}, },
emits: ["dismissAdventurer", "hireAdventurer", "previewAdventurer"], emits: ["dismissAdventurer", "hireAdventurer", "previewAdventurer", "findNewRecruit"],
}) })
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
section {
min-height: 20rem;
}
.adventurers { .adventurers {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
+2 -2
View File
@@ -5,7 +5,6 @@
v-if="selectedAdventurer !== null" v-if="selectedAdventurer !== null"
@closeButtonClicked="selectedAdventurer = null" @closeButtonClicked="selectedAdventurer = null"
:show-prestige-button="adventurers[selectedAdventurer?.id] !== undefined" :show-prestige-button="adventurers[selectedAdventurer?.id] !== undefined"
/> />
<AdventurerRecruitment <AdventurerRecruitment
:guild="guild" :guild="guild"
@@ -13,6 +12,7 @@
@hireAdventurer="$emit('hireAdventurer', $event)" @hireAdventurer="$emit('hireAdventurer', $event)"
@dismissAdventurer="$emit('dismissAdventurer', $event)" @dismissAdventurer="$emit('dismissAdventurer', $event)"
@previewAdventurer="selectedAdventurer = $event" @previewAdventurer="selectedAdventurer = $event"
@findNewRecruit="$emit('findNewRecruit')"
/> />
<section class="collection panel pinned-paper"> <section class="collection panel pinned-paper">
<h1> <h1>
@@ -68,7 +68,7 @@ export default defineComponent({
} }
}, },
}, },
emits: ["hireAdventurer", "dismissAdventurer"], emits: ["hireAdventurer", "dismissAdventurer", "findNewRecruit"],
}); });
</script> </script>