feat: disable win fanfare and sharing if guide was used

This commit is contained in:
2026-02-10 02:30:58 +01:00
parent 7610a4a523
commit 9f89fe4340
3 changed files with 20 additions and 4 deletions

View File

@@ -223,7 +223,7 @@ const shareTo = async (target) => {
};
onMounted(() => {
if (fireworksRef.value) {
if (fireworksRef.value && !store.hasUsedGuide) {
fireworksInstance = new Fireworks(fireworksRef.value, {
autoresize: true,
opacity: 0.6,
@@ -242,7 +242,9 @@ onMounted(() => {
});
fireworksInstance.start();
}
if (!store.hasUsedGuide) {
playFanfare();
}
triggerVibration();
window.addEventListener('keydown', handleKeyDown);
});
@@ -276,7 +278,7 @@ onUnmounted(() => {
</div>
</div>
<div class="share">
<div class="share" v-if="!store.hasUsedGuide">
<div class="share-title">{{ t('win.shareTitle') }}</div>
<div class="share-buttons">
<button class="btn-neon secondary share-btn" :disabled="shareInProgress" :aria-label="t('win.shareX')" @click="shareTo('x')">

View File

@@ -24,6 +24,7 @@ export function useSolver() {
return;
}
if (isProcessing.value) return;
store.markGuideUsed();
ensureWorker();
isProcessing.value = true;

View File

@@ -63,6 +63,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
const solution = ref([]);
const playerGrid = ref([]); // 0: empty, 1: filled, 2: cross
const isGameWon = ref(false);
const hasUsedGuide = ref(false);
const size = ref(5);
const startTime = ref(null);
const elapsedTime = ref(0);
@@ -116,6 +117,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
resetGrid();
isGameWon.value = false;
hasUsedGuide.value = false;
elapsedTime.value = 0;
startTimer();
}
@@ -130,6 +132,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
resetGrid();
isGameWon.value = false;
hasUsedGuide.value = false;
elapsedTime.value = 0;
startTimer();
}
@@ -238,6 +241,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
solution: solution.value,
playerGrid: playerGrid.value,
isGameWon: isGameWon.value,
hasUsedGuide: hasUsedGuide.value,
elapsedTime: elapsedTime.value,
moves: moves.value,
history: history.value
@@ -316,6 +320,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
if (currentLevelId.value === 'custom') {
resetGrid();
isGameWon.value = false;
hasUsedGuide.value = false;
elapsedTime.value = 0;
startTimer();
saveState();
@@ -324,6 +329,12 @@ export const usePuzzleStore = defineStore('puzzle', () => {
}
}
function markGuideUsed() {
if (isGameWon.value) return;
hasUsedGuide.value = true;
saveState();
}
function closeWinModal() {
if (!isGameWon.value) return;
isGameWon.value = false;
@@ -347,7 +358,9 @@ export const usePuzzleStore = defineStore('puzzle', () => {
loadState, // expose loadState
moves,
undo,
closeWinModal
closeWinModal,
hasUsedGuide,
markGuideUsed
};
});