VanguardReMaster/docs/client-visual-direction.md

63 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Клиент: визуальное направление
**Статус:** зафиксировано 2026-10-21. Это решение для клиента Unity;
серверные контракты и `Vanguard.Rules` не меняются.
## Решение
- Клиент делаем в **3D** (Unity 6, URP), а не как плоский 2D-интерфейс.
- Основные экраны — **отдельные сцены**, каждая со своим 3D-окружением,
камерой, светом и UI-слоем:
1. **Login** — вход/регистрация;
2. **Lobby** — лобби, профиль, выбор режима, очередь, магазин/история;
3. **Collection** — коллекция карт;
4. **DeckBuilder** — конструктор колоды;
5. **Battle** — боевой стол.
- **Boot** — служебная сцена: поднимает `VanguardApp`, DI-контейнер,
сервисы, сеть, аудио и локализацию. Пользователю не показывается.
- Очередь, онбординг и настройки — **оверлеи внутри Lobby**, отдельными
сценами не являются.
- В Unity «отдельные окна» означают **отдельные сцены-экраны** внутри
одного окна приложения, а не несколько OS-окон.
## Что остаётся общим
Между сценами живут и не пересоздаются:
- `VanguardApp` + VContainer;
- `ApiClient`, `AuthService`, `MetaService`, `TokenStore`, `PlayerState`;
- `GameConnection` и боевое состояние;
- аудио, локализация, Addressables, настройки;
- `SceneFlow` — единая точка переходов между сценами.
Сцены отвечают за 3D-презентацию и свой UI. Сервисы не должны зависеть от
конкретной сцены.
## План миграции с текущего gray-box
Сейчас работает один runtime-Canvas (`AppRootView`) со всеми экранами —
это функциональный каркас. Его сохраняем как основу логики и постепенно
разносим:
- `LoginView` → сцена **Login** (3D-фон/стол, форма поверх);
- `MetaView` → сцена **Lobby** (3D-холл, панель профиля и входы в разделы);
- `CollectionView` → сцена **Collection** (3D-витрина/альбом карт);
- `DecksView` + будущий декбилдер → сцена **DeckBuilder** (3D-стол,
стопка колоды, карты, фильтры);
- `QueueView` → оверлей в **Lobby**;
- `BattleView` → сцена **Battle** (3D-стол, зоны, карты, камера, UI рук и
таймера).
Сетевые и доменные классы (`GameConnection`, `ApiClient`, `MetaService`)
переносятся без изменения контрактов. Сцены подключаются через
`SceneFlow`; `Boot` остаётся загруженной/персистентной.
## Ограничения и следующие шаги
- Пока нет 3D-ассетов: карты в gray-box показываются по `printingId`.
Арт и 3D-модели будут подключаться по `cardId` через Addressables.
- Ближайший визуальный шаг — создать пустые сцены Login/Lobby/Collection/
DeckBuilder/Battle, добавить `SceneFlow` и перенести Login/Lobby.
- Боевые анимации, камера и 3D-карты — после стабилизации сетевого
протокола и базового UI.