87 lines
6.2 KiB
Markdown
87 lines
6.2 KiB
Markdown
# Клиент: визуальное направление
|
||
|
||
**Статус:** зафиксировано 2026-10-21. Это решение для клиента Unity;
|
||
серверные контракты и `Vanguard.Rules` не меняются.
|
||
|
||
## Решение
|
||
|
||
- Клиент делаем в **3D** (Unity 6, URP), а не как плоский 2D-интерфейс.
|
||
- Основные экраны — **отдельные сцены**, каждая со своим 3D-окружением,
|
||
камерой, светом и UI-слоем:
|
||
1. **Login** — вход/регистрация;
|
||
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 онбординг не показывается (заменится обучением).
|
||
- В Unity «отдельные окна» означают **отдельные сцены-экраны** внутри
|
||
одного окна приложения, а не несколько OS-окон.
|
||
|
||
## Что остаётся общим
|
||
|
||
Между сценами живут и не пересоздаются:
|
||
|
||
- `VanguardApp` + VContainer;
|
||
- `ApiClient`, `AuthService`, `MetaService`, `TokenStore`, `PlayerState`;
|
||
- `GameConnection` и боевое состояние;
|
||
- аудио, локализация, Addressables, настройки;
|
||
- `SceneFlow` — единая точка переходов между сценами.
|
||
|
||
Сцены отвечают за 3D-презентацию и свой UI. Сервисы не должны зависеть от
|
||
конкретной сцены.
|
||
|
||
## Статус миграции
|
||
|
||
Сцены `Login`, `Lobby`, `DeckBuilder`, `Battle` созданы;
|
||
`VanguardApp` и общие сервисы персистентны, `SceneFlow` загружает сцены.
|
||
Сейчас 3D-окружение собрано из примитивов, UI — uGUI; статические части
|
||
боевых overlay-экранов вынесены в `Resources/Overlays/*.prefab`, остальные
|
||
панели пока code-generated. Боевое поле уже 3D: `GameBoard3D` строит стол,
|
||
круги, руку и стопки, поддерживает drag&drop, Rest/фейс-даун и ограниченную
|
||
камеру. Песочница — `Assets/Vanguard/Scenes/GameBoard3D.unity`.
|
||
Дальше: 3D-модели карт/стола, prefab-экраны сцен, анимации и наполнение сцен.
|
||
|
||
Уже перенесено:
|
||
|
||
- `LoginView` → сцена **Login** (2D key art, форма поверх);
|
||
- `MetaView`/`OnboardingView`/`QueueView` → сцена **Lobby**;
|
||
- `DeckBuilderView` → сцена **DeckBuilder** (коллекция + редактор колоды);
|
||
- `BattleView` → сцена **Battle**.
|
||
|
||
Сетевые и доменные классы (`GameConnection`, `ApiClient`, `MetaService`)
|
||
перенесены без изменения контрактов. `Boot` остаётся стартовой сценой,
|
||
`VanguardApp` — персистентным composition root.
|
||
|
||
## Взаимодействие
|
||
|
||
- Выбор объектов — только интерактивом по сцене: карта, круг, зона, поле.
|
||
Не показываем список кнопок «выбрать карту/круг» вместо клика по объекту.
|
||
- Кнопки остаются для глобальных действий и подтверждений (завершить ход,
|
||
сдаться, отмена, принять/пропустить опциональную способность).
|
||
- Информационные оверлеи только объясняют, что требуется; они не
|
||
перехватывают клики и не дублируют выбор кнопками.
|
||
- `ActionPrompt` в бою — информационный слой; подсветка на 3D-поле
|
||
показывает доступные карты/круги/зоны.
|
||
- Верхний `CombatStats` strip — допустимый HUD (решение 2026-10-24);
|
||
world-space Power/Shield — отдельный отложенный шаг.
|
||
- Для multi-target стоимости требуется отдельный `CostPaymentOverlay`;
|
||
выбор в панели «Действия» — промежуточная реализация.
|
||
|
||
## Ограничения и следующие шаги
|
||
|
||
- Пока нет 3D-ассетов: карты показываются процедурными градиентными
|
||
артами по клану и рубашкой (имя/ранг/триггер/сила). Арт и 3D-модели
|
||
будут подключаться по `cardId` через Addressables.
|
||
- Ближайший визуальный шаг — наполнить сцены моделями/артом и перевести
|
||
UI на prefab-экраны; логика и `SceneFlow` уже готовы.
|
||
- Боевые анимации, камера и 3D-карты — после стабилизации сетевого
|
||
протокола и базового UI.
|