docs: план Lobby по референсу (TASK-2026-022)
CI / test (push) Successful in 2m56s Details

- Анализ референса: топбар, BATTLE/DECK BUILDER/SHOP, миссии, балансы,
  центр-чат, Friends Online.
- Решения: несерверные блоки — заглушки «скоро»; центр без 3D, большая
  панель чата; Rating — заглушка лидерборда; Community — отдельная сцена
  с гайдами/колодами/тикетами; BATTLE — оверлей выбора режима и колоды;
  онбординг в Lobby не показывать; фон процедурный.
- Чек-лист C1-C11, риски и критерии готовности.
- Зафиксировано: Login и Lobby — 2D-экраны, 3D остаётся для DeckBuilder
  и Battle.
This commit is contained in:
MpakobecEx 2026-10-31 18:18:22 +05:00
parent af3fb2b621
commit d7395780a3
4 changed files with 297 additions and 13 deletions

View File

@ -214,12 +214,14 @@ TASK с полями «Реализация» и «Проверка» по `AGEN
Критерий: композиция совпадает с референсом, вход и регистрация работают.
Зависит: арт-файл от пользователя; `TASK-2026-021`.
- [ ] **B3. P1 — Lobby и DeckBuilder: 3D-сцены.**
Сделать: Lobby — зал с постаментом/витриной и световыми акцентами;
DeckBuilder — стол с матом, стопками и подсветкой зон.
Зачем: сейчас 6 и 3 куба, экраны визуально пустые.
- [ ] **B3. P1 — Lobby и DeckBuilder: визуальное наполнение.**
Решение 2026-10-31: `Lobby` — 2D дашборд по референсу (фон, панели,
заглушки, без 3D-окружения); `DeckBuilder` — стол с матом, стопками и
подсветкой зон.
Зачем: Lobby собран из 6 кубов и gray-box панелей, DeckBuilder — из 3.
Критерий: у каждой сцены своя композиция, а не общий `switch` с кубами.
Зависит: B1, A4, референс экрана от пользователя.
Зависит: B1, A4, `TASK-2026-022`; для DeckBuilder — референс от
пользователя.
- [ ] **B4. P1 — Battle: окружение вокруг поля.**
Сделать: задник, постамент, световые акценты вокруг `GameBoard3D`, не
@ -391,9 +393,10 @@ TASK с полями «Реализация» и «Проверка» по `AGEN
`Lobby`, `DeckBuilder` (включая экран колод), `Battle`. B2–B4 стартуют
после получения соответствующего референса.
6. **Первый блок.** A1 + C1–C3.
7. **Login — исключение из «3D в каждой сцене»:** фон — 2D key art на весь
экран, 3D-окружение в сцене `Login` не строится. Правило «3D» остаётся для
`Lobby`, `DeckBuilder` и `Battle`.
7. **Login и Lobby — исключение из «3D в каждой сцене»:** `Login` — 2D key
art на весь экран; `Lobby` — 2D дашборд по референсу (решение 2026-10-31,
`TASK-2026-022`). 3D-окружение в этих сценах не строится; правило «3D»
остаётся для `DeckBuilder` и `Battle`.
8. **Регистрация** — вторичная ссылка «Создать аккаунт» под кнопкой «Войти».
9. **Адрес сервера** — без UI: только `AppConfig`/`PlayerPrefs`, поле из
панели убирается.

View File

@ -42,6 +42,7 @@
| TASK-2026-019 | `[ ]` | Загрузочная сцена и кадр без покадровых аллокаций | DeepSeek: план готов; реализация ожидает | не выполнена |
| TASK-2026-020 | `[x]` | Парсер карт и артов с официального сайта | DeepSeek: анализ и реализация | идемпотентность 0 diff; `validate` не запускался |
| TASK-2026-021 | `[!]` | Login по референсу: 2D-арт и неоновый UI | DeepSeek: C1–C9, Tab/Enter/Esc; ждёт приёмки | EditMode 60/60; `SCENE_SMOKE success=True`; standalone собран; ручная — пользователь |
| TASK-2026-022 | `[ ]` | Lobby по референсу: дашборд, заглушки, сцена Community | DeepSeek: анализ и план готовы; реализация ожидает | не выполнена |
Новые задачи добавляются в конец файла отдельными разделами. Не используй один
раздел для нескольких независимых задач.
@ -2051,6 +2052,279 @@ HUD с номером хода и фазовой шкалой, компактн
- **Skill обновлён:** не требуется.
- **Git:** не коммитилось.
---
### TASK-2026-022 — Lobby по референсу: дашборд, заглушки и сцена Community
- **Статус:** `[ ]`
- **Создано:** 2026-10-31
- **Анализ:** DeepSeek выполнен (референс Lobby от 2026-10-31, решения ниже)
- **Реализация:** не начата
- **Проверка:** не выполнена
- **Затронутые системы:** `LobbySceneController`, новый `LobbyView` (вместо
`MetaView`), новый `LobbyBackdrop`, новый `BattleEntryOverlay`, меню,
новая сцена `Community` + `CommunitySceneController`/`CommunityView`,
`SceneFlow`, `SceneBuilder`, `SceneSmoke`, `Localization`, EditMode-тесты.
Сервер, правила и протокол не меняются.
#### A. Цель и требования
Привести `Lobby` к композиции референса, но оставить только реально
поддержанные функции; отсутствующие в сервере блоки — честные заглушки
«скоро» без фейковых цифр.
Состав экрана (1920×1080):
1. **Верхняя панель (≈96 px):** аватар (инициалы, ассетов нет), ник,
`RankedMmr`, бейдж сезона-заглушки; справа — «Рейтинг», «Сообщество»,
«Меню».
2. **Левая колонка (≈560 px):** три крупные плашки с иконкой, заголовком и
подписью — `BATTLE`, `DECK BUILDER`, `SHOP`.
3. **Блок миссий** под плашками: заголовок «Ежедневные / еженедельные
задания» и 2–4 строки-заглушки с замком и «скоро». Прогресс и таймер
обновления не рисуются: серверной модели нет.
4. **Балансы** внизу слева: Gold, Dust, Tokens; клик открывает магазин.
5. **Центр:** большая панель `Chat` — заглушка «скоро» с полем ввода в
состоянии disabled.
6. **Справа:** панель `Friends Online` — заглушка: счётчик без данных не
показывать, 3–5 строк-заглушек, «скоро».
7. **Фон:** процедурный тёмный неоновый градиент с сеткой и виньеткой в
стиле Login. 3D-окружение в `Lobby` не строится.
Поведение:
- **BATTLE** открывает модальный оверлей: список колод, режим
`Рейтинговый` / `С ботом`, кнопка «В бой». Без колод или без валидной
колоды кнопка disabled и есть переход «Собрать колоду» в `DeckBuilder`.
Рейтинговый режим уходит в существующую очередь `classic-ranked`
(`Flow.OpenLobbyWithQueueAsync`), «С ботом» — `StartPracticeAsync` и
`LoadBattleAsync`. Серверные контракты не меняются.
- **Rating** — оверлей-заглушка «Рейтинг — скоро». Лидерборд (top-100 по
`RankedMmr`) — отдельная задача с серверным endpoint.
- **Community** — отдельная сцена-каркас с вкладками «Гайды / Колоды /
Тикеты», внутри каждой — заглушка. Реальные гайды, публичные колоды и
отправка тикетов — отдельные задачи с сервером.
- **Меню** — гамбургер: язык RU/EN, версия, адрес сервера, «Выйти»,
«Закрыть»; Esc и клик вне панели закрывают.
- **Онбординг** в Lobby не показывается: ни статуса, ни кнопки. Выбор
стартовой триал-деки остаётся отдельным экраном до Lobby; когда появится
обучение, он будет заменён им.
Ограничения:
- без новых пакетов и без Addressables;
- сервер, правила, протокол и контент не меняются;
- `QueueView`, `StoreView`, `HistoryView`, `DeckBuilder` и `Battle`
сохраняют текущее поведение;
- `Login` не должен измениться визуально при выносе общего меню;
- геймплей и визуальную приёмку проверяет пользователь.
Критерии готовности:
- композиция и стиль совпадают с референсом на 1920×1080, на 16:10 и 21:9
фон заполняет экран, панели не разъезжаются;
- все несерверные блоки визуально помечены «скоро» и не кликабельны;
- BATTLE доводит до очереди или практики без захода в редактор колоды;
- Community открывается как отдельная сцена, вкладки переключаются;
- в Lobby нет упоминаний онбординга;
- существующие EditMode-тесты и смоуки обновлены и проходят.
#### B. Текущее состояние
- `LobbySceneController` строит 3D-окружение (`SceneEnvironment.Build`),
создаёт `MetaView`, `OnboardingView`, `QueueView`, `StoreView`,
`HistoryView`; при `!OnboardingCompleted` показывает онбординг вместо
лобби; «В бой» ведёт в `DeckBuilder`.
- `MetaView` (`Runtime/UI/MetaView.cs`): топбар `VANGUARD` + ник + язык +
«Выйти», 5 статистик (Gold/Dust/Tokens/Ranked/Casual), 4 кнопки
(Коллекция/Магазин/История/В бой), запись, статус, кнопка выбора
триал-деки. Полностью заменяется.
- `QueueView` — только `classic-ranked`; практика запускается из
`DeckBuilderView` («С ботом»).
- Сервер: `UserEntity` хранит `UserName`, `RankedMmr`, `Matches`, `Wins`,
но endpoint лидерборда, миссий, чата, друзей, сезонов и тикетов
отсутствует.
- Аватаров в проекте нет; ассетов фона Lobby нет.
- `SceneSmoke` требует `Vanguard 3D Environment` для `Lobby`; тесты
`ClientSmokeTests` создают `MetaView` напрямую и проверяют `MetaScreen`,
`OnboardingScreen`.
- Общие визуальные атомы — `NeonUi` из `TASK-2026-021`.
Что сохранить:
- `AuthService`, `MetaService`, `PlayerState`, обработку 401 → Login;
- существующие экраны магазина, истории, очереди, реплеев;
- `SceneFlow` как единственный переход между сценами;
- `UiKit`/`NeonUi`, CanvasScaler 1920×1080;
- текущий визуальный язык Login.
#### C. Чек-лист изменений
- [ ] **C1. `CREATE` `Runtime/UI/LobbyBackdrop.cs`** — процедурный фон.
- Вертикальный градиент, сетка/гексы, виньетка, 2–3 неоновые линии;
спрайты кешируются статически, создаются один раз.
- Cover-масштабирование на 16:9/16:10/21:9 без полос; при появлении арта
заменяется одним изображением без правки раскладки.
- Объект называется `LobbyBackdrop` для смоука.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: нет.
- [ ] **C2. `CREATE` `Runtime/UI/LobbyView.cs`** — новый дашборд вместо
`MetaView`.
- Топбар: аватар-инициалы, ник, MMR, сезон-заглушка, «Рейтинг»,
«Сообщество», «Меню».
- Левая колонка: BATTLE / DECK BUILDER / SHOP с иконками и подписями;
блок миссий-заглушка; балансы Gold/Dust/Tokens с переходом в магазин.
- Центр: `Chat`-заглушка; справа: `Friends Online`-заглушка.
- Корневой объект `LobbyScreen`; тексты через `Loc`.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C1, C9.
- [ ] **C3. `MODIFY` `Runtime/App/LobbySceneController.cs`** — сборка Lobby
без 3D и без `MetaView`.
- Убрать `SceneEnvironment.Build(SceneTheme.Lobby)`; создать
`LobbyBackdrop`, `LobbyView`, оверлеи.
- Убрать `ShowOnboarding`/`_onboardingButton` из лобби; оставить переход
на отдельный экран выбора триал-деки при `!OnboardingCompleted`.
- Подключить BATTLE-оверлей, Rating-заглушку, Community → `SceneFlow`.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C2, C4, C5, C6.
- [ ] **C4. `CREATE` `Runtime/UI/BattleEntryOverlay.cs`** — выбор колоды и
режима.
- Загрузка колод `MetaService.GetDecksAsync`, выбор карточкой, режимы
«Рейтинговый» / «С ботом», кнопка «В бой», «Собрать колоду».
- Валидация через `ValidateDeckAsync` перед запуском; ошибки — в панели.
- Ranked → `Flow.OpenLobbyWithQueueAsync`; практика →
`StartPracticeAsync` + `Flow.LoadBattleAsync`.
- Закрытие: крестик, Esc, клик вне панели; фон блокируется.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C2.
- [ ] **C5. `CREATE` сцена `Community`.**
- `Scenes/Community.unity`, `CommunitySceneController`,
`Runtime/UI/CommunityView` с вкладками «Гайды / Колоды / Тикеты» и
заглушками; кнопка «Назад» в Lobby.
- `SceneFlow`: константа `Community` и `LoadCommunityAsync`;
`SceneBuilder`: создание сцены и добавление в Build Settings после
`Lobby`; `SceneSmoke` — проверка экрана `CommunityScreen`.
- Серверных вызовов нет.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C2.
- [ ] **C6. `MODIFY` меню** — общий гамбургер для Login и Lobby.
- Вынести `LoginMenu` в общий `Runtime/UI/HamburgerMenu.cs` (язык,
версия, адрес сервера, закрыть; для Lobby дополнительно «Выйти»).
- `Login` использует его без визуальных изменений; в Lobby «Выйти»
переезжает из топбара в меню.
- Esc и клик вне панели закрывают; вне меню ввод формы не перехватывается.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C2.
- [ ] **C7. `DELETE`/`MODIFY` `Runtime/UI/MetaView.cs`** — удалить после
переноса функций в `LobbyView`.
- Убедиться, что в `MetaView` не осталось уникальной логики (обновление
профиля, 401 → Logout) — она переносится в `LobbyView`.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C2, C3.
- [ ] **C8. `MODIFY` `Editor/SceneSmoke.cs` + `Editor/SceneBuilder.cs`.**
- `Lobby` проверяется по `LobbyBackdrop` и `LobbyScreen`; 3D-окружение
больше не требуется.
- Для `Community` — отдельная проверка по состоянию; при необходимости
расширить смоук на несколько сцен.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C2, C5.
- [ ] **C9. `MODIFY` `Runtime/UI/Localization.cs`** — новые ключи.
- BATTLE / DECK BUILDER / SHOP и подписи, «Рейтинг», «Сообщество»,
«Меню», «Задания», «Чат», «Друзья онлайн», «скоро», «Режим»,
«Рейтинговый», «С ботом», «Собрать колоду», «Выйти», вкладки Community.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C2, C4, C5, C6.
- [ ] **C10. `TEST` EditMode.**
- `LobbyView`: топбар, три плашки, балансы, заглушки disabled и с
пометкой «скоро»; в Lobby нет текста/кнопки онбординга.
- `BattleEntryOverlay`: список колод, disabled без валидной колоды,
закрытие по Esc, выбор режима.
- `CommunityView`: переключение вкладок, «Назад».
- `SceneSmoke`: `Lobby` без 3D, `Community` открывается.
- Существующие тесты `ClientSmokeTests` (создание `MetaView`) переписать
под `LobbyView`.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C1–C9.
- [ ] **C11. `VERIFY` EditMode, smoke, standalone.**
- Копия проекта без `Library`; `SceneSmoke.Run`, `RunPlaymat`;
standalone-сборка.
- Ручная сверка с референсом — пользователь.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C10.
#### D. Последовательность выполнения
1. C1 → C2: фон и раскладка дашборда; проверить 16:9/16:10/21:9.
2. C6: общее меню; убедиться, что Login не изменился.
3. C3 → C4: контроллер Lobby, убрать 3D/онбординг, BATTLE-оверлей.
4. C5: сцена Community и переход.
5. C7 → C9: удаление `MetaView`, смоук, локализация.
6. C10 → C11: тесты, smoke, standalone, ручная приёмка.
#### E. Проверки
- Клиентские EditMode в копии без `Library`.
- `SceneSmoke.Run` (Login/Lobby), проверка `Community`.
- `SceneSmoke.RunPlaymat` — поле не должно пострадать.
- Standalone-сборка и запуск на 1920×1080; при возможности 16:10, 21:9.
- `git diff --check`; отсутствие изменений в `server/`, `content/`,
`Vanguard.Rules`/`Shared`.
- Ручная проверка: BATTLE → очередь/бот, магазин, история, коллекция,
Community, меню, Esc, отсутствие онбординга в Lobby.
#### F. Решения и риски
**Зафиксировано пользователем (2026-10-31):**
1. Блоки без сервера (миссии, чат, друзья, сезон, рейтинг) — заглушки
«скоро».
2. Центральный 3D-блок убрать, область отдать большой панели чата.
3. Rating — в будущем топ игроков по рейтингу; сейчас заглушка.
4. Community — отдельная сцена: гайды, колоды, тикеты; первая версия —
каркас с заглушками.
5. BATTLE — оверлей выбора колоды и режима.
6. Онбординг в Lobby не показывать; выбор триал-деки остаётся отдельным
экраном до появления обучения.
7. Фон Lobby — процедурный, арт позже.
**Риски:**
- **Пустая область чата:** большая заглушка может выглядеть как дыра; нужен
аккуратный placeholder (иконка, пояснение, «скоро»), иначе экран
проигрывает референсу.
- **Процедурный фон** без арта будет плоским; заменить на key art, когда
появится, без правки раскладки.
- **Аватаров нет** — инициалы; при появлении загрузки аватаров заменить.
- **Удаление `MetaView`** затрагивает `ClientSmokeTests` и `SceneSmoke`;
менять их в том же блоке.
- **Новая сцена** требует `SceneBuilder` и Build Settings; иначе
`LoadSceneAsync` вернёт ошибку.
- **Онбординг новых аккаунтов:** выбор триал-деки нельзя потерять, иначе
новый игрок останется без колоды.
- **Общее меню** не должно менять поведение Login (Tab/Enter/Esc).
- **BATTLE-оверлей** не должен блокировать бой из-за пустой коллекции:
причина disabled должна быть видимой.
**Открытых вопросов, блокирующих старт, нет.**
#### G. Результат
- **Реализовано:** —
- **Проверки:** —
- **Не завершено/заблокировано:** —
- **Skill обновлён:** —
- **Git:** —

View File

@ -363,8 +363,9 @@ client/Assets/Plugins/Vanguard.Shared + MessagePack
1. **TASK-2026-021 — Login по референсу: реализован, ждёт ручной приёмки**
(C10). EditMode 60/60, `SCENE_SMOKE success=True`, standalone собран.
Далее по плану — **TASK-2026-019** (загрузочная сцена, fade, кадр без
покадровых аллокаций).
**TASK-2026-022 — Lobby по референсу: анализ и план готовы**, реализация
ожидает решения пользователя. После неё — **TASK-2026-019**
(загрузочная сцена, fade, кадр без покадровых аллокаций).
2. **TASK-2026-001 — ручная проверка пользователем** (C10): draw, call, ride,
move/swap, guard, trigger, drive/damage, retire, search, открытие скрытого
урона, рука противника, повторные клики UI во время/после анимации.

View File

@ -12,10 +12,16 @@
2. **Lobby** — лобби, профиль, выбор режима, очередь, магазин/история;
3. **DeckBuilder** — коллекция и конструктор колоды в одной сцене;
4. **Battle** — боевой стол.
- **Исключения (решения 2026-10-31):** `Login` — 2D key art, `Lobby` —
2D дашборд по референсу; 3D-окружение в этих сценах не строится. Правило
«3D» остаётся для `DeckBuilder` и `Battle`.
- **Community** — отдельная сцена (гайды, колоды, тикеты), добавлена в
план `TASK-2026-022`; пока каркас с заглушками.
- **Boot** — служебная сцена: поднимает `VanguardApp`, DI-контейнер,
сервисы, сеть, аудио и локализацию. Пользователю не показывается.
- Очередь, онбординг и настройки — **оверлеи внутри Lobby**, отдельными
сценами не являются.
- Очередь и настройки — **оверлеи внутри Lobby**, отдельными сценами не
являются. Выбор стартовой триал-деки — отдельный экран до Lobby; в самом
Lobby онбординг не показывается (заменится обучением).
- В Unity «отдельные окна» означают **отдельные сцены-экраны** внутри
одного окна приложения, а не несколько OS-окон.
@ -45,7 +51,7 @@
Уже перенесено:
- `LoginView` → сцена **Login** (3D-фон/стол, форма поверх);
- `LoginView` → сцена **Login** (2D key art, форма поверх);
- `MetaView`/`OnboardingView`/`QueueView` → сцена **Lobby**;
- `DeckBuilderView` → сцена **DeckBuilder** (коллекция + редактор колоды);
- `BattleView` → сцена **Battle**.