Установка и сохранение пушек¶
Категория изменения: feature. Игровое поведение не проверено: по правилам проекта приёмку выполняет пользователь вручную. Проверка компиляции и чтение ссылок prefab-ов через подключённый Editor не заменяют приёмку.
Финальная техническая проверка 15 октября 2026: подключённый Editor отвечает ready, recompile_status — completed, failed=false, compilationFailed=false. В загруженных классах окон подтверждено исправление конфликта имени поля с базовым GameScreen. В Console осталась одна историческая запись этого конфликта до исправления; новых ошибок в буфере Pipeline нет, журнал не очищался. Сцена Boot открыта без несохранённых изменений и без diff. Чтением assets подтверждены три оружейных слота в HUD и инвентаре, ссылки экипировки в 20 вариантах локаций и точки выстрела 41 моделей.
GameProgress версии 3 хранит три ID установленных моделей и арсенал: ID модели, факт покупки, общее число полученных копий T, текущий уровень L, эволюцию E и выбранный скин. Наличие копий означает владение; уровень 0 не закрывает оружие. Копии увеличивают T и L, не создавая дополнительных устанавливаемых экземпляров. Один ID разрешён только в одной башне.
Новый профиль и миграция версий 1/2 получают K-W1 «Основу», T=1, L=1, E=0, в первой башне. Две остальные башни пустые. Миграция сохраняет прежние ID игрока, ревизию, локацию и неизвестные поля; исходный профиль архивируется существующим механизмом сохранений. Некорректный арсенал отклоняется существующим механизмом восстановления из резервных файлов.
В инвентаре выбрать башню в нижнем ряду, затем пушку и подтвердить установку. Повторный выбор установленной в выбранной башне модели предлагает снятие. Для переноса модели сначала снять её со старой башни. Закрытые модели и модели в другой башне недоступны для установки. На HUD нажатие на оружейный слот открывает инвентарь с выбранной башней.
FlowSystem владеет профилем и привязывает его к явно указанному WeaponSession. Система экипировки и UI получают изменения через этот экземпляр. Нет поиска объектов сцены и глобального реестра. WeaponSession.TryGrantCopies(id, count, purchased) — операция для источников наград/покупок: выдаёт копии, обновляет UI и сохраняет профиль. Новый магазин, выдача наград боссами, кнопки эволюции и активные способности этой задачей не добавляются. L/E сохраняются; существующие параметры боя остаются параметрами прототипа, без введения неутверждённых формул усиления.
Аудит established/core¶
Файлы в IdleWorldDominationUnity/Assets/Scripts/ |
Необходимость изменения |
|---|---|
Flow/GameProgress.cs, Flow/ProgressSaveSystem.cs |
Арсенал, слоты, миграция и проверка целостности нового состояния |
Flow/FlowSystem.cs |
Привязка профиля к сессии оружия и открытие конкретной башни |
PlayerEquipmentSystem.cs |
Применение сохранённого набора к экземплярам prefab-ов, запрет дубликатов |
GunView.cs, GunCombatSystem.cs |
Явные ссылки на точку выстрела и установленное оружие |
CombatSystems.cs |
Независимая стрельба занятых башен; пустые башни не стреляют |
Flow/InventoryScreen.cs, Flow/InventoryPopupView.cs, Flow/HudScreen.cs |
Выбор башни, установка/снятие и отображение реального состояния вместо примеров |
Prefab-ы изменены только через Unity Pipeline: новая карточка с UniText, ссылки UI и сессии, крепления танка и точки выстрела 41 моделей. Все 20 вариантов локаций наследуют ссылки танка. Несвязанные изменения настроек/пакетов уже присутствовали до задачи и не включались в реализацию. Побочная перезапись сцены Boot отменена.
Ручная приёмка — всё ниже не проверено¶
- [ ] Новый профиль: одна «Основа», две пустые башни; HUD и инвентарь показывают L=1/E=0/T=1. Старый профиль: прежние ID игрока и локация сохранены, создан архив до миграции.
- [ ] Выбрать башню, снять/установить пушку, перенести в другую башню. Изменяются модель танка и оба ряда слотов; после закрытия/повторного открытия инвентаря значения совпадают. Неполученную модель и второй экземпляр того же ID установить нельзя.
- [ ] Выдать копию через
WeaponSession.TryGrantCopies: T и L увеличиваются ровно на количество копий, покупка отмечается только приpurchased=true, установка не меняется, повторное открытие окна не дублирует награду. - [ ] В сохранении с E>0/L=0 оружие остаётся доступным и установленным. Снятие и повторная установка сохраняют T/L/E/скин.
- [ ] Перезапуск, переход между локациями и смерть танка сохраняют сборку и прогресс. На новой локации нет дополнительной стартовой пушки. Прямой запуск сцены без профиля сохраняет прежнюю стартовую стрельбу прототипа.
- [ ] Открытие инвентаря останавливает бой, закрытие возобновляет его; движение, здоровье и восстановление после смерти работают как прежде.
- [ ] Одна пушка сохраняет параметры прототипа: урон 25, интервал 0,7 с, скорость снаряда 18, дальность 12. Несколько моделей стреляют независимо, пустые башни не стреляют. Ранее выпущенные снаряды продолжают полёт и наносят сохранённый урон после снятия оружия; препятствия и смерть цели обрабатываются как прежде.
- [ ] При ошибке записи открывается прежний экран восстановления. Повтор сохранения фиксирует уже выполненную операцию без повторного начисления копий.
- [ ] Маленький экран: карточки прокручиваются, названия/числа читаемы, нижние слоты доступны; вкладка предметов и возврат к исходному экрану работают как прежде.
Инвентарь владения, перенос и информация об оружии — 15 октября 2026¶
Категория: feature. Обновлён существующий инвентарь: демонстрационные записи удалены, карточка создаётся только для принадлежащей игроку модели. Копии отображаются числом на одной карточке. Установленная модель остаётся в списке с указанием слота. Порядок карточек хранится порядком записей профиля.
Поддерживаются перенос из списка в слот, обмен между башнями, возврат из слота в список и сортировка карточек. Предварительная расстановка существует только в UI; профиль меняется после допустимого drop. Отмена, потеря фокуса или закрытие возвращают фактическую расстановку. Скролл блокируется на время переноса, у края списка включается автопрокрутка. Предметы допускаются только в слот своего типа.
В prefab инвентаря добавлен попап с иконкой, названием, полем редкости, прокручиваемым описанием способности и кнопками экипировки/снятия и закрытия. Все новые тексты — UniText. WeaponInfoPopupView.weaponDetails содержит данные для настройки иконок, редкости и описаний. Редкость в существующем дизайне не определена: UI показывает «Редкость: не задана». Описания известных способностей взяты из weapons-and-enemies.md и помечены как концепты; их боевое исполнение этой задачей не добавлено. Иконка по умолчанию использует текущую заглушку карточки.
Профиль v4 добавляет список принадлежащих игроку предметов и три типовых слота. Миграция v3 добавляет пустые предметы, сохраняя оружие, ID игрока, локацию и неизвестные поля. Миграции v1/v2 продолжают существующий путь через v3. Источники выдачи предметов используют WeaponSession.TryGrantItemCopies; выдача копий не создаёт второй карточки.
Established/core изменения этой задачи:
Flow/GameProgress.cs: минимальные поля владения предметами и их экипировки, версия 4.Flow/ProgressSaveSystem.cs: миграция v3 → v4 и валидация уникальности/владения/типов слотов предметов. Протокол атомарной записи и восстановления сохранён.Flow/WeaponSession.cs: обмен двух башен одной операцией, предметы и сортировка записей с сохранением. Число копий, уровни, эволюция и скины при переносе не меняются.PlayerEquipmentSystem.cs: применение предметов профиля к существующим authored слотам; стартовые предметы используются при прямом запуске без профиля.Flow/InventoryScreen.cs,InventoryPopupView.cs,WeaponCardView.cs,WeaponSlotView.cs: отображение владения, обработка переноса и попап.WeaponSlotView.Refreshсохранён для существующего HUD.
Ручная приёмка — всё ниже не проверено:
- [ ] Новый профиль: одна «Основа», другие модели отсутствуют, три пустых слота предметов. Вкладка предметов показывает пустое состояние. Получение копий меняет счётчик и уровень одной карточки.
- [ ] Открыть инвентарь несколько раз и переключать вкладки: карточки не дублируются; все принадлежащие игроку модели доступны, включая установленные.
- [ ] Перенести оружие на пустую/занятую башню и между двумя занятыми башнями: предпросмотр соответствует результату, один ID не оказывается в двух башнях. Вернуть оружие в список.
- [ ] Отпустить вне подходящей области, потерять фокус, закрыть экран при переносе: сборка и сохранение не меняются, карточка и прокрутка восстанавливаются.
- [ ] Переставить карточки в обе стороны и в конец списка; повторное открытие и перезапуск сохраняют порядок. Автопрокрутка работает на длинном списке.
- [ ] Получить два разных предмета одного типа и предметы остальных типов: каждая модель показывается один раз. Замена возвращает прежний предмет в доступный список; перенос в несовместимый слот отклоняется.
- [ ] Попап: иконка/название/редкость/описание соответствуют модели; кнопка экипирует в выбранную башню, переносит оружие из другой башни с обменом, повторное действие снимает. Кнопки закрытия и фон работают, описание прокручивается.
- [ ] Перезапуск и переход между локациями восстанавливают шесть слотов. Значения T/L/E/скина, ID игрока и текущая локация не меняются при переносе/сортировке.
- [ ] Старые профили v1/v2/v3 загружаются с архивом перед миграцией; оружие сохранено, предметы пусты. Некорректные/дублирующиеся предметы и неверный тип слота отклоняются существующим механизмом восстановления.
- [ ] Ошибка сохранения открывает прежний recovery flow; повтор записи не повторяет обмен и не начисляет копии.
- [ ] HUD отображает ту же сборку; пустые башни не стреляют, занятые стреляют как прежде. Открытие инвентаря сохраняет паузу, закрытие возобновляет бой. Прямой запуск локации без профиля сохраняет стартовую экипировку.
- [ ] Маленький портретный экран, вытянутый телефон и планшет: список, все шесть слотов, попап и кнопки доступны; ghost следует за мышью/пальцем и не блокирует drop.
Техническая проверка завершения: Unity Pipeline recompile_status — up_to_date, failed=false, compilationFailed=false; ссылки InventoryScreen проверены, массив слотов содержит 6 записей, WeaponInventoryCard имеет authored CanvasGroup, попап — descriptionScroll. Console не очищалась: сохранена историческая ошибка Повторяющаяся модель в арсенале от 10:48 UTC, а также диагностика промежуточной компиляции/команд и таймаутов модального диалога. Ручные игровые проверки из списка выше остаются невыполненными. Новых несвязанных изменений в ходе задачи не вносилось; исходные изменения пользователя сохранены.
Уточнение: только свободные пушки и защита последней пушки¶
Категория feature. Установленные пушки теперь исключены из списка; после снятия или замены освобождённая модель возвращается в список ровно один раз. Если всё оружие установлено, показано «Нет свободного оружия». Попап и перенос установленной пушки работают даже без созданной карточки списка.
WeaponSession.TryEquip отклоняет снятие последней установленной пушки до изменения профиля, события Changed и сохранения. CanUnequipEntry используется кнопкой снятия, предпросмотром и обработкой drop в список. Перенос последней пушки в другую башню и атомарный обмен остаются разрешены. Предметы снимаются как прежде. Попап показывает неактивную кнопку «Последняя пушка» с объяснением.
Core-файл WeaponSession.cs изменён для общего запрета, который нельзя обойти другим UI-вызовом. InventoryScreen.cs и WeaponInfoPopupView.cs изменены для фильтра, безопасной работы без карточки и согласования UI с этим запретом. Поля профиля, миграция и формат сохранения в этом уточнении не менялись. Остальная работа пользователя сохранена.
Ручные проверки — не выполнены:
- [ ] Установленная пушка отсутствует в списке при открытии и переключении вкладок; после замены или допустимого снятия возвращается одной карточкой. Если все пушки установлены, виден текст «Нет свободного оружия».
- [ ] Единственная пушка: открыть попап через слот — кнопка снятия отключена; перетащить в список или на свободную карточку — снятие отклонено, слот/профиль остаются прежними.
- [ ] Перенести единственную пушку в другую пустую башню — перенос разрешён, дубликатов нет. Заменить её свободной пушкой — прежняя появляется в списке, новая скрывается.
- [ ] При двух/трёх занятых башнях снятие разрешено до одной оставшейся; обмен башен и отмена переноса работают. Снятие предметов не ограничено.
- [ ] После перезапуска/перехода между локациями HUD и инвентарь совпадают со сборкой; T/L/E/скины не изменились. Отклонённое снятие не вызывает сохранение. Пауза и стрельба оставшейся башни работают как прежде.
Проверка уточнения: recompile_status — completed, failed=false, compilationFailed=false. Console/console_status прочитаны без очистки. В истории также обнаружено сообщение LightSide от 16:09:57 UTC о 442 ошибках миграции пакетов (отчёт Library/LightSide/MigrationReport.txt); оно не связано с добавленной проверкой снятия, но корректность мигрированных UI-данных вручную не подтверждена. Ручные проверки выше остаются невыполненными.