VanguardReMaster/docs/SESSION-STATE.md

144 lines
7.3 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 — состояние сессии
**Дата:** 2026-10-21
**HEAD:** см. `git log -1`
**Коротко:** сервер готов, клиент — рабочий каркас с 3D-сценами.
## Правила работы
- Ответы короткие, без повторов и длинных вступлений — экономия токенов.
- Любое сомнение/вопрос — диалог: 2–4 варианта с рекомендацией, выбор за
пользователем (или его свободный ответ). Не угадывать.
- Полный свод правил — `AGENTS.md`.
## Сервер
- .NET 10 / ASP.NET Core, EF Core, PostgreSQL, Redis, опциональный Orleans.
- Реализовано: auth/JWT, онбординг, коллекция, колоды, магазин, экономика,
матчмейкинг, WebSocket-матч, история, реплеи.
- Orleans включается `Orleans:Enabled`; в compose включён. Один silo,
in-process реестр соединений.
- Тесты: **131** правил + **44** серверных, CI зелёный.
- Стенд: `http://192.168.31.158:18080`, `/health` → ok.
- Документация: `docs/server-api.md`, `docs/protocol.md`,
`docs/HANDOFF.md`.
## Клиент
- **Unity 6000.6.6f1**, URP; проект в `client/`.
- Пакеты: URP, Input System, Addressables, Localization, Newtonsoft.Json,
VContainer (OpenUPM).
- Визуальное направление: **3D**, отдельные сцены-экраны:
`Login`, `Lobby`, `Collection`, `DeckBuilder`, `Battle`.
`Boot` — стартовая служебная сцена; `VanguardApp` персистентный.
- Переходы — `SceneFlow`; очередь/онбординг — оверлеи **Lobby**.
- 3D-окружение сейчас из примитивов (`SceneEnvironment`): камера, свет,
пол, тематические кубы. UI — code-generated uGUI, пока gray-box.
- Login: тёмный неон + 3D-карточный стол, форма по центру на
полупрозрачной панели.
- Сервисы: `ApiClient`, `AuthService`, `MetaService`, `TokenStore`,
`PlayerState`, `GameConnection`.
- Работает: логин/регистрация/refresh, онбординг, коллекция с разбором,
список/удаление/автосборка колоды, магазин (бустер/триал-дека),
история матчей и реплей, очередь, WebSocket-матч (snapshot, интенты,
маллиган, сдача, `GameFinished`), таймер, результат.
- Не готово: полноценный декбилдер, арты/модели/анимации, локализация
RU/EN, настройки, DOTween.
## Запуск
Сервер (на `ssh home`):
```bash
cd ~/VanguardReMaster
docker compose up -d --build
curl http://127.0.0.1:18080/health
```
Клиент:
1. Unity Hub → `client`, редактор **6000.6.6f1**.
2. Открыть `Assets/Scenes/Boot.unity`, Play.
3. Стенд по умолчанию — `http://192.168.31.158:18080`.
## Проверки клиента
```powershell
# EditMode
& 'C:\Program Files\Unity\Hub\Editor\6000.6.6f1\Editor\Unity.exe' `
-batchmode -nographics -projectPath client `
-runTests -testPlatform EditMode -testResults client\TestResults.xml
# Boot → Login + 3D environment
& 'C:\Program Files\Unity\Hub\Editor\6000.6.6f1\Editor\Unity.exe' `
-batchmode -nographics -projectPath client `
-executeMethod Vanguard.Editor.SceneSmoke.Run
```
`SceneSmoke` заменяет PlayMode-тест загрузки сцен: Single-загрузка сцены
ломает стандартный PlayMode test runner. `SceneBuilder` пересобирает сцены:
```powershell
& '...\Unity.exe' -batchmode -nographics -projectPath client `
-executeMethod Vanguard.Editor.SceneBuilder.BuildAll
```
## Ключевые файлы клиента
```
client/Assets/Vanguard/Runtime/App/
VanguardApp.cs composition root, персистентный
SceneFlow.cs переходы Login/Lobby/Collection/DeckBuilder/Battle
SceneEnvironment.cs 3D-фон сцен
SceneControllerBase.cs
LoginSceneController.cs
LobbySceneController.cs
CollectionSceneController.cs
DeckBuilderSceneController.cs
BattleSceneController.cs
client/Assets/Vanguard/Runtime/UI/
LoginView.cs MetaView.cs OnboardingView.cs
CollectionView.cs DecksView.cs QueueView.cs BattleView.cs
UiKit.cs
client/Assets/Vanguard/Runtime/Battle/GameConnection.cs
client/Assets/Vanguard/Runtime/Api/ApiClient.cs + ApiContracts.cs
client/Assets/Vanguard/Editor/SceneBuilder.cs + SceneSmoke.cs
client/Assets/Vanguard/Scenes/*.unity
client/Assets/Plugins/Vanguard.Shared + MessagePack
```
## Решения
- 3D-визуал, отдельные сцены; подробно — `docs/client-visual-direction.md`.
- `Boot` не показывается; `VanguardApp`/сервисы не пересоздаются.
- Очередь — оверлей Lobby; DeckBuilder «В бой» возвращает в Lobby с
выбранной колодой в `SceneFlow.PendingQueueDeck`.
- Токены в `PlayerPrefs` — dev; для релиза защищённое хранилище.
- HTTP разрешён только для dev (`insecureHttpOption: 2`); для релиза HTTPS.
- `GameConnection` использует `System.Net.WebSockets.ClientWebSocket`
(Windows/десктоп first); WebGL потребует другого транспорта.
- Сервер авторитарный; клиент отправляет только интенты, скрытые данные
не покидают сервер.
## Следующие шаги
1. Боевой UI: арты, зоны, анимации, скип; реконнект и таймауты.
2. Полный декбилдер: фильтры, счётчики, валидация.
3. 3D-наполнение: модели/арт, prefab-экраны, камера.
4. Локализация RU/EN, настройки, DOTween.
5. Лаунчер WPF.
## Подводные камни
- Не запускать `dotnet`/Docker на рабочем ПК; сервер проверяется на `ssh home`.
- В Unity нельзя открыть два экземпляра одного проекта: для batch-проверок
делать копию проекта (без `Library`) или закрывать редактор.
- Сцены ссылаются на скрипты по GUID; при копировании сцен копировать и
`.meta` контроллеров.
- `Vanguard.Shared.dll` — netstandard2.1 + MessagePack 3.1.12; при изменении
протокола пересобрать DLL и заменить в `client/Assets/Plugins`.
- `UiKit.CreateCanvas` по умолчанию **не** персистентный: Canvas принадлежит
сцене; EventSystem остаётся персистентным.
- Сцена `Boot` должна быть первой в Build Settings; сейчас там
`Boot`, `Login`, `Lobby`, `Collection`, `DeckBuilder`, `Battle`.