diff --git a/app/assets/images/home/bottom-screen/buttons/alarm.webp b/app/assets/images/home/bottom-screen/buttons/alarm.webp new file mode 100644 index 0000000..cdea916 Binary files /dev/null and b/app/assets/images/home/bottom-screen/buttons/alarm.webp differ diff --git a/app/assets/images/home/bottom-screen/buttons/settings.webp b/app/assets/images/home/bottom-screen/buttons/settings.webp new file mode 100644 index 0000000..62ae883 Binary files /dev/null and b/app/assets/images/home/bottom-screen/buttons/settings.webp differ diff --git a/app/assets/images/home/bottom-screen/buttons/theme.webp b/app/assets/images/home/bottom-screen/buttons/theme.webp new file mode 100644 index 0000000..2c6a88e Binary files /dev/null and b/app/assets/images/home/bottom-screen/buttons/theme.webp differ diff --git a/app/components/Home/BottomScreen/Buttons/Buttons.vue b/app/components/Home/BottomScreen/Buttons/Buttons.vue index 3049093..2ff6f78 100644 --- a/app/components/Home/BottomScreen/Buttons/Buttons.vue +++ b/app/components/Home/BottomScreen/Buttons/Buttons.vue @@ -2,6 +2,7 @@ import GameButton from "./GameButton.vue"; import ContactButton from "./ContactButton.vue"; import DownloadPlayButton from "./DownloadPlayButton.vue"; +import SettingsButton from "./SettingsButton.vue"; import Selector from "~/components/Common/ButtonSelector.vue"; const store = useHomeStore(); @@ -11,10 +12,13 @@ const { selectedButton, selectorPosition } = useButtonNavigation({ projects: [31, 23, 193, 49], contact: [31, 71, 97, 49], downloadPlay: [127, 71, 97, 49], + settings: [112, 167, 31, 26], }, initialButton: "projects", onButtonClick: (button) => { - store.animateOutro(`/${button}`); + if (button === "downloadPlay") throw new Error("Not implemented"); + + store.animateOutro(button); }, navigation: { projects: { @@ -26,10 +30,15 @@ const { selectedButton, selectorPosition } = useButtonNavigation({ contact: { up: "projects", right: "downloadPlay", + down: "settings", }, downloadPlay: { up: "projects", left: "contact", + down: "settings", + }, + settings: { + up: "last", }, }, }); @@ -63,6 +72,11 @@ const getOpacity = (button?: (typeof selectedButton)["value"]) => { :y="72 + getButtonOffset('contact')" :opacity="getOpacity('contact')" /> + diff --git a/app/components/Home/BottomScreen/Buttons/SettingsButton.vue b/app/components/Home/BottomScreen/Buttons/SettingsButton.vue new file mode 100644 index 0000000..134ea3a --- /dev/null +++ b/app/components/Home/BottomScreen/Buttons/SettingsButton.vue @@ -0,0 +1,20 @@ + diff --git a/app/components/Home/TopScreen/Calendar.vue b/app/components/Home/TopScreen/Calendar.vue index e6c61ee..1b9b1f8 100644 --- a/app/components/Home/TopScreen/Calendar.vue +++ b/app/components/Home/TopScreen/Calendar.vue @@ -32,7 +32,7 @@ useRender((ctx) => { ctx.globalAlpha = store.isIntro ? store.intro.stage1Opacity - : store.isOutro + : store.isOutro && store.outro.animateTop ? store.outro.stage1Opacity : 1; ctx.drawImage(calendarImage!, CALENDAR_LEFT - 3, CALENDAR_TOP - 33); @@ -44,7 +44,7 @@ useRender((ctx) => { ctx.globalAlpha = store.isIntro ? store.intro.stage1Opacity - : store.isOutro + : store.isOutro && store.outro.animateTop ? store.outro.stage2Opacity : 1; for (let col = 0; col < CALENDAR_ROWS + (extraRow ? 1 : 0); col += 1) { diff --git a/app/components/Home/TopScreen/Clock.vue b/app/components/Home/TopScreen/Clock.vue index 829dd00..b4c0e2d 100644 --- a/app/components/Home/TopScreen/Clock.vue +++ b/app/components/Home/TopScreen/Clock.vue @@ -56,14 +56,14 @@ function drawLine( useRender((ctx) => { ctx.globalAlpha = store.isIntro ? store.intro.stage1Opacity - : store.isOutro + : store.isOutro && store.outro.animateTop ? store.outro.stage1Opacity : 1; ctx.drawImage(clockImage!, 13, 45); ctx.globalAlpha = store.isIntro ? store.intro.stage1Opacity - : store.isOutro + : store.isOutro && store.outro.animateTop ? store.outro.stage2Opacity : 1; const now = new Date(); diff --git a/app/components/Home/TopScreen/StatusBar.vue b/app/components/Home/TopScreen/StatusBar.vue index 3f1ab83..318b2d1 100644 --- a/app/components/Home/TopScreen/StatusBar.vue +++ b/app/components/Home/TopScreen/StatusBar.vue @@ -19,7 +19,8 @@ useRender((ctx) => { ctx.translate(0, store.isIntro ? store.intro.statusBarY : 0); - ctx.globalAlpha = store.isOutro ? store.outro.stage2Opacity : 1; + ctx.globalAlpha = + store.isOutro && store.outro.animateTop ? store.outro.stage2Opacity : 1; ctx.drawImage(statusBarImage!, 0, 0); ctx.fillStyle = "#ffffff"; diff --git a/app/stores/home.ts b/app/stores/home.ts index 5df0327..450fccc 100644 --- a/app/stores/home.ts +++ b/app/stores/home.ts @@ -9,8 +9,9 @@ export const useHomeStore = defineStore("home", { outro: { buttonOffsetY: 0, - stage1Opacity: 0, - stage2Opacity: 0, + stage1Opacity: 1, + stage2Opacity: 1, + animateTop: false, }, isIntro: true, @@ -54,8 +55,9 @@ export const useHomeStore = defineStore("home", { ); }, - animateOutro(to?: string) { + animateOutro(to: "contact" | "projects" | "settings") { this.isOutro = true; + this.outro.animateTop = to !== "settings"; const duration = 0.4; const delay = 0.08; @@ -74,7 +76,7 @@ export const useHomeStore = defineStore("home", { ease: "none", onComplete: () => { this.isOutro = true; - if (to) navigateTo(to); + navigateTo(`/${to}`); }, }, );