From 27c2ca50488680595c114dfae6f8de2ec3c48b32 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 8 Jan 2023 17:41:09 +0900 Subject: [PATCH] =?UTF-8?q?feat(client):=20=F0=9F=8D=AA=F0=9F=91=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + locales/ja-JP.yml | 1 + packages/frontend/assets/cookie.png | Bin 0 -> 38365 bytes .../frontend/src/components/MkClickerGame.vue | 70 ++++++++++++++++++ .../src/components/MkPlusOneEffect.vue | 69 +++++++++++++++++ .../frontend/src/directives/click-anime.ts | 3 + packages/frontend/src/pages/clicker.vue | 24 ++++++ packages/frontend/src/router.ts | 4 + packages/frontend/src/scripts/clicker-game.ts | 46 ++++++++++++ packages/frontend/src/ui/_common_/common.ts | 5 ++ packages/frontend/src/widgets/clicker.vue | 44 +++++++++++ packages/frontend/src/widgets/index.ts | 2 + 12 files changed, 269 insertions(+) create mode 100644 packages/frontend/assets/cookie.png create mode 100644 packages/frontend/src/components/MkClickerGame.vue create mode 100644 packages/frontend/src/components/MkPlusOneEffect.vue create mode 100644 packages/frontend/src/pages/clicker.vue create mode 100644 packages/frontend/src/scripts/clicker-game.ts create mode 100644 packages/frontend/src/widgets/clicker.vue diff --git a/CHANGELOG.md b/CHANGELOG.md index 611d5d986..1a911f63b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -88,6 +88,7 @@ You should also include the user name that made the change. - Client: show bot warning on screen when logged in as bot account @syuilo - Client: improve overall performance of client @syuilo - Client: ui tweaks @syuilo +- Client: clicker game @syuilo ### Bugfixes - Server: 引用内の文章がnyaizeされてしまう問題を修正 @kabo2468 diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 3445e5835..e42f9babe 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1361,6 +1361,7 @@ _widgets: userList: "ユーザーリスト" _userList: chooseList: "リストを選択" + clicker: "クリッカー" _cw: hide: "隠す" diff --git a/packages/frontend/assets/cookie.png b/packages/frontend/assets/cookie.png new file mode 100644 index 0000000000000000000000000000000000000000..4a7f04061333e8f22c5a732f1dea9d692c0f59f8 GIT binary patch literal 38365 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 literal 0 HcmV?d00001 diff --git a/packages/frontend/src/components/MkClickerGame.vue b/packages/frontend/src/components/MkClickerGame.vue new file mode 100644 index 000000000..6ae202cb6 --- /dev/null +++ b/packages/frontend/src/components/MkClickerGame.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/packages/frontend/src/components/MkPlusOneEffect.vue b/packages/frontend/src/components/MkPlusOneEffect.vue new file mode 100644 index 000000000..6a09669a6 --- /dev/null +++ b/packages/frontend/src/components/MkPlusOneEffect.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/packages/frontend/src/directives/click-anime.ts b/packages/frontend/src/directives/click-anime.ts index 83ec08543..3d070177b 100644 --- a/packages/frontend/src/directives/click-anime.ts +++ b/packages/frontend/src/directives/click-anime.ts @@ -12,6 +12,9 @@ export default { target.classList.add('_anime_bounce_standBy'); el.addEventListener('mousedown', () => { + target.classList.remove('_anime_bounce_ready'); + target.classList.remove('_anime_bounce'); + target.classList.add('_anime_bounce_standBy'); target.classList.add('_anime_bounce_ready'); diff --git a/packages/frontend/src/pages/clicker.vue b/packages/frontend/src/pages/clicker.vue new file mode 100644 index 000000000..082a303e6 --- /dev/null +++ b/packages/frontend/src/pages/clicker.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/packages/frontend/src/router.ts b/packages/frontend/src/router.ts index 63c753de2..bfa4a3cea 100644 --- a/packages/frontend/src/router.ts +++ b/packages/frontend/src/router.ts @@ -460,6 +460,10 @@ export const routes = [{ path: '/timeline/antenna/:antennaId', component: page(() => import('./pages/antenna-timeline.vue')), loginRequired: true, +}, { + path: '/clicker', + component: page(() => import('./pages/clicker.vue')), + loginRequired: true, }, { name: 'index', path: '/', diff --git a/packages/frontend/src/scripts/clicker-game.ts b/packages/frontend/src/scripts/clicker-game.ts new file mode 100644 index 000000000..77206cc8e --- /dev/null +++ b/packages/frontend/src/scripts/clicker-game.ts @@ -0,0 +1,46 @@ +import { ref, computed } from 'vue'; +import * as os from '@/os'; + +type SaveData = { + gameVersion: number; + cookies: number; + clicked: number; +}; + +export const saveData = ref(); +export const ready = computed(() => saveData.value != null); + +let prev = ''; + +export async function load() { + try { + saveData.value = await os.api('i/registry/get', { + scope: ['clickerGame'], + key: 'saveData', + }); + } catch (err) { + if (err.code === 'NO_SUCH_KEY') { + saveData.value = { + gameVersion: 1, + cookies: 0, + clicked: 0, + }; + save(); + return; + } + throw err; + } +} + +export async function save() { + const current = JSON.stringify(saveData.value); + if (current === prev) return; + + await os.api('i/registry/set', { + scope: ['clickerGame'], + key: 'saveData', + value: saveData.value, + }); + + prev = current; +} diff --git a/packages/frontend/src/ui/_common_/common.ts b/packages/frontend/src/ui/_common_/common.ts index dfdf324bc..c3b22cd9e 100644 --- a/packages/frontend/src/ui/_common_/common.ts +++ b/packages/frontend/src/ui/_common_/common.ts @@ -41,6 +41,11 @@ export function openInstanceMenu(ev: MouseEvent) { to: '/api-console', text: 'API Console', icon: 'ti ti-terminal-2', + }, { + type: 'link', + to: '/clicker', + text: '🍪👈', + icon: 'ti ti-cookie', }], }, null, { type: 'parent', diff --git a/packages/frontend/src/widgets/clicker.vue b/packages/frontend/src/widgets/clicker.vue new file mode 100644 index 000000000..77d1777e9 --- /dev/null +++ b/packages/frontend/src/widgets/clicker.vue @@ -0,0 +1,44 @@ + + + diff --git a/packages/frontend/src/widgets/index.ts b/packages/frontend/src/widgets/index.ts index 3966649da..eba4abd2f 100644 --- a/packages/frontend/src/widgets/index.ts +++ b/packages/frontend/src/widgets/index.ts @@ -25,6 +25,7 @@ export default function(app: App) { app.component('MkwAiscriptApp', defineAsyncComponent(() => import('./aiscript-app.vue'))); app.component('MkwAichan', defineAsyncComponent(() => import('./aichan.vue'))); app.component('MkwUserList', defineAsyncComponent(() => import('./user-list.vue'))); + app.component('MkwClicker', defineAsyncComponent(() => import('./clicker.vue'))); } export const widgets = [ @@ -52,4 +53,5 @@ export const widgets = [ 'aiscriptApp', 'aichan', 'userList', + 'clicker', ];