Решили: бой за главным меню поднимается напрямую от мирового скоупа, а не через мероприятие.
Набор боёв — данные (MenuBattleConfig: пресет + сид), директор живёт в WorldLifetimeScope, стол
за меню уходит по отдельному событию MenuBattleChangedEvent.
Почему: первая версия звала ActivityHost.Open(ProvingGrounds) и получила от SessionHost
«сеанс не открыт → дочернему скоупу рождаться не от кого»: в главном меню сеанса ещё нет, он
открывается вместе с игрой. Фон меню не является занятием игрока и владения состоянием не требует,
поэтому живёт этажом ниже нашей же лестницы (Мир → Сессия → Занятие → Бой): мир → бой, без сессии
посередине. Записи боя при этом не нужно — ядро детерминировано, пресет плюс сид дают тот же бой
покадрово.
Сказано: «Какой лучше всего обычный бой с экшн камерой и мб с небольшим затемнением? Будто у нас он дешевый, просто просчитанные заранее созданные бои… Сделать таких боев 20, рандомные брать друг за другом. Все прям на грани» (04.08.2026, сессия ca460396).
Грабли:
- Директор обязан жить там, где виден префаб боевого скоупа. В корне его нет: префаб регистрируется в мире, а корень — предок мира и его регистраций не видит.
- Вершинные цвета в линейном пространстве конвертируются вручную.
Painter2Dделает это сам, ручной меш — нет, и всякая пластина выходила примерно вдвое светлее заданной. Поймано на скриншоте, а не на глаз: цифры замера переставали сходиться с картинкой. - Правки USS мимо редактора не видны в play mode без
refresh_unity— при выключенном Auto Refresh снимок показывает старую тему, и это читается как «правка не сработала». - Незакрытое: боевой скоуп поднимается и стол уходит, но юнитов на арене ноль — отряд игрока
берётся из
RunState, которого у меню нет. Составу фонового боя нужен свой источник.
Владелец правды: Assets/_Project/Scripts/Game/Flow/MenuBattleDirector.cs,
Data/Definitions/MenuBattleConfig.cs, Presentation/Map/MenuBackdropView.cs,
конфиг — ScriptableObjects/Configs/MenuBattleConfig.asset.