From 8f45ae60280c4770d3c9739efea55f36a0c8b3b7 Mon Sep 17 00:00:00 2001 From: Dimava Date: Fri, 14 Feb 2025 02:32:10 +0300 Subject: [PATCH] Add Notifications (todo: request permission, settings) --- js/main.js | 12 +++++++++--- js/notif.js | 26 +++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/js/main.js b/js/main.js index 96dfd8d..79f18eb 100644 --- a/js/main.js +++ b/js/main.js @@ -9,7 +9,7 @@ document.addEventListener("DOMContentLoaded", () => { updateMusic(); setTab("collection"); time = performance.now(); - requestAnimationFrame(loop); + setEveryFrameOrInterval(loop, 10000); setTimeout(() => checkCloudSave(), 1000); $("#loading").remove(); @@ -26,6 +26,12 @@ function loop() { onFrame(); updateNotifs(); +} - requestAnimationFrame(loop); -} \ No newline at end of file +async function setEveryFrameOrInterval(handler, timeout) { + var safeHandler = async (t) => handler(t); + while (true) { + let t = await new Promise(r => { requestAnimationFrame(r); setTimeout(() => r(performance.now()), timeout) }); + safeHandler(t); + } +} diff --git a/js/notif.js b/js/notif.js index c1d3a23..8789d05 100644 --- a/js/notif.js +++ b/js/notif.js @@ -63,4 +63,28 @@ function spawnBadgeNotif(badge) { img.onerror = undefined; }; } -} \ No newline at end of file +} + + +function createNotificationListener() { + let fireWasDone = true; + let energyWasCapped = true; + + return () => { + let fireDone = game.time.skillCooldowns.fire == 0; + let energyCapped = game.res.energy > effects.energyCap; + + requestAnimationFrame(loop); + if (fireDone && !fireWasDone){ + new Notification("Burst has recharged!").onclick = () => window.focus() + } + if (energyCapped && !energyWasCapped) { + new Notification("Energy has filled!").onclick = () => window.focus() + } + + fireWasDone = fireDone; + energyWasCapped = energyCapped; + } +} + +addEvent("frame", createNotificationListener()); \ No newline at end of file