From b2d57badf974d8d27de5498408e11e41e44e8d29 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sun, 20 Oct 2024 18:36:16 +0900 Subject: [PATCH] refactor --- packages/frontend/src/boot/main-boot.ts | 35 ++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/packages/frontend/src/boot/main-boot.ts b/packages/frontend/src/boot/main-boot.ts index 36ed925182..8847ebcc0f 100644 --- a/packages/frontend/src/boot/main-boot.ts +++ b/packages/frontend/src/boot/main-boot.ts @@ -231,11 +231,38 @@ export async function mainBoot() { } if (!claimedAchievements.includes('justPlainLucky')) { - window.setInterval(() => { - if (document.visibilityState === 'visible' && Math.floor(Math.random() * 20000) === 0) { - claimAchievement('justPlainLucky'); + let justPlainLuckyTimer: number | null = null; + let lastVisibilityChangedAt = Date.now(); + + function claimPlainLucky() { + if (document.visibilityState !== 'visible') { + if (justPlainLuckyTimer != null) window.clearTimeout(justPlainLuckyTimer); + return; } - }, 1000 * 10); + + if (Math.floor(Math.random() * 20000) === 0) { + claimAchievement('justPlainLucky'); + } else { + justPlainLuckyTimer = window.setTimeout(claimPlainLucky, 1000 * 10); + } + } + + window.addEventListener('visibilitychange', () => { + if (document.visibilityState === 'visible') { + if ((Date.now() - lastVisibilityChangedAt) < 1000 * 10) { + justPlainLuckyTimer = window.setTimeout(claimPlainLucky, 1000 * 10); + } else { + claimPlainLucky(); + } + } else if (justPlainLuckyTimer != null) { + window.clearTimeout(justPlainLuckyTimer); + justPlainLuckyTimer = null; + } + + lastVisibilityChangedAt = Date.now(); + }, { passive: true }); + + claimPlainLucky(); } if (!claimedAchievements.includes('client30min')) {