diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-08 17:41:09 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-08 17:41:09 +0900 |
| commit | 27c2ca50488680595c114dfae6f8de2ec3c48b32 (patch) | |
| tree | 913bad82798e39c40e14d1bbc7fa20683bdf3622 /packages/frontend/src/components/MkClickerGame.vue | |
| parent | :art: (diff) | |
| download | sharkey-27c2ca50488680595c114dfae6f8de2ec3c48b32.tar.gz sharkey-27c2ca50488680595c114dfae6f8de2ec3c48b32.tar.bz2 sharkey-27c2ca50488680595c114dfae6f8de2ec3c48b32.zip | |
feat(client): 🍪👈
Diffstat (limited to 'packages/frontend/src/components/MkClickerGame.vue')
| -rw-r--r-- | packages/frontend/src/components/MkClickerGame.vue | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/packages/frontend/src/components/MkClickerGame.vue b/packages/frontend/src/components/MkClickerGame.vue new file mode 100644 index 0000000000..6ae202cb63 --- /dev/null +++ b/packages/frontend/src/components/MkClickerGame.vue @@ -0,0 +1,70 @@ +<template> +<div> + <div v-if="game.ready" :class="$style.game"> + <div :class="$style.count" class=""><i class="ti ti-cookie" style="font-size: 70%;"></i> {{ number(cookies) }}</div> + <button v-click-anime class="_button" :class="$style.button" @click="onClick"> + <img src="/client-assets/cookie.png" :class="$style.img"> + </button> + </div> + <div v-else> + <MkLoading/> + </div> +</div> +</template> + +<script lang="ts" setup> +import { computed, defineAsyncComponent, onMounted, onUnmounted } from 'vue'; +import MkPlusOneEffect from '@/components/MkPlusOneEffect.vue'; +import * as os from '@/os'; +import { useInterval } from '@/scripts/use-interval'; +import * as game from '@/scripts/clicker-game'; +import number from '@/filters/number'; + +defineProps<{ +}>(); + +const saveData = game.saveData; +const cookies = computed(() => saveData.value?.cookies); + +function onClick(ev: MouseEvent) { + saveData.value!.cookies++; + saveData.value!.clicked++; + + const x = ev.clientX; + const y = ev.clientY; + os.popup(MkPlusOneEffect, { x, y }, {}, 'end'); +} + +useInterval(game.save, 1000 * 5, { + immediate: false, + afterMounted: true, +}); + +onMounted(async () => { + await game.load(); +}); + +onUnmounted(() => { + game.save(); +}); +</script> + +<style lang="scss" module> +.game { + padding: 16px; + text-align: center; +} + +.count { + font-size: 1.3em; + margin-bottom: 6px; +} + +.button { + +} + +.img { + max-width: 90px; +} +</style> |