From 8d8e669bb31b404f6daf9840bf91c8a52505edc0 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Thu, 23 Mar 2023 19:17:31 +0100 Subject: [PATCH] adventurer exp bars --- src/classes/Adventurer.ts | 15 +++++++++++++-- src/components/AdventurerTile.vue | 26 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/classes/Adventurer.ts b/src/classes/Adventurer.ts index 2e2de6e..601a003 100644 --- a/src/classes/Adventurer.ts +++ b/src/classes/Adventurer.ts @@ -25,7 +25,18 @@ export class Adventurer { } canLevelUp(): boolean { - const requirement = this.level * 3; - return this.exp >= requirement; + return this.exp >= this.getNextLevelExpRequirement(); } + + getNextLevelExpRequirement(): number { + return this.level * 3; + } + + /** + * Returns the percentage of exp to the next level + */ + getExpPercentage(): number { + return (this.exp / this.getNextLevelExpRequirement()) * 100; + } + } diff --git a/src/components/AdventurerTile.vue b/src/components/AdventurerTile.vue index 6bc2820..279af5a 100644 --- a/src/components/AdventurerTile.vue +++ b/src/components/AdventurerTile.vue @@ -5,6 +5,7 @@ >
{{adventurer.level}}
+
@@ -19,6 +20,21 @@ export default defineComponent({ adventurer: { type: Object as PropType, } + }, + data: () => ({ + expProgress: "0%", + }), + watch: { + adventurer: { + deep: true, + handler: function (adventurer: Adventurer) { + this.expProgress = adventurer.getExpPercentage() + "%"; + }, + } + }, + mounted() { + if (this.adventurer === undefined) return; + this.expProgress = this.adventurer.getExpPercentage() + "%"; } }); @@ -37,11 +53,21 @@ export default defineComponent({ top: 0; left: 0; font-size: 1rem; + min-width: 1rem; background-color: rgba(0,0,0, 0.75); border-bottom-right-radius: 0.2rem; padding: 0.1rem; color: #fff; } + .exp { + position: absolute; + bottom: 0; + left: 0; + width: v-bind(expProgress); + height: 3.5%; + background-color: rgba(203, 33, 213, 0.75); + transition: width 1s linear; + } img { width: 100%; height: 100%;