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 611d5d986d..1a911f63b7 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 3445e58356..e42f9babe1 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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

vo+`UdwOlwNJMdKXW?QadK5=&7RPI2CLcy{1kVa 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 S&1?n+1_n=8KbLh*2~7Ya!3NI& 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 0000000000..6ae202cb63 --- /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 0000000000..6a09669a68 --- /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 83ec08543f..3d070177bd 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 0000000000..082a303e6f --- /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 63c753de22..bfa4a3ceab 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 0000000000..77206cc8e2 --- /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 dfdf324bcf..c3b22cd9e1 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 0000000000..77d1777e97 --- /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 3966649da4..eba4abd2f7 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', ];