Compare commits

..

3 Commits

Author SHA1 Message Date
YouHaveTrouble c26c425c6d update news 2024-08-23 23:01:07 +02:00
YouHaveTrouble 423444a139 configure vite plugin for pwa handling 2023-09-24 23:56:10 +02:00
YouHaveTrouble b49a30bb6e actually bearable mobile view for quests board 2023-09-23 15:29:47 +02:00
8 changed files with 163 additions and 107 deletions
+1 -1
View File
@@ -1 +1 @@
Looking for artists for assets for this game! Need backgrounds and icons! Join discord for more info! Major rewrite possibly, probably soon!
+1
View File
@@ -26,6 +26,7 @@
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"typescript": "~5.1.6", "typescript": "~5.1.6",
"vite": "4.4.9", "vite": "4.4.9",
"vite-plugin-pwa": "^0.16.5",
"vue-tsc": "^1.8.3" "vue-tsc": "^1.8.3"
} }
} }
+5 -1
View File
@@ -1,6 +1,10 @@
* {
box-sizing: border-box;
}
body { body {
margin: 0; margin: 0;
padding: 0 0 10rem; padding: 0 0 2rem;
min-height: calc(100vh - 10rem); min-height: calc(100vh - 10rem);
font-family: 'EB Garamond', serif; font-family: 'EB Garamond', serif;
overflow-y: scroll; overflow-y: scroll;
File diff suppressed because one or more lines are too long
+85
View File
@@ -0,0 +1,85 @@
<template>
<div class="missives-wrapper">
<h1 v-if="label !== undefined">{{ label }}</h1>
<section class="missives">
<QuestMissive
v-for="(missive, key) in quests"
:key="key"
:adventurers="adventurers"
:missive="missive"
@click="finalizeQuest(missive)"
/>
</section>
</div>
</template>
<script lang="ts">
import {defineComponent} from 'vue'
import QuestMissive from "@/components/QuestMissive.vue";
export default defineComponent({
name: "QuestGroup",
components: {QuestMissive},
props: {
quests: {
type: Object,
required: true,
},
adventurers: {
type: Object,
required: true,
},
finalizeQuest: {
type: Function,
required: true,
},
label: {
type: String,
default: undefined,
}
},
})
</script>
<style scoped lang="scss">
h1 {
text-align: center;
}
.missives-wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.missives {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: start;
align-items: stretch;
gap: 1rem;
padding-block: 0.5rem;
padding-inline: 40%;
overflow-x: auto;
scroll-snap-type: x mandatory;
width: max-content;
max-width: 100%;
}
@media(min-width: 800px) {
.missives-wrapper {
padding-inline: 1rem;
}
.missives {
justify-content: center;
flex-wrap: wrap;
overflow-x: inherit;
padding-inline: 0;
}
}
</style>
+4 -1
View File
@@ -114,11 +114,13 @@ export default defineComponent({
<style lang="scss" scoped> <style lang="scss" scoped>
.missive { .missive {
width: min(100%, 14rem); width: 14rem;
min-width: 14rem;
text-align: center; text-align: center;
border: 2px solid #000; border: 2px solid #000;
padding: 0.5rem; padding: 0.5rem;
position: relative; position: relative;
scroll-snap-align: center;
.parchment { .parchment {
position: absolute; position: absolute;
@@ -257,4 +259,5 @@ export default defineComponent({
} }
} }
} }
</style> </style>
+39 -86
View File
@@ -1,90 +1,57 @@
<template> <template>
<section> <section>
<div class="guild" v-if="guild.level >= 7 && Object.keys(quests.S).length > 0"> <QuestGroup
<h1>Rank S Quests</h1> v-if="guild.level >= 7 && Object.keys(quests.S).length > 0"
<section class="missives">
<QuestMissive
v-for="(missive, key, index) in quests.S"
:key="key"
:adventurers="adventurers" :adventurers="adventurers"
:missive="missive" :quests="quests.S"
@click="finalizeQuest(missive)" :finalizeQuest="finalizeQuest"
label="Rank S Quests"
/> />
</section> <QuestGroup
</div> v-if="guild.level >= 6 && Object.keys(quests.A).length > 0"
<div class="guild" v-if="guild.level >= 6 && Object.keys(quests.A).length > 0">
<h1>Rank A Quests</h1>
<section class="missives">
<QuestMissive
v-for="(missive, key, index) in quests.A"
:key="key"
:adventurers="adventurers" :adventurers="adventurers"
:missive="missive" :quests="quests.A"
@click="finalizeQuest(missive)" :finalizeQuest="finalizeQuest"
label="Rank A Quests"
/> />
</section> <QuestGroup
</div> v-if="guild.level >= 5 && Object.keys(quests.B).length > 0"
<div class="guild" v-if="guild.level >= 5 && Object.keys(quests.B).length > 0">
<h1>Rank B Quests</h1>
<section class="missives">
<QuestMissive
v-for="(missive, key, index) in quests.B"
:key="key"
:adventurers="adventurers" :adventurers="adventurers"
:missive="missive" :quests="quests.B"
@click="finalizeQuest(missive)" :finalizeQuest="finalizeQuest"
label="Rank B Quests"
/> />
</section>
</div> <QuestGroup
<div class="guild" v-if="guild.level >= 4 && Object.keys(quests.C).length > 0"> v-if="guild.level >= 4 && Object.keys(quests.C).length > 0"
<h1>Rank C Quests</h1>
<section class="missives">
<QuestMissive
v-for="(missive, key, index) in quests.C"
:key="key"
:adventurers="adventurers" :adventurers="adventurers"
:missive="missive" :quests="quests.C"
@click="finalizeQuest(missive)" :finalizeQuest="finalizeQuest"
label="Rank C Quests"
/> />
</section>
</div> <QuestGroup
<div class="guild" v-if="guild.level >= 3 && Object.keys(quests.D).length > 0"> v-if="guild.level >= 3 && Object.keys(quests.D).length > 0"
<h1>Rank D Quests</h1>
<section class="missives">
<QuestMissive
v-for="(missive, key, index) in quests.D"
:key="key"
:adventurers="adventurers" :adventurers="adventurers"
:missive="missive" :quests="quests.D"
@click="finalizeQuest((missive))" :finalizeQuest="finalizeQuest"
label="Rank D Quests"
/> />
</section> <QuestGroup
</div> v-if="guild.level >= 2 && Object.keys(quests.E).length > 0"
<div class="guild" v-if="guild.level >= 2 && Object.keys(quests.E).length > 0">
<h1>Rank E Quests</h1>
<section class="missives">
<QuestMissive
v-for="(missive, key, index) in quests.E"
:key="key"
:adventurers="adventurers" :adventurers="adventurers"
:missive="missive" :quests="quests.E"
@click="finalizeQuest(missive)" :finalizeQuest="finalizeQuest"
label="Rank E Quests"
/> />
</section> <QuestGroup
</div> v-if="Object.keys(quests.F).length > 0"
<div class="guild" v-if="Object.keys(quests.F).length > 0">
<h1>Rank F Quests</h1>
<section class="missives">
<QuestMissive
v-for="(missive, key, index) in quests.F"
:key="key"
:adventurers="adventurers" :adventurers="adventurers"
:missive="missive" :quests="quests.F"
@click="finalizeQuest(missive)" :finalizeQuest="finalizeQuest"
label="Rank F Quests"
/> />
</section> </section>
</div>
</section>
</template> </template>
<script lang="ts"> <script lang="ts">
@@ -94,10 +61,11 @@ import type {Adventurer} from "@/classes/Adventurer";
import type {Quest} from "@/classes/Quest"; import type {Quest} from "@/classes/Quest";
import {Guild} from "@/classes/Guild"; import {Guild} from "@/classes/Guild";
import QuestMissive from "@/components/QuestMissive.vue"; import QuestMissive from "@/components/QuestMissive.vue";
import QuestGroup from "@/components/QuestGroup.vue";
export default defineComponent({ export default defineComponent({
name: "QuestView", name: "QuestView",
components: {QuestMissive, AdventurerComponent}, components: {QuestGroup, QuestMissive, AdventurerComponent},
props: { props: {
guild: { guild: {
type: Object as PropType<Guild>, type: Object as PropType<Guild>,
@@ -137,21 +105,6 @@ export default defineComponent({
align-items: center; align-items: center;
width: 100%; width: 100%;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
h1 {
font-size: 3rem;
text-align: center;
} }
.missives {
display: flex;
flex-direction: row;
flex-wrap: wrap;
width: calc(100% - 2rem);
justify-content: center;
align-items: stretch;
padding-inline: 1rem;
gap: 1rem;
}
}
</style> </style>
+12 -1
View File
@@ -2,10 +2,21 @@ import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import {VitePWA} from "vite-plugin-pwa";
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
plugins: [vue()], plugins: [
vue(),
VitePWA({
registerType: 'prompt',
injectRegister: 'script',
filename: 'service-worker.js',
workbox: {
globPatterns: ['**/*.{js,css,html,ico,png,jpeg,svg,json}'],
}
})
],
resolve: { resolve: {
alias: { alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)) '@': fileURLToPath(new URL('./src', import.meta.url))