--- id: TASK-0006 title: Реализовать побитовую систему состояния врагов в чанке summary: Сохранить состояние врагов чанка через int или расширяемую bitmask, где каждый бит соответствует конкретному deterministic enemy slot. priority: Highest area: persistence owner: unassigned created: 2026-03-30 updated: 2026-03-30 execution_time: 1d depends_on: - TASK-0004 - TASK-0005 canonical_docs: - docs/tasks/Index.md related_files: - Assets/Scripts/WorldGen/InfiniteWorldGenerator.cs --- # TASK-0006 - Реализовать побитовую систему состояния врагов в чанке ## Status Статус задачи ведется в `docs/tasks/Index.md` и является каноническим там. Допустимые значения статуса: - `BackLog` - `ToDo` - `InProgress` - `Review` - `Done` ## Why Пользователь описал конкретную механику хранения enemy state через биты. Это позволяет сохранять большой мир компактно и воспроизводимо. ## Expected Outcome Для каждого чанка можно хранить compact mask, из которой однозначно определяется, какие deterministic slots еще живы, а какие уже убиты и не должны спавниться повторно. ## Current Context Enemy slot model должна прийти из `TASK-0005`, а общая схема world save из `TASK-0004`. ## Source Of Truth - `docs/tasks/items/TASK-0004.md` - `docs/tasks/items/TASK-0005.md` - runtime code сохранений мира после внедрения ## Read First - `docs/tasks/items/TASK-0004.md` - `docs/tasks/items/TASK-0005.md` - `Assets/Scripts/WorldGen/InfiniteWorldGenerator.cs` ## Scope In - формат битовой маски для enemy slots - правила чтения и записи маски в world save - применение маски при загрузке и регенерации чанка - расширяемость на случай числа врагов больше емкости одного int ## Scope Out - миграции формата сохранений между версиями - сложная аналитика по прогрессу зачистки мира ## Constraints - индекс бита должен жестко соответствовать deterministic enemy slot - нельзя терять совместимость между спавном и сохранением ## If You Find Drift - если реализация спавна не дает стабильного соответствия slot -> bit, нужно остановиться и исправить основу ## Suggested Approach 1. Определить каноническое значение бита: жив/мертв и правила инициализации. 2. Описать сериализацию маски в world save. 3. Применить маску при загрузке чанка до фактического spawn instantiate. ## Acceptance Criteria - убийство врага меняет корректный бит в состоянии чанка - повторный вход в мир не возрождает уже убитых врагов - система поддерживает сценарий с несколькими врагами на чанк без потери детерминизма ## Verification - ручной тест: убить часть врагов, сохранить мир, перезагрузить и проверить состав чанка - сверка битовой маски с фактически заспавненными слотами ## Risks / Open Questions - нужно определить политику для чанков, где врагов больше, чем можно удобно хранить в одном `int` ## Human Decisions Needed - none currently ## Decision Log - `2026-03-30` - пользовательское требование о bitmask сохранено как отдельный канонический task. ## Handoff Notes Если реализация выберет не один `int`, а массив масок, нужно сохранить семантику user-facing идеи: состояние читается побитово и зависит от slot index.