docs: план DeckBuilder по референсу (TASK-2026-024)
CI / test (push) Successful in 1m52s Details

- Решения: топбар Lobby с неактивными Rating/Community и «В лобби» в
  меню; без вкладок; крупные карты со скроллом; просмотр только ПКМ,
  добавление — только в режиме колоды; количество «есть / в колоде»;
  всё фильтры в оверлее, включая редкость C/R/RR/RRR/SP и поиск.
- Чек-лист C1-C10: PlayerTopBar, сетка, режимы, список колод с эмблемами
  и кебаб-меню, фильтры, тесты и проверки.
This commit is contained in:
MpakobecEx 2026-11-01 00:27:38 +05:00
parent ecb7314bb6
commit f22a24e5ad
2 changed files with 231 additions and 3 deletions

View File

@ -44,6 +44,7 @@
| 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: C1–C11 реализованы; ждёт ручной приёмки | EditMode 62/62; `SCENE_SMOKE`, `PLAYMAT_SMOKE`, standalone; ручная — пользователь |
| TASK-2026-023 | `[!]` | DeckBuilder: один экран, мультифильтры и список колоды | DeepSeek: C1–C11 реализованы; ждёт ручной приёмки | EditMode 67/67; `SCENE_SMOKE`, `PLAYMAT_SMOKE`; ручная — пользователь |
| TASK-2026-024 | `[ ]` | DeckBuilder по референсу: топбар Lobby, крупные карты, фильтры | DeepSeek: анализ и план готовы; реализация ожидает | не выполнена |
Новые задачи добавляются в конец файла отдельными разделами. Не используй один
раздел для нескольких независимых задач.
@ -2563,8 +2564,233 @@ HUD с номером хода и фазовой шкалой, компактн
- **Замечания:** граница иллюстрации 0.59 подобрана по BT01/TD01
(350×511); при другом макете карты константу нужно проверить. Правка
имени колоды помечает колоду как несохранённую.
- **Продолжение:** визуальная компоновка переработана по референсу в
`TASK-2026-024` (топбар Lobby, крупные карты, фильтры в оверлее).
Логика фильтров, группировки и валидации переиспользуется.
- **Skill обновлён:** не требуется.
- **Git:** не коммитилось.
- **Git:** `ecb7314`.
---
### TASK-2026-024 — DeckBuilder по референсу: топбар Lobby, крупные карты, фильтры
- **Статус:** `[ ]`
- **Создано:** 2026-11-01
- **Анализ:** DeepSeek выполнен (референс DeckBuilder от 2026-11-01)
- **Реализация:** не начата
- **Проверка:** не выполнена
- **Затронутые системы:** `LobbyView`, новый `PlayerTopBar`,
`HamburgerMenu`, `DeckBuilderView`, `DeckBuilderSceneController`,
`CardImageService`, `DeckListFilter`, `Localization`, EditMode-тесты.
Сервер, правила и контент не меняются.
#### A. Цель и требования
Привести DeckBuilder к композиции референса, сохранив логику
`TASK-2026-023` (фильтры, группировка, live-валидация):
1. **Топбар как в Lobby**: аватар, ник, MMR, сезон, `Rating` и `Community`
неактивны, `Menu` — язык, версия, адрес сервера, история, «В лобби»,
«Выйти».
2. **Без вкладок** Collection/Deck Builder — это элемент референса, не
функция.
3. **Коллекция — крупные карты со скроллом** (6 в ряд): номер грейда,
иллюстрация, плашка имени поверх, строка количества, камень редкости.
Пагинации нет.
4. **Режим просмотра:** карты коллекции только смотрят, крафтят и
разбирают; ЛКМ по карте ничего не делает, ПКМ открывает карточку.
В этом режиме под картой — «есть ×N».
5. **Режим колоды:** при выборе колоды справа появляется её состав,
добавление/удаление включается; ЛКМ по карте коллекции добавляет
копию, ПКМ — карточка. Под картой — «в колоде ×N · есть ×M».
6. **Список колод**: кнопка `+ Новый набор`, строки с эмблемой клана,
именем, `N/50` и `T N/16`, кебаб-меню (открыть/удалить), подсветка
выбранной.
7. **Фильтры — в модальном оверлее:** мультивыбор клана, грейда,
триггера и **редкости (C/R/RR/RRR/SP)**, плюс поиск по названию;
«Сбросить», «Отмена», «Применить», сводка в шапке.
8. Визуальный язык — неоновые панели/свечение/фаски из `NeonUi`, как в
Login и Lobby.
Ограничения:
- сервер, правила, протокол и контент не меняются;
- 3D-окружение сцены DeckBuilder не трогаем;
- сохранение/создание/удаление/крафт/разбор сохраняют поведение;
- Lobby не должен визуально измениться после выноса топбара;
- ручная приёмка — пользователь.
Критерии готовности:
- DeckBuilder открывается с топбаром Lobby и меню, «В лобби» работает;
- в режиме просмотра клик по карте не добавляет её в колоду;
- после выбора колоды справа состав, ЛКМ добавляет, клик по строке
состава убирает;
- крупные карты не растянуты, имя и количество читаются, скролл плавный;
- мультифильтры + редкость + поиск реально фильтруют и отражаются в
сводке;
- EditMode и смоуки проходят.
#### B. Текущее состояние
- `DeckBuilderView` (`ecb7314`) — один экран со своим топбаром (назад,
заголовок, сводка, фильтры, сброс), коллекция 174×238 с
`ApplyIllustration`, правая панель 380 px со списком колод и составом.
- Клик по карте коллекции всегда добавляет копию (в обоих режимах).
- Фильтры — модальный оверлей без редкости и поиска.
- Топбар Lobby реализован внутри `LobbyView` (`TopBar`, `AddTopAction`),
меню — `HamburgerMenu`.
- `LobbyView` показывает аватар-инициалы, ник, MMR, сезон, Rating,
Community и гамбургер.
- `DeckBuilderSceneController` резолвит только `MetaService`/`AuthService`.
Что сохранить:
- `DeckListModel`/`DeckFilter`/`DeckValidation` и тесты;
- `CardImageService.ApplyIllustration`;
- правую панель со списком колод/составом и live-валидацию;
- крафт/разбор и ПКМ-карточку;
- Lobby: расположение и поведение элементов после выноса топбара.
#### C. Чек-лист изменений
- [ ] **C1. `CREATE` `Runtime/UI/PlayerTopBar.cs`; `MODIFY`
`LobbyView.cs`.**
- Вынести из `LobbyView` топбар: аватар, ник, MMR, сезон, две кнопки,
гамбургер; подписка на `PlayerState`; меню `HamburgerMenu`.
- Конструктор принимает `onRating`, `onCommunity`, `onHistory`,
`onLobby`, `onLogout`; `null` для действия = кнопка disabled.
- `LobbyView` использует компонент без визуальных изменений.
- `HamburgerMenu`: пункт «В лобби» при `onLobby != null`.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: нет.
- [ ] **C2. `MODIFY` `Runtime/App/DeckBuilderSceneController.cs`.**
- Резолвить `PlayerState`/`AppConfig`; создать `PlayerTopBar` с
`onRating: null`, `onCommunity: null`, «В лобби» → Lobby.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C1.
- [ ] **C3. `MODIFY` `DeckBuilderView` — каркас.**
- Убрать собственный топбар; тело начинается под `PlayerTopBar`.
- Сохранить панели `DeckListPanel`/`DeckPanel`, статус под коллекцией.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C1, C2.
- [ ] **C4. `MODIFY` сетка коллекции.**
- `GridLayoutGroup` 6 колонок, ячейка ≈216×286, вертикальный скролл без
пагинации.
- Ячейка: иллюстрация `ApplyIllustration` (216×182), номер грейда в
углу, плашка имени поверх низа иллюстрации, строка количества,
камень редкости.
- ЛКМ в просмотре ничего не делает; ПКМ — карточка; в режиме колоды
ЛКМ добавляет, ПКМ — карточка.
- Количество: «есть ×N» / «в колоде ×N · есть ×M».
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C3, C5.
- [ ] **C5. `MODIFY` режимы просмотра и колоды.**
- `_editing == null` — просмотр: панель колод, добавление выключено;
нажатие на колоду открывает состав и включает добавление.
- «К списку колод» возвращает просмотр (несохранённые изменения
отбрасываются; предупреждение — отдельный пункт при необходимости).
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C3.
- [ ] **C6. `MODIFY` список колод по референсу.**
- Кнопка `+ Новый набор` (полная ширина).
- Строка: эмблема клана (процедурная, цвет клана), имя, `N/50 ·
T N/16`, бейдж валидности точкой/цветом; кебаб-меню «Открыть /
Удалить».
- Подсветка открытой колоды.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C3.
- [ ] **C7. `MODIFY` фильтры.**
- `DeckFilter`: добавить `Rarities` (C/R/RR/RRR/SP) и `Search`.
- Оверлей: поиск, чипы редкости, клан/грейд/триггер; «Сбросить»,
«Отмена», «Применить»; сводка включает редкость и поиск.
- `DeckListModel`/`DeckFilter` остаются чистыми и тестируемыми.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C3.
- [ ] **C8. `MODIFY` `Localization.cs`** — «В лобби», «Новый набор»,
«Поиск по названию», «Редкость», «есть», «в колоде», «Открыть»,
«Ещё», названия редкостей.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C4–C7.
- [ ] **C9. `TEST` EditMode.**
- `DeckFilter`: редкость и поиск (регистр, локализованное имя).
- `PlayerTopBar`: создаётся, ник/MMR обновляются, disabled-кнопки при
`null`-действиях.
- UI: `DeckBuilderScreen`, панели, отсутствие добавления в просмотре
(seam), переключение в режим колоды.
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C1–C8.
- [ ] **C10. `VERIFY` EditMode, smoke, standalone.**
- Копия без `Library`; EditMode; `SCENE_SMOKE`; `PLAYMAT_SMOKE`;
standalone.
- Ручная проверка: топбар и меню, крупные карты, скролл, фильтры и
поиск, режимы, добавление/удаление, сохранение, «В бой»/«С ботом».
- Реализация: не выполнена. Проверка: не выполнена.
- Зависит: C9.
#### D. Последовательность выполнения
1. C1: `PlayerTopBar` и меню; проверить, что Lobby не изменился.
2. C2–C3: DeckBuilder с топбаром Lobby.
3. C4–C5: крупная сетка и режимы просмотра/колоды.
4. C6: список колод по референсу.
5. C7–C8: фильтры, поиск, локализация.
6. C9–C10: тесты, смоуки, standalone, ручная приёмка.
#### E. Проверки
- EditMode в копии без `Library`.
- `SceneSmoke.Run`, `RunPlaymat`, standalone.
- Проверка Lobby после выноса топбара (визуально и смоуком).
- `git diff --check`; нет изменений в `server/`, `content/`,
`Vanguard.Rules`.
- Ручная приёмка — пользователь.
#### F. Решения и риски
**Зафиксировано пользователем (2026-11-01):**
1. Топбар как в Lobby; `Rating`/`Community` неактивны; «В лобби» — в меню.
2. Вкладки Collection/Deck Builder не реализуем.
3. Коллекция — крупные карты, вертикальный скролл, без пагинации.
4. Просмотр: ЛКМ не добавляет, ПКМ открывает карточку.
5. В режиме колоды справа состав, ЛКМ добавляет, клик по строке убирает.
6. Количество: «есть ×N» / «в колоде ×N · есть ×M».
7. Фильтры — всё в оверлее, включая редкость C/R/RR/RRR/SP и поиск.
**Риски:**
- **Вынос топбара** затрагивает принятый Lobby: менять аккуратно,
проверять смоук и раскладку.
- **ПКМ-only в просмотре** может быть неочевидным: нужна подсказка
«ПКМ — подробности» в статусе/шапке коллекции.
- **Несохранённые изменения** при возврате к списку теряются; при
необходимости добавить подтверждение отдельным пунктом.
- **Крупные ячейки** уменьшают число видимых карт: скролл должен быть
плавным, без пересоздания пула на каждый кадр.
- **Кебаб-меню** требует отдельного маленького оверлея; не дублировать
существующие меню.
- **Редкости SP** в каталоге есть; если у принтов встретится другая
строка, чип не совпадёт — показывать как есть.
**Открытых вопросов, блокирующих старт, нет.**
#### G. Результат
- **Реализовано:** —
- **Проверки:** —
- **Не завершено/заблокировано:** —
- **Skill обновлён:** —
- **Git:** —

View File

@ -378,8 +378,10 @@ client/Assets/Plugins/Vanguard.Shared + MessagePack
собраны и запущены. **TASK-2026-023 — DeckBuilder (один экран,
мультифильтры, список колоды): реализован C1–C11, ждёт ручной
приёмки.** EditMode 67/67, `SCENE_SMOKE`, `PLAYMAT_SMOKE`; standalone.
После приёмки — **TASK-2026-019** (загрузочная сцена, fade, кадр без
покадровых аллокаций).
**TASK-2026-024 — DeckBuilder по референсу (топбар Lobby, крупные
карты, фильтры в оверлее): план готов**, реализация — следующим
проходом. После приёмки — **TASK-2026-019** (загрузочная сцена, fade,
кадр без покадровых аллокаций).
2. **TASK-2026-001 — ручная проверка пользователем** (C10): draw, call, ride,
move/swap, guard, trigger, drive/damage, retire, search, открытие скрытого
урона, рука противника, повторные клики UI во время/после анимации.