main.js 3,2 КБ
Newer Older
Nikitos's avatar
Nikitos включено в состав коммита
1
2
3
4
5
6
7
// ===========================================================================
// Демо-проект Russiano2D.
//
// Точка входа: подключает модули демо и открывает меню-лаунчер. Каждый модуль
// демо экспортирует install($) и регистрирует свою сцену; всё остальное (мир,
// камера, звук, сохранения, отладка) уже есть в $.
//
Nikitos's avatar
ф    
Nikitos включено в состав коммита
8
// Демо три, и каждое показывает свой слой движка: платформер — Box2D и анимацию,
Nikitos's avatar
Nikitos включено в состав коммита
9
// «Типичная ночь в Мытищинском лесу» — свет, частицы и волны врагов, новелла — $.timeline и RmlUi.
Nikitos's avatar
ф    
Nikitos включено в состав коммита
10
11
// У каждого в папке лежит README: что внутри и как собрать такое же.
//
Nikitos's avatar
Nikitos включено в состав коммита
12
13
// Запуск:
//   ./build/russiano2d --game demos
Nikitos's avatar
Nikitos включено в состав коммита
14
15
//   ./build/russiano2d --game demos --scene shooter_witch   // бой
//   ./build/russiano2d --game demos --scene witch_menu      // меню-интро
Nikitos's avatar
Nikitos включено в состав коммита
16
17
18
19
20
21
22
23
24
25
26
//
// Добавить своё демо: положить demos/имя/index.js с экспортом install($)
// и дописать строку в MODULES — кнопка в меню появится сама.
//
// Импорт динамический и через try: одно сломанное демо не должно лишать
// пользователя остальных — в меню просто не появится его кнопка, а причина
// уйдёт в журнал.
// ===========================================================================

const MODULES = [
    './launcher.js',
Nikitos's avatar
Nikitos включено в состав коммита
27
28
29
    // Платформер в меню не показывается (демо слабое), но остаётся рабочей
    // сценой — его гоняет tests/agent/demos_test.py и запускают напрямую:
    //   ./build/russiano2d --game demos --scene platformer
Nikitos's avatar
Nikitos включено в состав коммита
30
    './platformer/index.js',
Nikitos's avatar
Nikitos включено в состав коммита
31
    './shooter_witch/index.js',
Nikitos's avatar
ф    
Nikitos включено в состав коммита
32
    './russi_vn/index.js',
Nikitos's avatar
Nikitos включено в состав коммита
33
    './rotsprite/index.js',
Nikitos's avatar
Nikitos включено в состав коммита
34
    './re2d_world/index.js',
Nikitos's avatar
Nikitos включено в состав коммита
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
];

$.ready(async ($) => {
    // Общие настройки демо-проекта.
    $.gfx.color('#0e1420');
    $.sound.volume(0.8);
    $.scene.transition('fade', 250);

    for (const path of MODULES) {
        try {
            const module = await import(path);
            if (typeof module.default !== 'function') {
                $.log(`демо ${path}: нет экспорта install($) — пропускаю`);
                continue;
            }
            module.default($);
        } catch (e) {
            $.log(`демо ${path} не загрузилось: ${e}`);
        }
    }

    // --scene <имя> открывает демо сразу, минуя меню (нужно тестам и агенту).
    const start = engine.startScene || 'launcher';
    if (!$.scene.has(start)) {
        $.log(`сцена "${start}" не зарегистрирована — открываю меню`);
        $.scene.load('launcher', { transition: 'none' });
        return;
    }
    $.scene.load(start, { transition: 'none' });
});