perf(assets): параллельная загрузка и ленивый амбиент
О-4. AssetLoader грузил ключи await-в-цикле (~45 последовательных запросов);
BootScene — 4 атласа и карты друг за другом; 2.3 МБ WAV амбиента всех областей
декодировались до меню, хотя играется в первую очередь луговой.

- AssetLoader.load: один Assets.load(массив URL, onProgress) — Pixi грузит
  параллельно, onProgress честный по группе; пост-обработка nearest по всем
  результатам. API не изменился.
- BootScene.loadAll: Promise.all по группам (текстуры / 4 атласа / карты
  областей / шрифт+аудио) с общим взвешенным прогресс-баром (0.6/0.15/0.15/0.1).
- Ленивое амбиент-аудио: регистрируются все ключи (дёшево), декодируются
  только лупы стартовой области (data/audio.ts areaAudioKeys); остальные —
  фоновый game.preloadAudio при входе в область (LocationScene.enter).
  playAmbience/playLoop и раньше умели декодировать на месте (BufferCache
  дедуплицирует in-flight) — теперь до меню их никто не ждёт.

Perf (swiftshader): bootMs 2947-3191 -> 2781; newGame->location без изменений
(~200 мс, аудио и карты грузились в boot и раньше). agent:check 16/16,
включая аудио-чеки с ленивым декодом.

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 518deb7 commit ce898d08d4dd9ba8b3434de2b06f1377a2d8783b
@root root authored 6 hours ago
Showing 6 changed files
View
apps/game/src/Game.ts
View
apps/game/src/data/audio.ts
View
apps/game/src/scenes/BootScene.ts
View
apps/game/src/scenes/LocationScene.ts
View
docs/engine/assets-audio-save.md
View
packages/engine/src/assets/AssetLoader.ts