Compare commits

..

23 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
YouHaveTrouble 2a38461a47 move icon svgs to components, so they can load along everything else 2023-09-16 15:58:54 +02:00
YouHaveTrouble 52c340be26 bump version 2023-09-16 15:39:23 +02:00
YouHaveTrouble f2c5304643 don't load paths dynamically to allow offline play 2023-09-16 15:26:36 +02:00
YouHaveTrouble b6aefde9da add / to the path 2023-09-16 14:29:29 +02:00
YouHaveTrouble f31a0013a9 Merge pull request #11 from xYundy/fix-quest-button-on-ios
Fix select button color for iOS Safari
2023-09-15 12:04:09 +02:00
Wojciech 'xYundy' Zięciak e4af877358 Add missing empty line at EOF 2023-09-15 12:03:48 +02:00
YouHaveTrouble d162771749 Merge pull request #10 from xYundy/public-testing
Add script which allow to test app on external devices
2023-09-15 12:03:15 +02:00
YouHaveTrouble f53644119a Merge pull request #9 from xYundy/pwa-mobile-icon
Add PWA icons and manifest
2023-09-15 12:02:21 +02:00
Wojciech 'xYundy' Zięciak 34999a27b7 add PWA icons and manifest 2023-09-15 11:59:11 +02:00
Wojciech 'xYundy' Zięciak 6e23f9a7b4 Fix select button color for iOS Safar 2023-09-15 11:55:27 +02:00
Wojciech 'xYundy' Zięciak d852f6fd96 Add script which allow to test app on ext. devices 2023-09-15 11:47:43 +02:00
YouHaveTrouble 0e0c133f6f swap meta image 2023-09-07 19:06:29 +02:00
YouHaveTrouble 8a6b581981 bump version 2023-09-07 18:39:53 +02:00
YouHaveTrouble 5497717605 have enough portraits for now 2023-09-07 18:38:11 +02:00
YouHaveTrouble 85fa53b16e add gradient background for adventurer portraits 2023-09-07 18:23:36 +02:00
YouHaveTrouble 9feab73fd2 small tool to automatically merge data and portraits into one file 2023-09-07 18:23:17 +02:00
YouHaveTrouble ed7c9e66ec add new adventurers and their assets 2023-09-07 18:22:22 +02:00
YouHaveTrouble 82350c6c42 new loading screen 2023-08-28 19:33:44 +02:00
YouHaveTrouble 0b7489b21f add new assets 2023-08-28 19:33:29 +02:00
YouHaveTrouble 21fb2c5f72 update depends 2023-08-20 17:20:29 +02:00
57 changed files with 967 additions and 556 deletions
+21
View File
@@ -0,0 +1,21 @@
/**
* This file is used to import the character portraits to base64 from raw assets
*/
const fs = require('fs');
const characterData = require('./rawAssets/data/adventurers.json');
for (const character of characterData) {
try {
const base64 = base64_encode(`./rawAssets/img/portraits/${character.id}.png`);
character.portrait = "data:image/png;base64,"+base64;
} catch (e) {
console.error(`Error: Didn't find portrait for ${character.id}`);
}
}
fs.writeFileSync('./public/data/adventurers.json', JSON.stringify(characterData, null, 2), "utf-8");
function base64_encode(file) {
return fs.readFileSync(file, "base64");
}
+3 -3
View File
@@ -8,18 +8,18 @@
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=EB+Garamond&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=EB+Garamond&display=swap" rel="stylesheet">
<link rel="manifest" href="/manifest.json" />
<meta name="description" <meta name="description"
content="Guild Master is a browser game where you manage your own adventurer's guild!"/> content="Guild Master is a browser game where you manage your own adventurer's guild!"/>
<meta property="twitter:title" content="Guild Master - Adventurer's guild management game"/> <meta property="twitter:title" content="Guild Master - Adventurer's guild management game"/>
<meta property="twitter:image" content="https://guildmaster.yht.one/img/compass_rose.png"/> <meta property="twitter:image" content="https://guildmaster.yht.one/img/app-icons/icon.png"/>
<meta property="twitter:description" <meta property="twitter:description"
content="Guild Master is a browser game where you manage your own adventurer's guild!"/> content="Guild Master is a browser game where you manage your own adventurer's guild!"/>
<meta property="og:title" content="Guild Master - Adventurer's guild management game"/> <meta property="og:title" content="Guild Master - Adventurer's guild management game"/>
<meta property="og:url" content="https://guildmaster.yht.one/"/> <meta property="og:url" content="https://guildmaster.yht.one/"/>
<meta property="og:description" <meta property="og:description"
content="Guild Master is a browser game where you manage your own adventurer's guild!"/> content="Guild Master is a browser game where you manage your own adventurer's guild!"/>
<meta property="og:image" content="https://guildmaster.yht.one/img/compass_rose.png"/> <meta property="og:image" content="https://guildmaster.yht.one/img/app-icons/icon.png"/>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
+1 -1
View File
@@ -1 +1 @@
Looking for artists for assets for this game! Need backgrounds, icons and character portraits! Join discord for more info! Major rewrite possibly, probably soon!
+394 -391
View File
File diff suppressed because it is too large Load Diff
+12 -9
View File
@@ -1,29 +1,32 @@
{ {
"name": "adventurers-guild", "name": "adventurers-guild",
"version": "0.11.0", "version": "0.13.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"dev-public": "vite --host",
"build": "run-p type-check build-only && cp -r CNAME dist/CNAME", "build": "run-p type-check build-only && cp -r CNAME dist/CNAME",
"preview": "vite preview", "preview": "vite preview",
"build-only": "vite build", "build-only": "vite build",
"type-check": "vue-tsc --noEmit" "type-check": "vue-tsc --noEmit",
"gen-character-data": "node characterDataGenerator.js"
}, },
"dependencies": { "dependencies": {
"@vueuse/components": "^9.13.0", "@vueuse/components": "^9.13.0",
"sass": "^1.63.6", "sass": "^1.66.1",
"vue": "^3.3.4", "vue": "^3.3.4",
"vue-router": "^4.2.2" "vue-router": "^4.2.4"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^18.16.19", "@types/node": "^18.17.6",
"@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue": "^4.3.1",
"@vue/tsconfig": "^0.4.0", "@vue/tsconfig": "^0.4.0",
"eslint": "^8.44.0", "eslint": "^8.47.0",
"eslint-plugin-vue": "^9.15.1", "eslint-plugin-vue": "^9.17.0",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"typescript": "~5.1.6", "typescript": "~5.1.6",
"vite": "4.3.9", "vite": "4.4.9",
"vite-plugin-pwa": "^0.16.5",
"vue-tsc": "^1.8.3" "vue-tsc": "^1.8.3"
} }
} }
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

-1
View File
@@ -1 +0,0 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Discord</title><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

-5
View File
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" fill="none"/>
<path d="M12,2A10,10,0,0,0,8.84,21.5c.5.08.66-.23.66-.5V19.31C6.73,19.91,6.14,18,6.14,18A2.69,2.69,0,0,0,5,16.5c-.91-.62.07-.6.07-.6a2.1,2.1,0,0,1,1.53,1,2.15,2.15,0,0,0,2.91.83,2.16,2.16,0,0,1,.63-1.34C8,16.17,5.62,15.31,5.62,11.5a3.87,3.87,0,0,1,1-2.71,3.58,3.58,0,0,1,.1-2.64s.84-.27,2.75,1a9.63,9.63,0,0,1,5,0c1.91-1.29,2.75-1,2.75-1a3.58,3.58,0,0,1,.1,2.64,3.87,3.87,0,0,1,1,2.71c0,3.82-2.34,4.66-4.57,4.91a2.39,2.39,0,0,1,.69,1.85V21c0,.27.16.59.67.5A10,10,0,0,0,12,2Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

+59
View File
@@ -0,0 +1,59 @@
{
"name": "Guild Master - Adventurer's guild management game",
"short_name": "Guild Master",
"theme_color": "#3C2114",
"background_color": "#d9c8b3",
"display": "standalone",
"scope": "./",
"start_url": "./",
"icons": [
{
"src": "img/app-icons/icon-72x72.png",
"sizes": "72x72",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "img/app-icons/icon-96x96.png",
"sizes": "96x96",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "img/app-icons/icon-128x128.png",
"sizes": "128x128",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "img/app-icons/icon-144x144.png",
"sizes": "144x144",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "img/app-icons/icon-152x152.png",
"sizes": "152x152",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "img/app-icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "img/app-icons/icon-384x384.png",
"sizes": "384x384",
"type": "image/png",
"purpose": "maskable any"
},
{
"src": "img/app-icons/icon.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable any"
}
]
}
+102
View File
@@ -0,0 +1,102 @@
[
{
"id": "aldek",
"name": "Aldek",
"attackExponent": 1.1
},
{
"id": "aria",
"name": "Aria",
"attackExponent": 1.1
},
{
"id": "burnett",
"name": "Burnett",
"attackExponent": 1.1
},
{
"id": "charlotte",
"name": "Charlotte",
"attackExponent": 1.1
},
{
"id": "ella",
"name": "Ella",
"attackExponent": 1.1
},
{
"id": "elyza",
"name": "Elyza",
"attackExponent": 1.1
},
{
"id": "emille",
"name": "Emille",
"attackExponent": 1.1
},
{
"id": "garret",
"name": "Garret",
"attackExponent": 1.1
},
{
"id": "gryza",
"name": "Gryza",
"attackExponent": 1.1
},
{
"id": "lestat",
"name": "Lestat",
"attackExponent": 1.1
},
{
"id": "lydia",
"name": "Lydia",
"attackExponent": 1.1
},
{
"id": "noor",
"name": "Noor",
"attackExponent": 1.1
},
{
"id": "noron",
"name": "Noron",
"attackExponent": 1.1
},
{
"id": "oola",
"name": "Oola",
"attackExponent": 1.1
},
{
"id": "owen",
"name": "Owen",
"attackExponent": 1.1
},
{
"id": "ryslette",
"name": "Ryslette",
"attackExponent": 1.1
},
{
"id": "sally",
"name": "Sally",
"attackExponent": 1.1
},
{
"id": "tovu",
"name": "Tovu",
"attackExponent": 1.1
},
{
"id": "wrydio",
"name": "Wrydio",
"attackExponent": 1.1
},
{
"id": "xarya",
"name": "Xarya",
"attackExponent": 1.1
}
]
Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

+11 -7
View File
File diff suppressed because one or more lines are too long
+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
@@ -131,5 +131,6 @@ export default defineComponent({
width: 100%; width: 100%;
height: 100%; height: 100%;
font-size: 4.5rem; font-size: 4.5rem;
color: #000;
} }
</style> </style>
+2
View File
@@ -50,6 +50,8 @@ export default defineComponent({
line-height: 1; line-height: 1;
color: rgba(0, 0, 0, 0.75); color: rgba(0, 0, 0, 0.75);
position: relative; position: relative;
background: rgb(2,0,36);
background: radial-gradient(circle, rgba(2,0,36,1) 0%, rgb(69, 69, 84) 57%, rgb(85, 112, 117) 100%);
.level { .level {
position: absolute; position: absolute;
+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>
+35
View File
@@ -0,0 +1,35 @@
<script lang="ts">
import {defineComponent} from 'vue'
export default defineComponent({
name: "DiscordLogo",
props: {
width: {
type: String,
default: "2rem",
},
height: {
type: String,
default: "2rem",
},
},
})
</script>
<template>
<svg
:width="width"
:height="height"
role="img"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
>
<title>Discord</title>
<path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/>
</svg>
</template>
<style scoped lang="scss">
svg {
}
</style>
+33
View File
@@ -0,0 +1,33 @@
<script lang="ts">
import {defineComponent} from 'vue'
export default defineComponent({
name: "GithubLogo",
props: {
width: {
type: String,
default: "2rem",
},
height: {
type: String,
default: "2rem",
},
},
})
</script>
<template>
<svg
:width="width"
:height="height"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
>
<rect width="24" height="24" fill="none"/>
<path d="M12,2A10,10,0,0,0,8.84,21.5c.5.08.66-.23.66-.5V19.31C6.73,19.91,6.14,18,6.14,18A2.69,2.69,0,0,0,5,16.5c-.91-.62.07-.6.07-.6a2.1,2.1,0,0,1,1.53,1,2.15,2.15,0,0,0,2.91.83,2.16,2.16,0,0,1,.63-1.34C8,16.17,5.62,15.31,5.62,11.5a3.87,3.87,0,0,1,1-2.71,3.58,3.58,0,0,1,.1-2.64s.84-.27,2.75,1a9.63,9.63,0,0,1,5,0c1.91-1.29,2.75-1,2.75-1a3.58,3.58,0,0,1,.1,2.64,3.87,3.87,0,0,1,1,2.71c0,3.82-2.34,4.66-4.57,4.91a2.39,2.39,0,0,1,.69,1.85V21c0,.27.16.59.67.5A10,10,0,0,0,12,2Z"/>
</svg>
</template>
<style scoped lang="scss">
</style>
+10 -5
View File
@@ -1,28 +1,33 @@
import {createRouter, createWebHashHistory} from 'vue-router' import {createRouter, createWebHashHistory} from 'vue-router'
import HomeView from '@/views/HomeView.vue';
import QuestView from "@/views/QuestView.vue";
import AdventurerView from "@/views/AdventurerView.vue";
import TechnicalView from "@/views/TechnicalView.vue";
const router = createRouter({ const router = createRouter({
history: createWebHashHistory(import.meta.env.BASE_URL), history: createWebHashHistory(import.meta.env.BASE_URL),
routes: [ routes: [
{ {
path: '/', path: '/',
name: 'guild', name: 'guild',
component: () => import('@/views/HomeView.vue') component: HomeView,
}, },
{ {
path: '/quests', path: '/quests',
name: 'quests', name: 'quests',
component: () => import('@/views/QuestView.vue') component: QuestView,
}, },
{ {
path: '/adventurers', path: '/adventurers',
name: 'adventurers', name: 'adventurers',
component: () => import('@/views/AdventurerView.vue') component: AdventurerView,
}, },
{ {
path: '/technical', path: '/technical',
name: 'technical', name: 'technical',
component: () => import('@/views/TechnicalView.vue') component: TechnicalView,
} },
] ]
}) })
+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>
+11 -3
View File
@@ -10,11 +10,11 @@
<h1>Socials</h1> <h1>Socials</h1>
<div class="links"> <div class="links">
<a class="link" href="https://discord.gg/j8KK5dGBps"> <a class="link" href="https://discord.gg/j8KK5dGBps">
<img class="icon" src="/img/icons/discord.svg" alt="Discord"/> <DiscordLogo/>
Discord Discord
</a> </a>
<a class="link" href="https://github.com/YouHaveTrouble/GuildMaster"> <a class="link" href="https://github.com/YouHaveTrouble/GuildMaster">
<img class="icon" src="/img/icons/github.svg" alt="GitHub"/> <GithubLogo/>
GitHub GitHub
</a> </a>
</div> </div>
@@ -30,10 +30,18 @@ import {defineComponent} from "vue";
import ChangelogComponent from "@/components/technical/ChangelogComponent.vue"; import ChangelogComponent from "@/components/technical/ChangelogComponent.vue";
import SaveManagerComponent from "@/components/technical/SaveManagerComponent.vue"; import SaveManagerComponent from "@/components/technical/SaveManagerComponent.vue";
import Nail from "@/components/misc/Nail.vue"; import Nail from "@/components/misc/Nail.vue";
import DiscordLogo from "@/components/misc/DiscordLogo.vue";
import GithubLogo from "@/components/misc/GithubLogo.vue";
export default defineComponent({ export default defineComponent({
name: "TechnicalView", name: "TechnicalView",
components: {Nail, SaveManagerComponent, ChangelogComponent}, components: {
DiscordLogo,
GithubLogo,
Nail,
SaveManagerComponent,
ChangelogComponent,
},
}); });
</script> </script>
+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))