From 8d467c48b070a9dad572a3c8e5a0968c8c2f56dc Mon Sep 17 00:00:00 2001 From: Pihkaal Date: Sat, 31 Jan 2026 20:37:02 +0100 Subject: [PATCH] feat(achievements): spawn confetti when all achievements are obtained --- app/stores/achievements.ts | 7 +++++++ app/stores/achievementsScreen.ts | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/app/stores/achievements.ts b/app/stores/achievements.ts index 8dd971f..a0d5aa4 100644 --- a/app/stores/achievements.ts +++ b/app/stores/achievements.ts @@ -51,12 +51,19 @@ export const useAchievementsStore = defineStore("achievements", () => { storage.value.advancement.languages.push(locale.value); } + const confetti = useConfetti(); + const unlock = (name: Achievement) => { if (storage.value.unlocked.includes(name)) { return false; } storage.value.unlocked.push(name); + + if (storage.value.unlocked.length === ACHIEVEMENTS.length) { + confetti.spawn(); + } + return true; }; diff --git a/app/stores/achievementsScreen.ts b/app/stores/achievementsScreen.ts index cd21735..0ec4579 100644 --- a/app/stores/achievementsScreen.ts +++ b/app/stores/achievementsScreen.ts @@ -88,6 +88,12 @@ export const useAchievementsScreen = defineStore("achievementsScreen", { this.intro.itemOffsets[i] = -ACHIEVEMENTS_LINE_HEIGHT; } + const achievements = useAchievementsStore(); + if (achievements.allObtained) { + const confetti = useConfetti(); + confetti.spawn(); + } + const tl = gsap.timeline({ onComplete: () => { this.isIntro = false;