# Клиент: визуальное направление **Статус:** зафиксировано 2026-10-21. Это решение для клиента Unity; серверные контракты и `Vanguard.Rules` не меняются. ## Решение - Клиент делаем в **3D** (Unity 6, URP), а не как плоский 2D-интерфейс. - Основные экраны — **отдельные сцены**, каждая со своим 3D-окружением, камерой, светом и UI-слоем: 1. **Login** — вход/регистрация; 2. **Lobby** — лобби, профиль, выбор режима, очередь, магазин/история; 3. **DeckBuilder** — коллекция и конструктор колоды в одной сцене; 4. **Battle** — боевой стол. - **Boot** — служебная сцена: поднимает `VanguardApp`, DI-контейнер, сервисы, сеть, аудио и локализацию. Пользователю не показывается. - Очередь, онбординг и настройки — **оверлеи внутри 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** (3D-фон/стол, форма поверх); - `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.