@@ -43,34 +44,36 @@
import type {PropType} from "vue";
import {defineComponent} from "vue";
import AdventurerTile from "@/components/AdventurerTile.vue";
-import {Adventurer} from "@/classes/Adventurer";
+import type {Adventurer} from "@/classes/Adventurer";
+import { loadAdventurersForHire } from "@/GameData";
+import type {Guild} from "@/classes/Guild";
export default defineComponent({
name: "RecruitView",
components: {AdventurerTile},
- data() {
+ data: () => {
return {
currentlyForHire: null as Adventurer|null,
- adventurersForHire: [
- new Adventurer("rincewind-diskworld", "Rincewind", "/img/adventurers/rincewind.png", 2, 2),
- new Adventurer("fran-sword-isekai", "Fran", "/img/adventurers/fran.png", 3, 1.5),
- new Adventurer("kazuma-konosuba", "Kazuma", "/img/adventurers/kazuma.png", 2, 2),
- new Adventurer("rein-beast-tamer", "Rein", "/img/adventurers/rein.png", 2, 2),
- new Adventurer("momon-overlord", "Momon", "/img/adventurers/momon.png", 2, 2),
- ] as Array
,
+ adventurersForHire: [] as Array,
}
},
props: {
+ guild: {
+ type: Object as PropType,
+ default() {
+ return {} as Guild
+ },
+ },
adventurers: {
type: Object as PropType<{ [key: string]: Adventurer }>,
default() {
- return {};
+ return {} as { [key: string]: Adventurer };
},
},
lastRecruitTime: {
- type: Number as PropType,
+ type: Number as PropType,
default() {
- return null;
+ return 0;
}
},
},
@@ -96,19 +99,24 @@ export default defineComponent({
window.localStorage.setItem("currentlyForHire", adventurer.id);
},
- hireAdventurer(adventurer: Adventurer): void {
+ 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");
this.$emit("recruitActionTaken", adventurer);
},
dismissAdventurer() {
+ if (Object.keys(this.adventurers).length <= 0) return;
this.currentlyForHire = null;
this.$emit("recruitActionTaken", null);
window.localStorage.removeItem("currentlyForHire");
}
},
- mounted() {
+ async mounted() {
+
+ this.adventurersForHire = await loadAdventurersForHire(Object.keys(this.adventurers));
+
if (Object.keys(this.adventurers).length <= 0) {
this.currentlyForHire = this.adventurersForHire[0];
window.localStorage.setItem("currentlyForHire", this.adventurersForHire[0].id);
@@ -197,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;
}
}
}
@@ -207,4 +216,4 @@ export default defineComponent({
}
}
-
\ No newline at end of file
+
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
index cd2d6ba..18127d2 100644
--- a/src/views/HomeView.vue
+++ b/src/views/HomeView.vue
@@ -10,11 +10,14 @@
Guild level: {{ guild.level }}
-
+
@@ -24,13 +27,15 @@
@@ -326,6 +145,7 @@ export default defineComponent({
h1 {
font-size: 3rem;
+ text-align: center;
}
.missives {
@@ -334,51 +154,9 @@ export default defineComponent({
flex-wrap: wrap;
width: calc(100% - 2rem);
justify-content: center;
- align-items: center;
+ align-items: stretch;
padding-inline: 1rem;
gap: 1rem;
-
- .missive {
- width: min(100%, 14rem);
- text-align: center;
- border: 2px solid #000;
- padding: 0.5rem;
- position: relative;
- background-color: rgba(255, 255, 255, 0.2);
-
- &.done {
- cursor: pointer;
-
- &::after {
- position: absolute;
- top: 0;
- right: 0;
- content: "✔";
- font-size: 5rem;
- color: green;
- transform: translate(45%, -40%);
- }
- }
-
- .slots {
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- justify-content: center;
- align-items: center;
-
- .slot {
- padding: 0;
- width: 5rem;
- height: 5rem;
- border: 2px solid #000;
- background-color: rgba(0, 0, 0, 0.2);
- cursor: pointer;
- border-radius: 0.2rem;
- position: relative;
- }
- }
- }
}
}