VanguardReMaster/client/README.md

124 lines
6.5 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.

# 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**, **Collection**, **DeckBuilder**, **Battle**.
`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, опрос статуса, отмена, тикет и переход в бой.
- `GameConnection`: WebSocket + MessagePack, handshake, snapshot/events,
интенты, ответы на ping, закрытие и переподключение.
- Боевой gray-box: доска, рука, часы, кнопки всех легальных интентов,
сдача с подтверждением и экран результата.
- Экран входа и главный экран с балансами, MMR и переходами в разделы.
## Что дальше
1. Довести боевой UI: арты карт, зоны, анимации, скип/ускорение.
2. Реконнект на всех шагах и аккуратная обработка таймаутов.
3. Декбилдер: drag&drop, live-валидация, редкость/тип/арт, пресеты.
4. Локализация RU/EN, настройки, 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 пока не добавлен; анимации UI — после перехода на сцены.
- Мета-экраны — заглушки: сеть и авторизация настоящие, разделы следующие.
- Бой — gray-box: карты показываются по `printingId`, без артов и анимаций;
действия — кнопки всех `MatchView.LegalIntents`.
- `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,
экранов и 3D-окружения.