diff --git a/main.js b/main.js index f1dde75..bc181f9 100644 --- a/main.js +++ b/main.js @@ -69,6 +69,21 @@ const runner = Runner.create(); Runner.run(runner, engine); + let runnerActive = true; + + const startRunner = () => { + if (!runnerActive) { + Runner.run(runner, engine); + runnerActive = true; + } + }; + + const stopRunner = () => { + if (runnerActive) { + Runner.stop(runner); + runnerActive = false; + } + }; // Static boundaries and scene-specific obstacles. let boundaries = []; @@ -213,6 +228,7 @@ isPaused = false; resetChainVisuals(); stopSpawner(); + stopRunner(); engine.timing.timeScale = 0; pauseOverlay.classList.remove("visible"); pauseBtn.textContent = "Pause"; @@ -234,6 +250,7 @@ pauseOverlay.classList.remove("visible"); pauseBtn.textContent = "Pause"; engine.timing.timeScale = 1; + startRunner(); updateHud(); startSpawner(); }; @@ -252,8 +269,10 @@ if (isPaused) { resetChainVisuals(); stopSpawner(); + stopRunner(); engine.timing.timeScale = 0; } else { + startRunner(); startSpawner(); engine.timing.timeScale = 1; } @@ -520,10 +539,12 @@ }); // Rotate any scene rotators slowly. const dt = (engine.timing && engine.timing.delta) || 16; + const timeScale = engine.timing?.timeScale ?? 1; + if (isPaused || gameOver || timeScale === 0) return; rotators.forEach((b) => { const speed = b.plugin.rotSpeed || 0; if (speed !== 0) { - Body.rotate(b, speed * (dt / 1000)); + Body.rotate(b, speed * ((dt * timeScale) / 1000)); } }); });