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}`);
},
},
);