63 lines
1.7 KiB
JavaScript
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();
|
|
}
|