diff --git a/docs/Development/CLIENT-SCENES-3D-ANIMATIONS.md b/docs/Development/CLIENT-SCENES-3D-ANIMATIONS.md index 02314e6..bb3a49c 100644 --- a/docs/Development/CLIENT-SCENES-3D-ANIMATIONS.md +++ b/docs/Development/CLIENT-SCENES-3D-ANIMATIONS.md @@ -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`, поле из панели убирается. diff --git a/docs/Development/IMPLEMENTATION_PLAN.md b/docs/Development/IMPLEMENTATION_PLAN.md index 5847d73..d748810 100644 --- a/docs/Development/IMPLEMENTATION_PLAN.md +++ b/docs/Development/IMPLEMENTATION_PLAN.md @@ -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:** — + diff --git a/docs/SESSION-STATE.md b/docs/SESSION-STATE.md index 7527b17..09e8052 100644 --- a/docs/SESSION-STATE.md +++ b/docs/SESSION-STATE.md @@ -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 во время/после анимации. diff --git a/docs/client-visual-direction.md b/docs/client-visual-direction.md index 64ca9e9..f1bb40e 100644 --- a/docs/client-visual-direction.md +++ b/docs/client-visual-direction.md @@ -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**.