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
];

$.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 <имя> открывает демо сразу, минуя меню (нужно тестам и агенту).
Nikitos's avatar
Nikitos включено в состав коммита
57
    const start = $.startScene || 'launcher';
Nikitos's avatar
Nikitos включено в состав коммита
58
59
60
61
62
63
64
    if (!$.scene.has(start)) {
        $.log(`сцена "${start}" не зарегистрирована — открываю меню`);
        $.scene.load('launcher', { transition: 'none' });
        return;
    }
    $.scene.load(start, { transition: 'none' });
});