diff options
| author | LLLL Colonq <llll@colonq> | 2026-06-18 18:07:08 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2026-06-18 18:07:08 -0400 |
| commit | 47036ba678949ade21ecbecaeb780b324f6ce3ee (patch) | |
| tree | 28d87c88634df74bbecb8b761d65e55670b22b99 /2026/examples/example_godot/output/index.html | |
| parent | c9fc2ca532c5219a087924ece1e38be19c25f006 (diff) | |
Fix harness
Diffstat (limited to '2026/examples/example_godot/output/index.html')
| -rw-r--r-- | 2026/examples/example_godot/output/index.html | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/2026/examples/example_godot/output/index.html b/2026/examples/example_godot/output/index.html new file mode 100644 index 0000000..cdc204c --- /dev/null +++ b/2026/examples/example_godot/output/index.html @@ -0,0 +1,220 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0"> + <title>jam-example</title> + <style> +html, body, #canvas { + margin: 0; + padding: 0; + border: 0; +} + +body { + color: white; + background-color: black; + overflow: hidden; + touch-action: none; +} + +#canvas { + display: block; +} + +#canvas:focus { + outline: none; +} + +#status, #status-splash, #status-progress { + position: absolute; + left: 0; + right: 0; +} + +#status, #status-splash { + top: 0; + bottom: 0; +} + +#status { + background-color: #242424; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + visibility: hidden; +} + +#status-splash { + max-height: 100%; + max-width: 100%; + margin: auto; +} + +#status-splash.show-image--false { + display: none; +} + +#status-splash.fullsize--true { + height: 100%; + width: 100%; + object-fit: contain; +} + +#status-splash.use-filter--false { + image-rendering: pixelated; +} + +#status-progress, #status-notice { + display: none; +} + +#status-progress { + bottom: 10%; + width: 50%; + margin: 0 auto; +} + +#status-notice { + background-color: #5b3943; + border-radius: 0.5rem; + border: 1px solid #9b3943; + color: #e0e0e0; + font-family: 'Noto Sans', 'Droid Sans', Arial, sans-serif; + line-height: 1.3; + margin: 0 2rem; + overflow: hidden; + padding: 1rem; + text-align: center; + z-index: 1; +} + </style> + <link id="-gd-engine-icon" rel="icon" type="image/png" href="index.icon.png" /> +<link rel="apple-touch-icon" href="index.apple-touch-icon.png"/> + + </head> + <body> + <canvas id="canvas"> + Your browser does not support the canvas tag. + </canvas> + + <noscript> + Your browser does not support JavaScript. + </noscript> + + <div id="status"> + <img id="status-splash" class="show-image--true fullsize--true use-filter--true" src="index.png" alt=""> + <progress id="status-progress"></progress> + <div id="status-notice"></div> + </div> + + <script src="index.js"></script> + <script> +const GODOT_CONFIG = {"args":[],"canvasResizePolicy":2,"emscriptenPoolSize":8,"ensureCrossOriginIsolationHeaders":true,"executable":"index","experimentalVK":false,"fileSizes":{"index.pck":8312,"index.wasm":35749181},"focusCanvas":true,"gdextensionLibs":[],"godotPoolSize":4}; +const GODOT_THREADS_ENABLED = false; +const engine = new Engine(GODOT_CONFIG); + +(function () { + const statusOverlay = document.getElementById('status'); + const statusProgress = document.getElementById('status-progress'); + const statusNotice = document.getElementById('status-notice'); + + let initializing = true; + let statusMode = ''; + + function setStatusMode(mode) { + if (statusMode === mode || !initializing) { + return; + } + if (mode === 'hidden') { + statusOverlay.remove(); + initializing = false; + return; + } + statusOverlay.style.visibility = 'visible'; + statusProgress.style.display = mode === 'progress' ? 'block' : 'none'; + statusNotice.style.display = mode === 'notice' ? 'block' : 'none'; + statusMode = mode; + } + + function setStatusNotice(text) { + while (statusNotice.lastChild) { + statusNotice.removeChild(statusNotice.lastChild); + } + const lines = text.split('\n'); + lines.forEach((line) => { + statusNotice.appendChild(document.createTextNode(line)); + statusNotice.appendChild(document.createElement('br')); + }); + } + + function displayFailureNotice(err) { + console.error(err); + if (err instanceof Error) { + setStatusNotice(err.message); + } else if (typeof err === 'string') { + setStatusNotice(err); + } else { + setStatusNotice('An unknown error occurred.'); + } + setStatusMode('notice'); + initializing = false; + } + + const missing = Engine.getMissingFeatures({ + threads: GODOT_THREADS_ENABLED, + }); + + if (missing.length !== 0) { + if (GODOT_CONFIG['serviceWorker'] && GODOT_CONFIG['ensureCrossOriginIsolationHeaders'] && 'serviceWorker' in navigator) { + let serviceWorkerRegistrationPromise; + try { + serviceWorkerRegistrationPromise = navigator.serviceWorker.getRegistration(); + } catch (err) { + serviceWorkerRegistrationPromise = Promise.reject(new Error('Service worker registration failed.')); + } + // There's a chance that installing the service worker would fix the issue + Promise.race([ + serviceWorkerRegistrationPromise.then((registration) => { + if (registration != null) { + return Promise.reject(new Error('Service worker already exists.')); + } + return registration; + }).then(() => engine.installServiceWorker()), + // For some reason, `getRegistration()` can stall + new Promise((resolve) => { + setTimeout(() => resolve(), 2000); + }), + ]).then(() => { + // Reload if there was no error. + window.location.reload(); + }).catch((err) => { + console.error('Error while registering service worker:', err); + }); + } else { + // Display the message as usual + const missingMsg = 'Error\nThe following features required to run Godot projects on the Web are missing:\n'; + displayFailureNotice(missingMsg + missing.join('\n')); + } + } else { + setStatusMode('progress'); + engine.startGame({ + 'onProgress': function (current, total) { + if (current > 0 && total > 0) { + statusProgress.value = current; + statusProgress.max = total; + } else { + statusProgress.removeAttribute('value'); + statusProgress.removeAttribute('max'); + } + }, + }).then(() => { + setStatusMode('hidden'); + }, displayFailureNotice); + } +}()); + </script> + </body> +</html> + |
