The boot gate learns about the profile: skeleton plaque, locked splash, a 4s cap
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
04ef49ef3b
commit
7a9b61fc6b
3 files changed
+29
-4
No files matched your search
+8
-3
@@ -906,8 +906,12 @@ document.getElementById('stModes').addEventListener('click', e => {
|
||||
});
|
||||
refreshSplash();
|
||||
// the profile mirror: adopt a server copy that is ahead (a wiped phone, a second device), then
|
||||
// let the strip show whatever came back. Fire-and-forget — the menu never waits on the network.
|
||||
profile.pull().then(refreshSplash);
|
||||
// let the plaque show whatever came back. The BOOT GATE holds the splash locked (skeleton
|
||||
// plaque, no buttons, no keys) until this settles — capped at 4 s, because a dead network must
|
||||
// never park the player on the title (the sprite loader's own rule).
|
||||
let profileDone = false;
|
||||
profile.pull().then(() => { profileDone = true; refreshSplash(); });
|
||||
setTimeout(() => { profileDone = true; }, 4000);
|
||||
|
||||
// THE BOOT GATE. render.js fires all ~230 sprite requests at import; this only watches them and
|
||||
// keeps the splash's buttons out of reach until the last one has landed and both faces are ready.
|
||||
@@ -925,7 +929,7 @@ const loaded = () => !splash.classList.contains('busy');
|
||||
const tick = setInterval(function watchLoad() {
|
||||
const frac = LOAD.total ? LOAD.done / LOAD.total : 1;
|
||||
bootFill.style.width = (frac * 100).toFixed(1) + '%';
|
||||
if (frac < 1) return;
|
||||
if (frac < 1 || !profileDone) return; // sprites AND the profile mirror (or its 4 s cap)
|
||||
clearInterval(tick);
|
||||
// fonts.ready resolves once nothing is pending — including the three faces warmed above — so the
|
||||
// first canvas frame is never the system serif.
|
||||
@@ -950,6 +954,7 @@ addEventListener('keydown', e => {
|
||||
if (!menuUp()) return;
|
||||
menuMusic(); // a key is a gesture too — unlock the theme on a desktop that never taps
|
||||
const stage = intro.dataset.stage;
|
||||
if (stage === 'splash' && !loaded()) return; // the boot gate holds the keys too
|
||||
if (e.key === 'Escape') return go('splash');
|
||||
if (stage === 'splash') {
|
||||
if (!loaded()) return; // the boot bar hides the buttons; a key must not walk past it
|
||||
|
||||
Reference in new issue
Block a user