feat: disable win fanfare and sharing if guide was used
This commit is contained in:
@@ -223,7 +223,7 @@ const shareTo = async (target) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (fireworksRef.value) {
|
if (fireworksRef.value && !store.hasUsedGuide) {
|
||||||
fireworksInstance = new Fireworks(fireworksRef.value, {
|
fireworksInstance = new Fireworks(fireworksRef.value, {
|
||||||
autoresize: true,
|
autoresize: true,
|
||||||
opacity: 0.6,
|
opacity: 0.6,
|
||||||
@@ -242,7 +242,9 @@ onMounted(() => {
|
|||||||
});
|
});
|
||||||
fireworksInstance.start();
|
fireworksInstance.start();
|
||||||
}
|
}
|
||||||
|
if (!store.hasUsedGuide) {
|
||||||
playFanfare();
|
playFanfare();
|
||||||
|
}
|
||||||
triggerVibration();
|
triggerVibration();
|
||||||
window.addEventListener('keydown', handleKeyDown);
|
window.addEventListener('keydown', handleKeyDown);
|
||||||
});
|
});
|
||||||
@@ -276,7 +278,7 @@ onUnmounted(() => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="share">
|
<div class="share" v-if="!store.hasUsedGuide">
|
||||||
<div class="share-title">{{ t('win.shareTitle') }}</div>
|
<div class="share-title">{{ t('win.shareTitle') }}</div>
|
||||||
<div class="share-buttons">
|
<div class="share-buttons">
|
||||||
<button class="btn-neon secondary share-btn" :disabled="shareInProgress" :aria-label="t('win.shareX')" @click="shareTo('x')">
|
<button class="btn-neon secondary share-btn" :disabled="shareInProgress" :aria-label="t('win.shareX')" @click="shareTo('x')">
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export function useSolver() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (isProcessing.value) return;
|
if (isProcessing.value) return;
|
||||||
|
store.markGuideUsed();
|
||||||
ensureWorker();
|
ensureWorker();
|
||||||
isProcessing.value = true;
|
isProcessing.value = true;
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
|
|||||||
const solution = ref([]);
|
const solution = ref([]);
|
||||||
const playerGrid = ref([]); // 0: empty, 1: filled, 2: cross
|
const playerGrid = ref([]); // 0: empty, 1: filled, 2: cross
|
||||||
const isGameWon = ref(false);
|
const isGameWon = ref(false);
|
||||||
|
const hasUsedGuide = ref(false);
|
||||||
const size = ref(5);
|
const size = ref(5);
|
||||||
const startTime = ref(null);
|
const startTime = ref(null);
|
||||||
const elapsedTime = ref(0);
|
const elapsedTime = ref(0);
|
||||||
@@ -116,6 +117,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
|
|||||||
|
|
||||||
resetGrid();
|
resetGrid();
|
||||||
isGameWon.value = false;
|
isGameWon.value = false;
|
||||||
|
hasUsedGuide.value = false;
|
||||||
elapsedTime.value = 0;
|
elapsedTime.value = 0;
|
||||||
startTimer();
|
startTimer();
|
||||||
}
|
}
|
||||||
@@ -130,6 +132,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
|
|||||||
|
|
||||||
resetGrid();
|
resetGrid();
|
||||||
isGameWon.value = false;
|
isGameWon.value = false;
|
||||||
|
hasUsedGuide.value = false;
|
||||||
elapsedTime.value = 0;
|
elapsedTime.value = 0;
|
||||||
startTimer();
|
startTimer();
|
||||||
}
|
}
|
||||||
@@ -238,6 +241,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
|
|||||||
solution: solution.value,
|
solution: solution.value,
|
||||||
playerGrid: playerGrid.value,
|
playerGrid: playerGrid.value,
|
||||||
isGameWon: isGameWon.value,
|
isGameWon: isGameWon.value,
|
||||||
|
hasUsedGuide: hasUsedGuide.value,
|
||||||
elapsedTime: elapsedTime.value,
|
elapsedTime: elapsedTime.value,
|
||||||
moves: moves.value,
|
moves: moves.value,
|
||||||
history: history.value
|
history: history.value
|
||||||
@@ -316,6 +320,7 @@ export const usePuzzleStore = defineStore('puzzle', () => {
|
|||||||
if (currentLevelId.value === 'custom') {
|
if (currentLevelId.value === 'custom') {
|
||||||
resetGrid();
|
resetGrid();
|
||||||
isGameWon.value = false;
|
isGameWon.value = false;
|
||||||
|
hasUsedGuide.value = false;
|
||||||
elapsedTime.value = 0;
|
elapsedTime.value = 0;
|
||||||
startTimer();
|
startTimer();
|
||||||
saveState();
|
saveState();
|
||||||
@@ -324,6 +329,12 @@ export const usePuzzleStore = defineStore('puzzle', () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function markGuideUsed() {
|
||||||
|
if (isGameWon.value) return;
|
||||||
|
hasUsedGuide.value = true;
|
||||||
|
saveState();
|
||||||
|
}
|
||||||
|
|
||||||
function closeWinModal() {
|
function closeWinModal() {
|
||||||
if (!isGameWon.value) return;
|
if (!isGameWon.value) return;
|
||||||
isGameWon.value = false;
|
isGameWon.value = false;
|
||||||
@@ -347,7 +358,9 @@ export const usePuzzleStore = defineStore('puzzle', () => {
|
|||||||
loadState, // expose loadState
|
loadState, // expose loadState
|
||||||
moves,
|
moves,
|
||||||
undo,
|
undo,
|
||||||
closeWinModal
|
closeWinModal,
|
||||||
|
hasUsedGuide,
|
||||||
|
markGuideUsed
|
||||||
};
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user