add loading screen to hide loading assets and not yet loaded gamestate

This commit is contained in:
2023-06-20 19:18:50 +02:00
parent f05c393600
commit c2abfd6dfd
+91 -8
View File
@@ -1,7 +1,23 @@
<script setup lang="ts"> <script setup lang="ts">
import {RouterLink, RouterView} from 'vue-router'</script> import {RouterLink, RouterView} from 'vue-router'
import {version} from "../package.json"
</script>
<template> <template>
<div class="loading-screen" :class="{disabled: !loading}">
<section class="title panel note-paper">
<h1>Guild Master</h1>
<h3>Adventurer's guild management game</h3>
<small>v{{ version }}</small>
<div class="lds-ring">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<h3>Loading assets...</h3>
</section>
</div>
<header> <header>
<nav> <nav>
<RouterLink :to="{name: 'guild'}">Guild</RouterLink> <RouterLink :to="{name: 'guild'}">Guild</RouterLink>
@@ -45,6 +61,7 @@ import AutoFinishQuestsUpgrade from "@/classes/guildUpgrades/AutoFinishQuestsUpg
export default defineComponent({ export default defineComponent({
name: "GuildView", name: "GuildView",
data: () => ({ data: () => ({
loading: true as boolean,
guild: new Guild(1, 500), guild: new Guild(1, 500),
gameTickTask: null as null | number, gameTickTask: null as null | number,
gameSaveTask: null as null | number, gameSaveTask: null as null | number,
@@ -179,13 +196,13 @@ export default defineComponent({
const data = saveData.adventurers[id]; const data = saveData.adventurers[id];
try { try {
const adventurer = new Adventurer( const adventurer = new Adventurer(
data.id, data.id,
data.name, data.name,
data.portrait, data.portrait,
data.attackExponent ?? 1.1, data.attackExponent ?? 1.1,
data.level ?? 1, data.level ?? 1,
data.exp ?? 0, data.exp ?? 0,
data.prestige ?? 0, data.prestige ?? 0,
); );
adventurer.busy = data.busy; adventurer.busy = data.busy;
adventurers[data.id] = adventurer; adventurers[data.id] = adventurer;
@@ -248,6 +265,12 @@ export default defineComponent({
})); }));
}, 10 * 1000)); }, 10 * 1000));
// Wait a second to make sure at least most images load in behind the loader
setTimeout(() => {
this.loading = false;
}, 1000);
this.gameTickTask = Number(setInterval(() => { this.gameTickTask = Number(setInterval(() => {
this.updateMissives(); this.updateMissives();
@@ -390,4 +413,64 @@ nav {
} }
.loading-screen {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 5;
user-select: none;
background-size: 25rem;
background-color: rgba(87, 50, 20, 0.45);
background-image: url("/img/background/wood/cut_wood_background.png");
background-blend-mode: darken;
background-repeat: repeat;
display: flex;
justify-content: center;
align-items: center;
transition: opacity 0.25s linear;
&.disabled {
opacity: 0;
pointer-events: none;
}
.lds-ring {
display: inline-block;
position: relative;
width: 80px;
height: 80px;
}
.lds-ring div {
box-sizing: border-box;
display: block;
position: absolute;
width: 64px;
height: 64px;
margin: 8px;
border: 8px solid;
border-radius: 50%;
animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
border-color: #000 transparent transparent transparent;
}
.lds-ring div:nth-child(1) {
animation-delay: -0.45s;
}
.lds-ring div:nth-child(2) {
animation-delay: -0.3s;
}
.lds-ring div:nth-child(3) {
animation-delay: -0.15s;
}
@keyframes lds-ring {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
}
</style> </style>