VanguardReMaster/docs/SESSION-STATE.md

9.3 KiB
Raw Blame History

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 правил + 45 серверных, 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, DeckBuilder, Battle. DeckBuilder совмещает коллекцию и колоды; Boot — стартовая служебная сцена; VanguardApp персистентный.
  • Переходы — SceneFlow; очередь/онбординг — оверлеи Lobby.
  • 3D-окружение сейчас из примитивов (SceneEnvironment): камера, свет, пол, тематические кубы. UI — code-generated uGUI, пока gray-box.
  • Login: тёмный неон + 3D-карточный стол, форма по центру на полупрозрачной панели.
  • Сервисы: ApiClient, AuthService, MetaService, TokenStore, PlayerState, GameConnection.
  • Работает: логин/регистрация/refresh, онбординг, коллекция с разбором, декбилдер в духе HS (список колод справа, карточная сетка коллекции, фильтры в оверлее, сортировка клан→ранг→имя, редактор с вертикальным списком карт колоды и статистикой по рангам/общему числу), магазин (бустер/триал-дека), история матчей и реплей, очередь, WebSocket-матч (snapshot, интенты, маллиган, сдача, GameFinished), таймер, результат.
  • Декбилдер: DeckBuilderView; каталог метаданных — GET /api/cards (grade, trigger, clan, rarity, printing, power/shield/type, текст способности), клиент объединяет с коллекцией. Изображения карт пока заглушки-плашки по цвету клана.
  • ПКМ по карте — оверлей с картой, способностями, разбором в пыль и крафтом; SP/TD не разбираются и не крафтятся.
  • Тренировка с ботом: кнопка «С ботом» в редакторе колоды; сервер создаёт casual-матч против случайного бота (POST /api/game/practice), без истории, MMR и наград.
  • Боевой экран: процедурные карты с арт-градиентом по клану, рамкой, именем, рангом, триггером, силой/критом и рубашкой; поля Vanguard + 5 Арьергардов у обоих, рука, damage/soul/drop, REST/скрытые карты.
  • Взаимодействие в бою: клик по картам/зонам, подсветка целей, группировка действий (карты → цели, глобальные кнопки отдельно), журнал последних событий.
  • Отдельная сцена Collection и CollectionView удалены; коллекция открывается из Lobby кнопкой «Коллекция» (сцена DeckBuilder).
  • Не готово: реальные арты/модели/анимации, локализация RU/EN, настройки, DOTween.

Запуск

Сервер (на ssh home):

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.

Проверки клиента

# 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 пересобирает сцены:

& '...\Unity.exe' -batchmode -nographics -projectPath client `
  -executeMethod Vanguard.Editor.SceneBuilder.BuildAll

Ключевые файлы клиента

client/Assets/Vanguard/Runtime/App/
  VanguardApp.cs            composition root, персистентный
  SceneFlow.cs              переходы Login/Lobby/DeckBuilder/Battle
  SceneEnvironment.cs       3D-фон сцен
  SceneControllerBase.cs
  LoginSceneController.cs
  LobbySceneController.cs
  DeckBuilderSceneController.cs
  BattleSceneController.cs
client/Assets/Vanguard/Runtime/UI/
  LoginView.cs  MetaView.cs  OnboardingView.cs
  DeckBuilderView.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. Декбилдер: drag&drop, счётчики лимитов, live-валидация, пресеты.
  3. 3D-наполнение: модели/арт, prefab-экраны, камера.
  4. Локализация RU/EN, настройки, DOTween.
  5. Лаунчер WPF.

Тренировка с ботом уже есть — следующий блок можно начинать с боевого UI.

Подводные камни

  • Не запускать 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, DeckBuilder, Battle.