From 172c78541c56fb3781b2f5944cabb6a2df41e38b Mon Sep 17 00:00:00 2001 From: Pihkaal Date: Wed, 11 Feb 2026 23:33:26 +0100 Subject: [PATCH] feat(nds): add pressed state for all buttons --- app/components/Achievements/BottomScreen.vue | 23 ++- app/components/Common/Buttons.vue | 59 ++++--- .../Contact/BottomScreen/BottomScreen.vue | 108 ------------ .../Contact/BottomScreen/Buttons.vue | 155 +++++++++++++++++- app/components/Home/BottomScreen/Buttons.vue | 39 ++--- .../BottomScreen/Menus/Clock/Menu.vue | 51 +++--- .../Settings/BottomScreen/Menus/Menus.vue | 146 ++++++++--------- .../BottomScreen/Menus/Options/2048.vue | 10 +- .../BottomScreen/Menus/Options/Menu.vue | 53 +++--- .../BottomScreen/Menus/TouchScreen/Menu.vue | 37 +---- .../BottomScreen/Menus/TouchScreen/TapTap.vue | 3 + .../Settings/BottomScreen/Menus/User/Menu.vue | 56 +++---- .../BottomScreen/Menus/User/Snake.vue | 3 +- app/composables/useButtonNavigation.ts | 10 +- app/utils/canvas.ts | 15 +- app/utils/input.ts | 10 ++ i18n/locales/en.json | 4 +- .../nds/images/achievements/quit-pressed.webp | Bin 0 -> 236 bytes .../images/common/button-body-pressed.webp | Bin 0 -> 86 bytes public/nds/images/common/button-body.webp | Bin 86 -> 88 bytes .../images/common/button-left-pressed.webp | Bin 0 -> 88 bytes public/nds/images/common/button-left.webp | Bin 88 -> 90 bytes .../images/common/button-right-pressed.webp | Bin 0 -> 88 bytes public/nds/images/common/button-right.webp | Bin 88 -> 92 bytes public/nds/images/common/button.webp | Bin 126 -> 0 bytes .../images/contact/bottom-screen/buttons.webp | Bin 1242 -> 0 bytes .../bottom-screen/buttons/button-pressed.webp | Bin 0 -> 146 bytes .../contact/bottom-screen/buttons/button.webp | Bin 0 -> 158 bytes .../bottom-screen/buttons/cv-pressed.webp | Bin 0 -> 150 bytes .../contact/bottom-screen/buttons/cv.webp | Bin 0 -> 150 bytes .../bottom-screen/buttons/email-pressed.webp | Bin 0 -> 176 bytes .../contact/bottom-screen/buttons/email.webp | Bin 0 -> 166 bytes .../bottom-screen/buttons/git-pressed.webp | Bin 0 -> 168 bytes .../contact/bottom-screen/buttons/git.webp | Bin 0 -> 168 bytes .../buttons/linkedin-pressed.webp | Bin 0 -> 120 bytes .../bottom-screen/buttons/linkedin.webp | Bin 0 -> 118 bytes .../buttons/achievements-pressed.webp | Bin 0 -> 86 bytes .../buttons/contact-pressed.webp | Bin 0 -> 330 bytes .../buttons/gallery-pressed.webp | Bin 0 -> 452 bytes .../buttons/projects-pressed.webp | Bin 0 -> 298 bytes .../buttons/{game.webp => projects.webp} | Bin .../buttons/settings-pressed.webp | Bin 0 -> 180 bytes .../bottom-screen/buttons/theme-pressed.webp | Bin 0 -> 78 bytes .../clock/achievements-pressed.webp | Bin 0 -> 372 bytes .../top-screen/clock/clock-pressed.webp | Bin 0 -> 394 bytes .../top-screen/clock/date-pressed.webp | Bin 0 -> 370 bytes .../top-screen/clock/time-pressed.webp | Bin 0 -> 392 bytes .../top-screen/options/2048-pressed.webp | Bin 0 -> 374 bytes .../top-screen/options/language-pressed.webp | Bin 0 -> 434 bytes .../top-screen/options/options-pressed.webp | Bin 0 -> 408 bytes .../options/rendering-mode-pressed.webp | Bin 0 -> 416 bytes .../touch_screen/touch-screen-pressed.webp | Bin 0 -> 304 bytes .../top-screen/user/birthday-pressed.webp | Bin 0 -> 406 bytes .../top-screen/user/color-pressed.webp | Bin 0 -> 334 bytes .../top-screen/user/snake-pressed.webp | Bin 0 -> 392 bytes .../top-screen/user/user-name-pressed.webp | Bin 0 -> 402 bytes .../top-screen/user/user-pressed.webp | Bin 0 -> 364 bytes 57 files changed, 413 insertions(+), 369 deletions(-) create mode 100644 public/nds/images/achievements/quit-pressed.webp create mode 100644 public/nds/images/common/button-body-pressed.webp create mode 100644 public/nds/images/common/button-left-pressed.webp create mode 100644 public/nds/images/common/button-right-pressed.webp delete mode 100644 public/nds/images/common/button.webp delete mode 100644 public/nds/images/contact/bottom-screen/buttons.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/button-pressed.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/button.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/cv-pressed.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/cv.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/email-pressed.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/email.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/git-pressed.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/git.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/linkedin-pressed.webp create mode 100644 public/nds/images/contact/bottom-screen/buttons/linkedin.webp create mode 100644 public/nds/images/home/bottom-screen/buttons/achievements-pressed.webp create mode 100644 public/nds/images/home/bottom-screen/buttons/contact-pressed.webp create mode 100644 public/nds/images/home/bottom-screen/buttons/gallery-pressed.webp create mode 100644 public/nds/images/home/bottom-screen/buttons/projects-pressed.webp rename public/nds/images/home/bottom-screen/buttons/{game.webp => projects.webp} (100%) create mode 100644 public/nds/images/home/bottom-screen/buttons/settings-pressed.webp create mode 100644 public/nds/images/home/bottom-screen/buttons/theme-pressed.webp create mode 100644 public/nds/images/settings/top-screen/clock/achievements-pressed.webp create mode 100644 public/nds/images/settings/top-screen/clock/clock-pressed.webp create mode 100644 public/nds/images/settings/top-screen/clock/date-pressed.webp create mode 100644 public/nds/images/settings/top-screen/clock/time-pressed.webp create mode 100644 public/nds/images/settings/top-screen/options/2048-pressed.webp create mode 100644 public/nds/images/settings/top-screen/options/language-pressed.webp create mode 100644 public/nds/images/settings/top-screen/options/options-pressed.webp create mode 100644 public/nds/images/settings/top-screen/options/rendering-mode-pressed.webp create mode 100644 public/nds/images/settings/top-screen/touch_screen/touch-screen-pressed.webp create mode 100644 public/nds/images/settings/top-screen/user/birthday-pressed.webp create mode 100644 public/nds/images/settings/top-screen/user/color-pressed.webp create mode 100644 public/nds/images/settings/top-screen/user/snake-pressed.webp create mode 100644 public/nds/images/settings/top-screen/user/user-name-pressed.webp create mode 100644 public/nds/images/settings/top-screen/user/user-pressed.webp diff --git a/app/components/Achievements/BottomScreen.vue b/app/components/Achievements/BottomScreen.vue index 4d70509..0a2393f 100644 --- a/app/components/Achievements/BottomScreen.vue +++ b/app/components/Achievements/BottomScreen.vue @@ -1,5 +1,5 @@ diff --git a/app/components/Contact/BottomScreen/Buttons.vue b/app/components/Contact/BottomScreen/Buttons.vue index f48a6c2..e9a65e1 100644 --- a/app/components/Contact/BottomScreen/Buttons.vue +++ b/app/components/Contact/BottomScreen/Buttons.vue @@ -1,17 +1,162 @@ + + diff --git a/app/components/Home/BottomScreen/Buttons.vue b/app/components/Home/BottomScreen/Buttons.vue index 87fa0f9..ef14595 100644 --- a/app/components/Home/BottomScreen/Buttons.vue +++ b/app/components/Home/BottomScreen/Buttons.vue @@ -5,9 +5,9 @@ import Selector from "~/components/Common/ButtonSelector.vue"; const { onRender } = useScreen(); const store = useHomeStore(); -const { assets } = useAssets(); +const { assets } = useAssets((a) => a.images.home.bottomScreen.buttons); -const { selected, selectorPosition } = useButtonNavigation({ +const { selected, pressed, selectorPosition } = useButtonNavigation({ buttons: { projects: [31, 23, 193, 49], contact: [31, 71, 97, 49], @@ -20,12 +20,6 @@ const { selected, selectorPosition } = useButtonNavigation({ initialButton: store.selectedButton, onActivate: (button) => { if (button === "theme") throw new Error(`Not implemented: ${button}`); - - if (button === "achievements") { - store.animateOutro("achievements"); - return; - } - store.animateOutro(button); }, navigation: { @@ -68,6 +62,14 @@ watch(selected, (newSelected) => { store.selectedButton = newSelected; }); +const getButtonImage = (button: typeof selected.value) => { + if (pressed.value === button) { + const pressedKey: `${typeof selected.value}Pressed` = `${button}Pressed`; + if (pressedKey in assets) return assets[pressedKey]; + } + return assets[button]; +}; + const getButtonOffset = (button: (typeof selected)["value"]) => { if (selected.value === button) return store.outro.buttonOffsetY; return 0; @@ -85,7 +87,7 @@ onRender((ctx) => { // gallery ctx.font = "7px NDS7"; - ctx.fillStyle = "#2c2c2c"; + ctx.fillStyle = pressed.value === "gallery" ? "#2c2c2c" : "#282828"; fillTextCentered( ctx, $t("home.photoGallery"), @@ -140,45 +142,40 @@ onRender((ctx) => { :x="33" :y="25 + getButtonOffset('projects')" :opacity="getOpacity('projects')" - :image="assets.images.home.bottomScreen.buttons.game" + :image="getButtonImage('projects')" />