mirror of
https://github.com/isledecomp/isle.pizza.git
synced 2026-05-02 10:43:56 +00:00
61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
import App from './App.svelte';
|
|
import { mount } from 'svelte';
|
|
import './app.css';
|
|
|
|
function signalCrash(stack) {
|
|
window.dispatchEvent(new CustomEvent('game-crash', {
|
|
detail: {
|
|
stack,
|
|
buildVersion: window.Module.buildVersion || '',
|
|
wasmVersion: window.Module.wasmVersion || ''
|
|
}
|
|
}));
|
|
}
|
|
|
|
// Global Module object required by Emscripten - must be defined before isle.js loads
|
|
window.Module = {
|
|
arguments: ['--ini', '/config/isle.ini'],
|
|
buildVersion: (typeof __BUILD_VERSION__ !== 'undefined' && __BUILD_VERSION__) || '',
|
|
// wasmVersion is set at runtime by --post-js (version.js embedded in isle.js)
|
|
running: false,
|
|
preRun: function () {
|
|
window.Module["addRunDependency"]("isle");
|
|
window.Module.running = true;
|
|
},
|
|
canvas: null, // Will be set after mount
|
|
onAbort: function (what) {
|
|
signalCrash(String(what || 'Unknown error'));
|
|
},
|
|
onExit: function (code) {
|
|
if (code !== 0) {
|
|
signalCrash('Game exited with code ' + code);
|
|
} else {
|
|
window.location.reload();
|
|
}
|
|
}
|
|
};
|
|
|
|
// Safety net: catch worker errors that bypass abort() (e.g. WASM trap instructions)
|
|
window.addEventListener('unhandledrejection', function (event) {
|
|
if (window.Module.running && event.reason?.message?.includes('Aborted')) {
|
|
signalCrash(event.reason?.stack || event.reason?.message || 'Unknown error');
|
|
}
|
|
});
|
|
|
|
// Catch uncaught errors from worker threads
|
|
window.addEventListener('error', function (event) {
|
|
if (window.Module.running && event.message?.includes('RuntimeError')) {
|
|
signalCrash(event.error?.stack || event.message || 'Unknown error');
|
|
}
|
|
});
|
|
|
|
// Mount Svelte app
|
|
const app = mount(App, {
|
|
target: document.getElementById('app')
|
|
});
|
|
|
|
// Set canvas reference after mount
|
|
window.Module.canvas = document.getElementById('canvas');
|
|
|
|
export default app;
|