// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ // DONAU2SPACE // DEV ENTITY — Main Bootstrap // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ import { $, bus } from './utils.js'; import { initStarfield } from './starfield.js'; import { startMatrixRain } from './effects.js'; import { Terminal } from './terminal.js'; import { registerAllCommands, bootSequence } from './commands.js'; import { registerSequences } from './sequences.js'; import { initNarrative } from './narrative.js'; async function init() { // 1. Canvas starfield const canvas = $('canvas#starfield'); if (canvas) initStarfield(canvas); // 2. Matrix rain background startMatrixRain(); // 3. Terminal const screen = $('#screen'); const input = $('#input'); if (!screen || !input) return; const term = new Terminal(screen, input); // 4. Register commands + sequences registerAllCommands(term); registerSequences(term); // 5. Narrative engine (awareness, timeline, konami) initNarrative(term); // 6. Boot sequence await bootSequence(term, false); // 7. Focus term.focus(); // 8. Reboot handler bus.on('reboot', async () => { term.clear(); await bootSequence(term, true); term.focus(); }); // 9. Focus link const focusLink = $('#focus-link'); if (focusLink) { focusLink.addEventListener('click', (e) => { e.preventDefault(); term.focus(); }); } } // Go if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }