VanguardReMaster/client/README.md

143 lines
8.4 KiB
Markdown
Raw Permalink 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.

# Vanguard ReMaster — Unity client
Клиент на **Unity 6000.6.6f1** (Unity 6), URP. Пока это каркас:
авторизация, восстановление сессии и главный экран профиля.
## Как открыть
1. Unity Hub → **Add project from disk** → папка `client`.
2. Открыть проект редактором **6000.6.6f1**.
3. Первый импорт скачает пакеты (URP, Input System, Addressables,
Localization, Newtonsoft.Json, VContainer с OpenUPM).
4. Открыть `Assets/Scenes/Boot.unity` и нажать Play.
Если Unity предложит включить новый Input System — согласиться (в проекте
уже `activeInputHandler: 1`).
## Сервер
В форме входа по умолчанию стоит стенд:
```
http://192.168.31.158:18080
```
Адрес можно изменить прямо в поле и сохранить: он пишется в `PlayerPrefs`.
Локальный сервер:
```
http://localhost:5080
```
Аккаунт создаётся кнопкой «Создать аккаунт»; имя 3–32 символа, пароль
8–128. Пароль от реального аккаунта в dev-клиенте не использовать.
## Визуальное направление
Клиент делаем в **3D** на URP. Основные экраны — отдельные сцены:
**Login**, **Lobby**, **DeckBuilder**, **Battle**.
`DeckBuilder` совмещает коллекцию и редактор колоды. `Boot` — служебная
сцена с общими сервисами; очередь и онбординг — оверлеи Lobby. Текущий единый Canvas — временный gray-box, его разносим
по сценам. Полное решение — `docs/client-visual-direction.md`.
## Что уже есть
- `ClientBootstrap` — запуск без привязки к сцене.
- DI на VContainer: `AppConfig`, `TokenStore`, `ApiClient`, `AuthService`,
`MetaService`, `PlayerState`, `SceneFlow`.
- HTTP-клиент на `UnityWebRequest` + Newtonsoft.Json, разбор `ApiError`.
- Логин, регистрация, refresh, `/me`, выход.
- Восстановление сессии по refresh-токену при старте.
- Онбординг: две триал-деки из `/api/store`, выбор одной, 50 карт и 5 токенов.
- Коллекция и колоды: карточная сетка, сортировка клан→ранг→имя,
фильтры, статистика по рангам, добавление/удаление карт кликом.
- ПКМ по карте — оверлей с картой, способностями, разбором в пыль и
крафтом за пыль.
- Магазин в Lobby: бустер за Gold/токен, показ 5 карт, покупка второй
триал-деки.
- История матчей: список результатов, награды, MMR; просмотр реплея по
кадрам и событиям.
- Очередь: classic-ranked, опрос статуса, отмена, тикет и переход в бой.
- Тренировка с ботом: casual-матч против серверного случайного бота,
без истории/MMR/наград.
- `GameConnection`: WebSocket + MessagePack, handshake, snapshot/events,
интенты, ответы на ping, закрытие и переподключение.
- Боевой экран: доска, рука, часы, кнопки всех легальных интентов,
сдача с подтверждением и экран результата.
- Боевой UX: клик по картам/зонам, подсветка целей, сгруппированные
действия, выбор силы/эффекта триггера, журнал событий и подсказки;
event-анимации с очередью и скипом.
- Карты в бою и коллекции: реальные арты, рамка по клану, имя, ранг,
триггер, сила/крит, REST поворотом на бок и рубашка для скрытых карт;
call/ride-въезд, пульс атаки и призрак ухода в дроп.
- Зона урона: видимые карты на боку; heal выбирает карту урона, Counter
Blast принимает выбранную открытую карту. Маллиган — выбор карт в руке
с обменом и добиром до пяти. Карты V/R и круга защиты открыты, в защите
показывается ряд карт.
- Реальные арты: `CardImageService` ищет `Resources/CardArt/{imageKey}`;
`imageKey` приходит из `/api/cards`. Скачаны все **124** арта;
импорт — `tools/import_card_art.py`.
- Локализация RU/EN: `Localization.cs` (`Loc` + `LocalizedText`),
переключатель в Login/Lobby, сохранение в `PlayerPrefs`; имена и тексты
карт берутся из `nameRu/nameEn` и `textRu/textEn`.
- Экран входа и главный экран с балансами, MMR и переходами в разделы.
## Что дальше
1. Drive/damage-анимации карт и стола, звук, ускорение/скип.
2. Реконнект на всех шагах и аккуратная обработка таймаутов.
3. Декбилдер: drag&drop, live-валидация, редкость/тип/арт, пресеты.
4. Настройки (язык уже есть), DOTween-анимации.
## Плагины
`Assets/Plugins/Vanguard.Shared` — сборка `Vanguard.Shared` из
`server/src/Vanguard.Shared` (netstandard2.1). В ней DTO протокола,
MessagePack-сериализатор и юнион-кадры.
`Assets/Plugins/MessagePack` — MessagePack 3.1.12 и его runtime-зависимости
(netstandard2.1), MIT.
При изменении протокола пересобрать `Vanguard.Shared` на серверной стороне
и заменить DLL в `Assets/Plugins/Vanguard.Shared`.
## Ограничения каркаса
- Для dev-стенда включён HTTP: Project Settings → Player → **Allow downloads
over HTTP = Always** (`insecureHttpOption: 2`). Для релиза нужен HTTPS и
это значение вернуть в «Not allowed».
- Токены лежат в `PlayerPrefs` — только для разработки; для релиза нужно
защищённое хранилище.
- Текущий UI собран кодом на uGUI; каждая сцена имеет свой Canvas.
Префабы/UI Toolkit подключим, когда появятся макеты.
- DOTween пока не добавлен; текущие анимации карт — собственные корутины/тики.
- Мета-экраны — заглушки: сеть и авторизация настоящие, разделы следующие.
- В бою нет звука и отдельных drive/damage-анимаций; остальное работает.
- `GameConnection` использует `System.Net.WebSockets.ClientWebSocket`
(Windows/десктоп first). Для WebGL понадобится другой транспорт или
нативный WebSocket-плагин.
## Проверки
EditMode:
```powershell
& 'C:\Program Files\Unity\Hub\Editor\6000.6.6f1\Editor\Unity.exe' `
-batchmode -nographics -projectPath client `
-runTests -testPlatform EditMode `
-testResults client\TestResults.xml
```
Smoke сцен (входит в Play Mode, открывает Boot → Login, проверяет 3D-фон
и экран):
```powershell
& 'C:\Program Files\Unity\Hub\Editor\6000.6.6f1\Editor\Unity.exe' `
-batchmode -nographics -projectPath client `
-executeMethod Vanguard.Editor.SceneSmoke.Run
```
Тесты не ходят в сеть: проверяются composition root, создание Canvas,
экранов, импорт арта, локализация (статические строки, динамика,
live-переключение) и рендер боевой доски с уроном/rest. Сейчас **4/4**.