Игровой движок на $mol: 2D и 3D на одном рендерере WebGL2 со своим тонким слоем gl/,
сцена и правила игры на реактивных объектах, интерфейс игры на обычных view.tree.
Документы:
- START.md: с чего начать свою игру, от пустого пака до едущего спрайта.
- ARCHITECTURE.md: принятые решения, модули, кадр, грабли
$mol_3d. - PLAN.md: этапы, задачи под одного молера, приёмка.
- STYLE.md: как писать код именно в этом паке.
- COMPARE.md: чем движок отличается от Godot и Bevy и когда что брать.
Демо: https://b-on-g.github.io/gamengine/ (страницы quad,
flat, room).
Движок не использует $mol_3d_pane и программную обвязку мола, только $mol_3d_mat4, $mol_3d_shape, $mol_3d_image и строки $mol_3d_glsl; причина в архитектуре, раздел 3.
Управление: WASD и стрелки, Q/E поворот в комнате, клик по монете, звук после первого клика.
Демо ставит service worker мола (include \/mol/offline/install в demo/demo.meta.tree):
после первого визита страница открывается без сети. Политика обновления после деплоя:
- обычный заход отдаёт бандл из кэша, страница стартует на старой версии, через
две-три секунды воркер находит новую, пишет в консоль
Outdatedи сам перезагружает страницу, второй заход уже свежий; - перезагрузка страницы (F5) всегда идёт в сеть, новая версия видна сразу;
- запрос с
?в адресе воркер не перехватывает вовсе.
На дев-сервере все приложения живут на одном origin, и после пересборки браузер
раз-другой отдаёт старый web.js. Снести воркер и кэш можно из консоли, или открыть
127.0.0.1:9080 вместо localhost: на IP воркер не ставится.
demo/manifest.json делает демо устанавливаемым приложением: полный экран,
альбомная ориентация, иконки demo/icon/hero-192.png и hero-512.png (герой из
атласа, увеличен без сглаживания). Сборщик сливает его с манифестом по умолчанию
в demo/-/manifest.json, а demo/index.html ссылается на него через <link rel="manifest">.
$bog_gamengine_screen (screen/): fullscreen? переводит документ в полный экран,
lock? захватывает курсор на холсте из target. Оба запроса браузер принимает
только из жеста пользователя, поэтому fullscreen( true ) и lock( true ) зовут из
обработчика клика; сама DOM-побочка выполняется через тик. Escape снимает захват и
полный экран, события fullscreenchange и pointerlockchange возвращают флаги в
актуальное состояние. Движение мыши при захвате копится в dx, dy, ходок забирает
его в step через take( out ) и поворачивает камеру.
Сборка в Tauri по рецепту bog/mol_skill/references/TAURI_SETUP.md:
- Rust и системные зависимости из раздела prerequisites рецепта;
tauri initсdistнаbog/gamengine/demo/-и дев-адресомhttp://localhost:9080/bog/gamengine/demo/;tauri buildпосле сборки бандла, готовый пакет вsrc-tauri/target/release/bundle.
Единственная страница пака: demo/index.html. Донор кода: пак bog/game
(форк hyoo-ru/game.hyoo.ru), его eye это прототип модуля draw.