donau2space-dev/js/main.js

63 lines
1.7 KiB
JavaScript

// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// 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();
}