mirror of
https://github.com/MadeBaruna/paimon-moe.git
synced 2024-12-22 22:46:41 +01:00
Add wish counter
This commit is contained in:
parent
3bf67bebce
commit
54d80a553e
6 changed files with 144 additions and 4 deletions
8
src/components/Button.svelte
Normal file
8
src/components/Button.svelte
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<script>
|
||||||
|
export let className;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<button
|
||||||
|
class={`text-white border-2 border-white border-opacity-25 rounded-xl px-4 py-2 transition duration-100
|
||||||
|
hover:border-primary focus:outline-none focus:border-primary ${className}`}
|
||||||
|
on:click><slot /></button>
|
|
@ -52,8 +52,8 @@
|
||||||
href="/characters" />
|
href="/characters" />
|
||||||
<SidebarItem
|
<SidebarItem
|
||||||
on:clicked={close}
|
on:clicked={close}
|
||||||
active={segment === 'artifacts'}
|
active={segment === 'wish'}
|
||||||
image="/images/artifacts.png"
|
image="/images/wish.png"
|
||||||
label="Artifact"
|
label="Wish Counter"
|
||||||
href="/artifacts" />
|
href="/wish" />
|
||||||
</div>
|
</div>
|
||||||
|
|
116
src/routes/wish/_counter.svelte
Normal file
116
src/routes/wish/_counter.svelte
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
<script>
|
||||||
|
import { mdiStar } from '@mdi/js';
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
|
import Button from '../../components/Button.svelte';
|
||||||
|
import Icon from '../../components/Icon.svelte';
|
||||||
|
|
||||||
|
export let name = '';
|
||||||
|
let total = 0;
|
||||||
|
let legendary = 0;
|
||||||
|
let rare = 0;
|
||||||
|
|
||||||
|
$: id = `wish-counter-${name.toLowerCase().replace(/ /g, '-')}`;
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
readLocalData();
|
||||||
|
});
|
||||||
|
|
||||||
|
function readLocalData() {
|
||||||
|
const data = localStorage.getItem(id);
|
||||||
|
if (data !== null) {
|
||||||
|
const counterData = JSON.parse(data);
|
||||||
|
total = counterData.total;
|
||||||
|
legendary = counterData.legendary;
|
||||||
|
rare = counterData.rare;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveData() {
|
||||||
|
const data = JSON.stringify({
|
||||||
|
total,
|
||||||
|
legendary,
|
||||||
|
rare,
|
||||||
|
});
|
||||||
|
localStorage.setItem(id, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function add(val) {
|
||||||
|
if (total + val < 0) return;
|
||||||
|
|
||||||
|
total += val;
|
||||||
|
|
||||||
|
rare += val;
|
||||||
|
if (rare >= 10) {
|
||||||
|
rare = 0;
|
||||||
|
} else if (rare < 0) {
|
||||||
|
rare = 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
legendary += val;
|
||||||
|
if (legendary >= 90) {
|
||||||
|
legendary = 0;
|
||||||
|
rare = 0;
|
||||||
|
} else if (legendary < 0) {
|
||||||
|
legendary = 89;
|
||||||
|
}
|
||||||
|
|
||||||
|
saveData();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLegendary() {
|
||||||
|
total += 1;
|
||||||
|
legendary = 0;
|
||||||
|
rare = 0;
|
||||||
|
saveData();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRare() {
|
||||||
|
total += 1;
|
||||||
|
rare = 0;
|
||||||
|
saveData();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="bg-item rounded-xl p-4 inline-flex flex-col w-full">
|
||||||
|
<h2 class="font-display font-bold text-2xl text-white mb-2">{name}</h2>
|
||||||
|
<div class="flex flex-col w-full">
|
||||||
|
<div class="bg-background rounded-xl p-4 flex flex-row items-center justify-center mb-2">
|
||||||
|
<span class="text-gray-200 whitespace-no-wrap flex-1">Lifetime Pulls</span>
|
||||||
|
<span class="font-black text-3xl text-white ml-4">{total}</span>
|
||||||
|
</div>
|
||||||
|
<div class="bg-background rounded-xl p-4 flex flex-row items-center justify-center mb-2">
|
||||||
|
<span class="text-gray-200 whitespace-no-wrap flex-1">
|
||||||
|
5
|
||||||
|
<Icon path={mdiStar} size={0.75} className="mb-1" />
|
||||||
|
Pity
|
||||||
|
<br /><span class="text-gray-600">Guaranteed at 90</span>
|
||||||
|
</span>
|
||||||
|
<span class="font-black text-3xl text-legendary-from ml-4">{legendary}</span>
|
||||||
|
</div>
|
||||||
|
<div class="bg-background rounded-xl p-4 flex flex-row items-center justify-center">
|
||||||
|
<span class="text-gray-200 whitespace-no-wrap flex-1">
|
||||||
|
4
|
||||||
|
<Icon path={mdiStar} size={0.75} className="mb-1" />
|
||||||
|
Pity
|
||||||
|
<br /><span class="text-gray-600">Guaranteed at 10</span>
|
||||||
|
</span>
|
||||||
|
<span class="font-black text-3xl text-rare-from ml-4">{rare}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex gap-2 mt-2">
|
||||||
|
<Button on:click={getLegendary} className="flex-1">
|
||||||
|
Get 5
|
||||||
|
<Icon path={mdiStar} size={0.75} className="mb-1" />
|
||||||
|
</Button>
|
||||||
|
<Button on:click={getRare} className="flex-1">
|
||||||
|
Get 4
|
||||||
|
<Icon path={mdiStar} size={0.75} className="mb-1" />
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<div class="flex gap-2 mt-2">
|
||||||
|
<Button on:click={() => add(1)} className="flex-1">+1</Button>
|
||||||
|
<Button on:click={() => add(10)} className="flex-1">+10</Button>
|
||||||
|
<Button on:click={() => add(-1)} className="flex-1">-1</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
15
src/routes/wish/index.svelte
Normal file
15
src/routes/wish/index.svelte
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<script>
|
||||||
|
import Counter from './_counter.svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svelte:head>
|
||||||
|
<title>Wish Counter - Paimon.moe</title>
|
||||||
|
</svelte:head>
|
||||||
|
<div class="pt-20 lg:ml-64 lg:pt-8 p-8">
|
||||||
|
<h1 class="font-display font-black text-5xl text-white mb-2">Wish Counter</h1>
|
||||||
|
<div class="grid gap-4 grid-cols-1 md:grid-cols-2 xl:grid-cols-3 max-w-screen-xl">
|
||||||
|
<Counter name="Promotional Character" />
|
||||||
|
<Counter name="Promotional Weapon" />
|
||||||
|
<Counter name="Standard" />
|
||||||
|
</div>
|
||||||
|
</div>
|
BIN
static/images/wish.png
Normal file
BIN
static/images/wish.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
|
@ -20,6 +20,7 @@ module.exports = {
|
||||||
'background-secondary': '#25294A',
|
'background-secondary': '#25294A',
|
||||||
item: '#2D325A',
|
item: '#2D325A',
|
||||||
primary: '#4E7CFF',
|
primary: '#4E7CFF',
|
||||||
|
button: '#394076',
|
||||||
rare: {
|
rare: {
|
||||||
from: '#AD76B0',
|
from: '#AD76B0',
|
||||||
to: '#665680',
|
to: '#665680',
|
||||||
|
|
Loading…
Reference in a new issue