fix(web): prevent stopGame from being called on non-game page transitions

Only stop the game when navigating away from the game page (/) to avoid
WASM runtime errors when navigating between /leaderboard and /download.
Add error handling to gracefully handle crashes during page transitions.
This commit is contained in:
2025-12-29 14:53:42 -06:00
parent 21078b7ada
commit e017a87e12
2 changed files with 31 additions and 21 deletions
+19 -16
View File
@@ -23,23 +23,26 @@ function restartGame() {
const win = getPacmanWindow();
const module = win.Module;
if (module?._restart_game) {
const canvas = document.getElementById("canvas") as HTMLCanvasElement | null;
if (!canvas) {
console.error("Canvas element not found during game restart");
return;
}
if (!module?._restart_game) {
console.warn("Game restart function not available (WASM may not be initialized)");
return;
}
// Update canvas reference BEFORE restart - App::new() will read from Module.canvas
module.canvas = canvas;
// SDL2's Emscripten backend reads this for canvas lookup
win.SDL_CANVAS_ID = "#canvas";
const canvas = document.getElementById("canvas") as HTMLCanvasElement | null;
if (!canvas) {
console.error("Canvas element not found during game restart");
return;
}
try {
console.log("Restarting game with fresh App instance");
module._restart_game();
} catch (error) {
console.error("Failed to restart game:", error);
}
// Update canvas reference BEFORE restart - App::new() will read from Module.canvas
module.canvas = canvas;
// SDL2's Emscripten backend reads this for canvas lookup
win.SDL_CANVAS_ID = "#canvas";
try {
console.log("Restarting game with fresh App instance");
module._restart_game();
} catch (error) {
console.error("Failed to restart game:", error);
}
}