Перейти к содержанию

Первый этап реализации: префабы и flow

Перспективная камера и плавающий стик

Категория: feature. Общий LocationRoot содержит перспективную камеру (FOV 45°, наклон 45°, азимут 45°), CinemachineBrain и CinemachineCamera с CinemachineFollow. Следование использует мировой offset и damping 0.25, поэтому поворот танка не вращает камеру. Все 20 вариантов локаций наследуют эти настройки и ссылку движения на камеру.

GameplayHud использует FloatingJoystick: нажатие на свободной области HUD переносит основание под палец, перетаскивание управляет виртуальным <Gamepad>/leftStick. Ввод принадлежит одному pointer; отпускание, скрытие HUD, пауза и потеря фокуса сбрасывают его. Визуальная часть не перехватывает нажатия, кнопки сохраняют приоритет. Стик скрыт до нажатия и после отпускания.

Из established/core изменён только PlaceholderTankMovement.cs: камера задаёт экранные направления движения, а танк плавно поворачивается в направлении ввода. Эти изменения необходимы именно в существующем контроллере, иначе виртуальный стик продолжал бы двигать танк по мировым осям. Скорость 4, ограничение арены ±9, клавиатура и геймпад сохранены. Остальной flow и сохранения не изменены. Изменения префабов выполнены через подключённый Pipeline, без runtime-построения объектов.

Структурная проверка: компиляция завершена без ошибок; все 20 вариантов имеют перспективную камеру, Brain, FollowCamera и ссылку movementCamera; ссылки стика заполнены, прежний OnScreenStick удалён. В Console сохранены исторические ошибки миграции LightSide/UniText и диагностические ошибки вызовов Pipeline; неудачный пакет изменений был откатан и затем применён успешно. Это не проверка игрового поведения.

Ручные проверки — не выполнены, изменения поведения не проверены:

  • Запустить Boot: один танк, одна рендерящая камера и HUD; камера в три четверти плавно следует и не вращается вместе с танком.
  • Коснуться разных свободных мест HUD: основание появляется точно под пальцем; малое отклонение даёт малую скорость, диагональ не ускоряет движение; отпускание останавливает танк и скрывает стик.
  • Направления стика, WASD/стрелок и геймпада совпадают с направлениями на экране; полная скорость остаётся 4, танк не выходит за ±9 по X/Z.
  • Второе касание не перехватывает стик; кнопки HUD доступны, их нажатия не запускают движение.
  • Открыть меню/инвентарь во время движения: танк останавливается; после закрытия позиция сохранена и движение не продолжается без нового ввода. Проверить отпускание пальца за краем UI, сворачивание и потерю фокуса.
  • Сменить локацию: остаются один танк, одна рендерящая камера и HUD; следование и управление работают с новой целью.
  • Проверить экранные пропорции 9:16, 9:20 и 3:4, safe area и касания возле края экрана.

Текущее процедурное оформление, удаление зависимостей от Assets/UI/Concepts и непроверенные ручные сценарии описаны в Procedural UI. Упоминания атласов ниже относятся к предыдущему этапу оформления.

Текущее устройство UI после удаления FlowAction/FlowButton описано в системе экранов и окон. Разделы ниже сохраняют историю этапов; актуальные классы экранов, API, слои и непроверенные ручные сценарии находятся в этом документе.

Категория: feature. Сначала префабы-заглушки, навигация, запуск и переходы; затем мета-фичи. Источники дизайна: экраны, локации, сохранения.

Подтверждённый flow

  1. Boot создаёт один готовый префаб UI/flow и сохраняет его между сменами сцен.
  2. Flow читает текущую локацию из локального JSON и сразу загружает её. Новый профиль начинает в Стальном плацдарме.
  3. После загрузки показывается HUD, игрок управляет танком-заглушкой. Меню при запуске не открывается.
  4. Кнопка карты на HUD открывает карту внутри префаба. Шестерёнка сразу открывает настройки; боковые кнопки открывают пассы, магазин и танк. Игровая сцена и танк сохраняются; время игры остановлено.
  5. «Вернуться в игру» закрывает меню и продолжает ту же локацию без загрузки и без сброса позиции танка.
  6. Выбор миссии открывает брифинг. Запуск заменяет текущую сцену отдельной сценой выбранной локации; повторные нажатия блокируются.
  7. Только после успешной загрузки записывается новая текущая локация. Следующий запуск сразу приводит в неё.
  8. Закрытие раздела возвращает к источнику: настройки из HUD → HUD, пасс из карты → карта. Отдельного экрана паузы нет.
  9. Ошибка загрузки предлагает повтор или меню. Если старая сцена ещё загружена, в неё можно вернуться.

Отдельной сцены меню нет. Menu.unity, её входной префаб MenuEntry и скрипт PrefabEntry удалены. Все двадцать сцен Assets/Scenes/Locations/Location01.unity … Location20.unity существуют и включены в Build Settings.

Префабы и управление

Все runtime-объекты создаются из конкретных готовых префабов. Код не собирает иерархии GameObject и не добавляет компоненты. Динамические отметки миссий — экземпляры MissionMarker. Ссылки сериализованы. Ассеты и сцены изменяются через Unity Pipeline.

MenuRoot содержит UI/flow, Canvas, EventSystem и десять экранов: HUD, карту, танк, прокачку, пассы, магазин, настройки, брифинг, загрузку и подробности. Меню показывается только явным действием игрока. UI/flow сохраняется между сценами как явно созданный экземпляр, без singleton и статического изменяемого состояния.

HUD, карта и Battle Pass собраны по концептам docs/UI, для пасса используется v3. Глобальной нижней навигации нет. На HUD — шестерёнка, здоровье, миникарта, боковые кнопки, виртуальный джойстик и шесть слотов. Карта содержит 20 миссий и связи между ними. Пасс содержит две дорожки наград, состояния строк и переключатель трёх пассов. Числа и награды демонстрационные; получение и покупка открывают поясняющие заглушки. Другие разделы пока используют общий временный стиль, поскольку отдельные концепты для них не заданы.

Локации используют двадцать вариантов LocationRoot. Внутри каждой есть камера, окружение и экземпляр TankPlaceholder. PlaceholderTankMovement обеспечивает временное движение: WASD, стрелки, левый стик геймпада или виртуальный OnScreenStick на HUD. Движение ограничено ареной и останавливается при открытии разделов интерфейса.

Остальные геометрические префабы: оружие, враг, снаряд, награда и эффект. Бой и экономика пока не реализованы. Мета-разделы содержат навигационные заглушки с пояснениями.

Включён явно подписанный navigationPreview: доступны все двадцать миссий для проверки переходов. Разблокировки пока не реализованы; текущая локация сохраняется отдельно от будущего полного мета-прогресса.

Сохранение текущей локации

LocationSaveSystem принадлежит экземпляру FlowSystem. Файл progress.json находится в Application.persistentDataPath. Схема версии 1: revision, стабильный playerId, UTC-время и progress.currentLocationId. ID Location01 … Location20 не зависят от отображаемых названий и порядка карты.

Запись проходит через временный файл, сброс буферов, проверку и замену основного файла с резервной копией. Загрузка проверяет основной, временный и резервный кандидаты. Несовместимые будущие версии и полностью повреждённые сохранения не перезаписываются; сообщение попадает в Console. Следующие мета-поля требуют новой версии и миграции.

Ручная проверка — всё пока не проверено

Открыть Assets/Scenes/Boot.unity, выбрать портретный Game View (например, 9:16), включить Play Mode.

  • Первый запуск сразу приводит в первую локацию с HUD, без открытого меню; танк движется.
  • После загрузки есть одна игровая сцена и один сохраняющийся UI/flow, без оставшегося Boot, второго HUD или EventSystem.
  • Кнопка карты останавливает танк. Возврат сохраняет сцену и позицию, движение возобновляется.
  • Все пять разделов меню и брифинг открываются; «Назад» возвращает к источнику.
  • Шестерёнка HUD → настройки → закрытие возвращает управление сразу в HUD.
  • HUD → магазин → пасс → закрытие возвращает в магазин; закрытие магазина возвращает в HUD.
  • Карта → пасс → закрытие возвращает в карту. Стрелки выбора пасса меняют название, задание и выделение выбранного пасса.
  • Кнопки наград, покупки и слотов открывают пояснение; закрытие возвращает к источнику. Экран паузы и глобальная нижняя навигация отсутствуют.
  • Выбор другой миссии заменяет сцену: остаются один танк, одна камера и один HUD.
  • Двойное нажатие запуска не создаёт две загрузки.
  • Повторный запуск из Boot сразу загружает последнюю успешно загруженную локацию.
  • Ошибка загрузки позволяет повторить попытку или открыть меню; если старая сцена сохранилась, возврат в неё работает.
  • Проверить виртуальный джойстик на телефоне, клавиатуру и геймпад, а также остановку при сворачивании.
  • Проверить сохранение, восстановление из резервной копии и защиту несовместимого JSON вручную перед расширением схемы.

Область изменений и риски

Boot.cs меняется для непосредственного запуска UI/flow-префаба вместо Addressable-сцены меню. FlowSystem.cs меняется для старта в текущей локации, сохранения UI между заменами сцен и открытия меню поверх игры. Локальная правка отдельной кнопки не могла изменить прежнее владение сценой меню и стартовый маршрут.

На этапе сборки экранов по концептам минимальные изменения общего FlowSystem.cs необходимы для прямого открытия разделов из HUD, остановки игры и возврата к источнику без экрана паузы. MissionMarker.cs принимает авторскую позицию и сериализованные ссылки на номер/значок. FlowButton.cs добавляет действия переключателя пасса. PlaceholderTankMovement.cs использует штатный Input System для виртуального стика вместо чтения касаний поверх UI. Сохранения и Boot на этом этапе не меняются.

Риски: запуск, восстановление текущей локации, время паузы и повторные объекты после переходов. Инварианты: один UI/flow, одна локация, один танк и камера; закрытие меню сохраняет текущую сцену и позицию; успешный переход возобновляет время и меняет сохранённую локацию ровно один раз. Все проверки этих инвариантов перечислены выше и пока не выполнены.

Сцены и префабы изменены через Pipeline. Изменения пользователя, существовавшие до начала работы, сохранены. Компиляция и ссылки проверяются через Pipeline; это не заменяет ручную проверку поведения.

Итоговая проверка ассетов: компиляция завершена без ошибок; все 20 сцен включены в Build Settings; Menu.unity и PausePopup.prefab отсутствуют; у 46 кнопок и проверенных полей FlowSystem нет пустых ссылок; заданы десять экранов и 20 позиций миссий. Boot ссылается на UI/flow-префаб, а TankPlaceholder содержит движение с заданной ссылкой на Transform. Три основных экрана проверены статическими снимками в Edit Mode. Вручную поведение ещё не проверено.

Адаптивная раскладка

Категория: feature. Canvas использует Scale With Screen Size, reference resolution 720×1280 и режим Expand. Экраны растягиваются в безопасной области; верхние, боковые и нижние кнопки привязаны к своим краям. Шесть слотов HUD делят доступную ширину. У пасса верхние карточки и нижние действия закреплены, награды находятся в отдельной прокручиваемой области. Заглушки разделов растягивают текст и кнопки по ширине, кнопки возврата закреплены снизу.

Новые компоненты SafeAreaLayout и MapContentLayout используют сериализованные ссылки на готовые RectTransform. Первый обновляет границы только при изменении разрешения или safe area. Второй равномерно масштабирует готовую карту вместе с миссиями и связями и сохраняет относительную позицию прокрутки при изменении размеров. Runtime-иерархии не создаются. Существующие FlowSystem, сохранения и управление не изменяются на этом этапе.

Статические снимки HUD, карты, пасса и настроек выполнены в Edit Mode для 720×1280, 1080×2400, 768×1024 и 640×960. По результатам сохранены пропорции картинок слотов и растянут фон пасса. Это проверка авторской раскладки, а не поведения компонентов или ввода на устройстве. Ссылки десяти экранов и 46 кнопок, safe area, карты и Boot проверены через Pipeline; пустых ссылок нет.

Ручные проверки адаптивности — пока не выполнены:

  • На 9:16, 9:20, 2:3 и планшете 3:4 кнопки HUD остаются у краёв, слоты помещаются, шестерёнка и миникарта не перекрываются.
  • На телефоне с вырезом верхние кнопки и нижние слоты остаются внутри safe area.
  • У пасса награды прокручиваются отдельно; верхняя карточка, закрытие, покупка и переключатель остаются доступны, без наложения.
  • Карта масштабируется вместе с миссиями и связями; прокрутка до первой и последней миссии работает после изменения размеров и повторного открытия.
  • Все 46 кнопок сохраняют действия, вложенное закрытие возвращает к источнику; HUD возобновляет управление. Брифинг, загрузка, настройки и карточки не обрезают текст или кнопки.

Попап инвентаря адаптирован по референсу Walking Castles и встроен в SafeArea. Его структура, карточки и прокрутка заранее собраны в префабах.

Попап инвентаря

Категория: feature. Новый InventoryPopup повторяет компоновку референса: затемнение с видимой локацией и HUD, характеристики сверху, коричневая нижняя панель со вкладками, прокручиваемые предметы и закреплённая экипировка. InventoryItemCard — полный готовый префаб карточки. Доступны вкладки пушек и предметов; две дополнительные категории закрыты. Числа, уровни и установленная сборка демонстрационные. Карточки открывают подробности, а получение предметов, экипировка, эволюция и сохранение сборки остаются следующим этапом мета-фич.

Общее изменение FlowSystem.cs необходимо для нового маршрута Inventory, выбора вкладки и показа HUD под модальным затемнением. Изменение одной кнопки не обеспечило бы остановку и корректный возврат. FlowButton.cs добавляет действия с сохранением прежних числовых значений. Новые InventoryPopupView и InventoryGridLayout используют явные сериализованные ссылки и обновляют UI только при выборе вкладки или изменении ширины. Сохранения, движение и загрузка локаций на этом этапе не меняются.

Проверка ссылок через Pipeline: 11 экранов, 73 кнопки, пустых ссылок нет. Попап проверен статическими снимками в Edit Mode для 720×1280, 1080×2400 и 768×1024; для сетки использованы соответствующие ширине параметры раскладки. Поведение в Play Mode пока не проверено.

Ручная проверка — пока не выполнена:

  • Рюкзак и каждый из шести слотов HUD открывают инвентарь; танк перестаёт двигаться, локация и его позиция сохраняются.
  • Затемнение блокирует нажатия на HUD и джойстик под попапом.
  • Закрытие возвращает управление в HUD; повторное открытие не создаёт дополнительные UI, EventSystem, танк или камеру.
  • Обе доступные вкладки переключают сетку и заголовок; прокрутка работает при остановленной игре, экипировка и закрытие остаются на месте.
  • Карточка, информация и закрытая вкладка открывают подробности; «Назад» возвращает в инвентарь. Инвентарь из брифинга закрывается обратно в брифинг, сохраняя остановку игры.
  • На 9:16, 9:20 и планшете 3:4 панели не пересекаются, тексты помещаются, число колонок соответствует ширине, кнопки остаются внутри safe area.
  • Старт из Boot, возврат в игру и переход между локациями сохраняют прежний flow и один постоянный UI.

Изолированный тест городских районов

Категория: feature. На первоначальном этапе добавлены 18 prefab-районов и отдельная сцена Assets/Scenes/Tests/CityDistrictsTest.unity, содержащая готовые prefab города, камеры и освещения. На этом этапе Boot, Flow, сохранения, игровые Location-сцены и их список в Build Settings не менялись. Целый тестовый город не подключён к игровому маршруту.

Компиляция и ссылки проверены через Pipeline; сохранённая сцена повторно открыта. Ручные проверки управления, стыков районов, этажей, блокпоста и стройплощадки не выполнены; полный чек-лист и происхождение ассетов — в city-districts-unity.md.

Городские части вместо окружения-заглушки

Категория: feature. По запросу пользователя окружение всех двадцати игровых вариантов LocationRoot заменено готовыми частями города. Существующие Assets/Scenes/Locations/Location01.unity … Location20.unity используют свои прежние prefab Assets/Prefabs/Locations/Location01.prefab … Location20.prefab. У каждой локации сохраняются ID, название миссии, камера и танк; Boot, Flow, сохранения и established/core C# не изменялись.

Во всех вариантах отключены старые Landmark0–Landmark3, расширен Ground, добавлены вложенные prefab районов и настроена существующая камера. Восемнадцать районов распределены по локациям, ещё два варианта составлены из госпиталя с эвакуацией и блокпоста с узлом связи. Состояние окружения и ограничения описаны в документации городских районов.

Это временные визуальные заглушки: городские части не заменяют дизайн двадцати канонических биомов и не реализуют финальный план первой локации. Перед каждым районом сохранена свободная площадка для танка; движение остаётся ограничено ±9 м по X/Z. Для игрового ракурса выбрана ортографическая камера с размером 38: она показывает площадку и ближнюю часть района, сохраняя место для нижнего HUD. Дальний край длинных и составных частей может быть за кадром; весь район доступен в Scene View. Районы 80 × 40 м развёрнуты вдоль портретного экрана, составные части располагаются последовательно по Z. Расширение игровой проходимости на весь район, столкновения, NavMesh, враги и биомные механики остаются отдельными задачами.

Технический аудит через Pipeline: все 20 сцен повторно открыты, все игровые prefab остаются вариантами LocationRoot; всего 22 вложенных экземпляра 18 уникальных районов. В каждой сцене одна камера, один AudioListener и один танк; отсутствующих мешей, материалов и скриптов нет. Ссылка танка, скорость 4 и граница 9 сохранены. Проверены параметры всех камер, проекция танка относительно HUD в 9:16 и статические рендеры четырёх сцен. Новых ошибок компиляции и Console не обнаружено; сохраняется один исторический timeout первоначального импорта. Эти проверки не подтверждают игровое поведение в Play Mode.

Ручная проверка — не выполнена:

  • Новый профиль из Boot открывает первую локацию; существующий профиль загружает сохранённую.
  • Во всех двадцати локациях правильный район, нет старых лендмарков, танк и свободная площадка читаются в портретном Game View над нижним HUD; ближняя часть района видна, его дальний край может быть за кадром.
  • Танк движется в прежних пределах ±9 м без пересечения городского окружения; клавиатура, геймпад и виртуальный джойстик работают.
  • Меню ставит игру на паузу и возвращает к той же сцене и позиции танка.
  • Переходы сохраняют один UI/flow, одну игровую сцену, один танк и одну камеру; повторный запуск открывает последнюю успешно загруженную миссию.

Результаты проверки отдельного тестового города из предыдущего раздела не подтверждают визуальную или игровую приёмку этих вариантов. Изменения сериализованных ассетов выполняются через подключённый Unity Pipeline; проверка поведения остаётся за пользователем.

Стартовая пушка и автоматическая стрельба

Категория: feature. В TankPlaceholder заранее установлен вложенный prefab C-W1 с первым скином. Крепление находится на движущемся TankBody, компенсирует его неравномерный масштаб и содержит явно назначенную точку выстрела. Старые невидимые башни-заглушки отключены вместе с коллайдерами.

Новые GunCombatSystem, GunProjectile, EnemyTarget и LocationCombatSystem обеспечивают выбор ближайшего видимого врага в радиусе 12 м, поворот 180°/с, выстрел после наведения с интервалом 0,7 с, полёт 18 м/с и урон 25. У врага 100 здоровья; при смерти он отключается. Снаряды летят прямо, останавливаются об коллайдеры и переиспользуются из пула 16 prefab-экземпляров. Пауза останавливает наведение, таймеры и полёт. Общий LocationRoot содержит четыре врага-заглушки и явные ссылки системы боя; настройка наследуется всеми двадцатью вариантами локаций.

Established/core C# не изменялся: экипировка, GunView/GunSkin, управление, навигация и сохранения сохранены. Новая стрельба работает с авторской стартовой пушкой; интеграция с будущей сменой боевого вооружения не реализована. Префабы изменены через подключённый Unity Pipeline. Проверены компиляция без ошибок, ссылки пушки/дулa/снаряда и наследование системы боя всеми двадцатью prefab-вариантами. В Console сохраняются ошибки миграции LightSide и ошибки других операций Editor; чистота общей Console не подтверждена.

Ручные проверки поведения — не выполнены:

  • Запуск из Boot показывает одну C-W1, закреплённую на корпусе; при движении и повороте корпуса она остаётся на креплении и наводится независимо.
  • Башня выбирает живого врага в радиусе, поворачивается, стреляет после наведения; четыре попадания уничтожают врага, затем выбирается следующая цель. Без живых доступных целей выстрелов нет.
  • Препятствие блокирует выстрел и полёт; за пределами 12 м цель не атакуется. Пауза меню замораживает башню, снаряды и урон, закрытие возобновляет бой.
  • Переход между локациями удаляет старые снаряды и врагов и оставляет один танк с одной стартовой пушкой; управление, камера и загрузка сохранённой локации работают как прежде.

Заглушки всех противников и первый набор A01

Категория: feature. Добавлены 19 префабов обычных противников и 60 боссов из документации, отдельный отряд из пяти бойцов и префаб стартовой расстановки. Первая сцена получает семь обычных групп (26 юнитов) и трёх боссов; прежние четыре капсулы скрыты локальными overrides. Полный каталог, ограничения и ручные acceptance checks: enemy-placeholders.md.

Established/core C# и общие системы боя, движения, flow, сохранений и наград не меняются. Префабы и сцена авторятся через подключённый Unity Pipeline. Бой ещё не реализован. Ручные проверки запуска из Boot, управления, паузы, переходов, читаемости и расстановки не выполнены; изменения игрового поведения не проверены.

Игровой бой на NukeECS

Категория: feature. Движение, наведение, стрельба, снаряды, урон, здоровье и восстановление боя перенесены в системы NukeECS. В первой сцене подключены все 29 расставленных противников; добавлены полоски здоровья и расширена граница движения до ±90 м. Общий LocationRoot владеет ECS-миром и сохраняет бой капсул в других локациях. Настройка prefab и сцены выполняется через подключённый Pipeline.

Описание поведения, затронутые established/core файлы, инварианты и полный чек-лист: ecs-combat.md. Ручная приёмка запуска из Boot, попаданий, урона, управления, паузы, восстановления, смены локаций и повторного Play Mode не выполнена. Игровые изменения остаются непроверенными; компиляция и структурная проверка не заменяют ручную приёмку.

Инвентарь владения и drag-and-drop

Категория feature, 15 октября 2026. Экран инвентаря переведён с демонстрационных карточек на уникальные модели из профиля игрока. Добавлены перенос с предварительной расстановкой, обмен башен, возврат в инвентарь, сортировка и попап оружия. Для предметов добавлены владение и типовые слоты в профиле v4. Полный аудит core-файлов, ограничения данных редкости/способностей и ручной чек-лист находятся в последнем разделе weapon-inventory-implementation.md.

Ручные acceptance checks не выполнены: уникальность карточек/копии, обмен и отмена drag, типы предметов, попап, перезапуск/миграция/ошибка сохранения, HUD/пауза/стрельба и адаптация к экрану.

Уточнение инвентаря: установленные пушки скрываются из списка, снятие последней блокируется в сессии экипировки и UI; перенос между башнями остаётся доступен. Чек-лист в конце weapon-inventory-implementation.md; ручная приёмка не выполнена.