Files
TheDeclineOfWarriors/docs/tasks/items/TASK-0022.md
T

4.4 KiB
Raw Blame History

id, title, summary, priority, area, owner, created, updated, execution_time, depends_on, canonical_docs, related_files
id title summary priority area owner created updated execution_time depends_on canonical_docs related_files
TASK-0022 Интегрировать спавн врагов в VoxelWorldGenerator Добавить в воксельный генератор мира интеграцию спавна врагов при загрузке чанков, используя детерминированные правила и kill-state. Highest worldgen unassigned 2026-03-31 2026-03-31 1d
TASK-0003
TASK-0005
TASK-0006
docs/tasks/Index.md
Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs

TASK-0022 - Интегрировать спавн врагов в VoxelWorldGenerator

Status

Статус задачи ведется в docs/tasks/Index.md и является каноническим там.

Why

Спавн врагов должен быть частью runtime world loop: при появлении/активации чанка сервер должен спавнить deterministic roster, а при повторной загрузке учитывать kill-state, чтобы мир ощущался стабильным и сохраняемым.

Expected Outcome

  • При загрузке чанка сервер вычисляет deterministic spawn roster для этого чанка.
  • Сервер спавнит врагов в пределах чанка (или в заданных spawn zones), не создавая дублей.
  • При наличии kill-state для чанка повторный спавн не создает уже убитых врагов.

Current Context

В проекте уже есть VoxelWorldGenerator, который управляет жизненным циклом чанков. Задачи TASK-0005 и TASK-0006 описывают deterministic roster и kill-state, но без интеграции в мир спавн не работает end-to-end.

Source Of Truth

  • docs/tasks/items/TASK-0005.md
  • docs/tasks/items/TASK-0006.md
  • Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs

Scope In

  • точка интеграции: событие/хук на появление чанка в runtime
  • вычисление spawn roster для (seed, chunkCoord)
  • привязка enemySlotIndex к конкретному spawned enemy
  • применение kill-state при (ре)загрузке чанка

Scope Out

  • AI поведение врагов (это TASK-0012)
  • сложные spawn director механики

Constraints

  • сервер является источником истины для спавна
  • результат должен быть детерминированным

Suggested Approach

  1. Выделить интерфейс/сервис IChunkSpawnService (или аналог) и вызывать его из VoxelWorldGenerator при загрузке чанка.
  2. Реализовать вычисление roster, используя уже согласованный контракт из TASK-0005.
  3. Перед фактическим спавном проверить kill-state из TASK-0006.
  4. Зафиксировать правила despawn при выгрузке чанка.

Acceptance Criteria

  • при повторной загрузке одного и того же чанка сервер спавнит одинаковый roster
  • убитые слоты не спавнятся повторно после загрузки world save

Verification

  • ручной тест: зайти/выйти из зоны чанка и убедиться, что roster стабилен
  • тест: убить врага, сохранить/перезагрузить мир, проверить отсутствие этого слота

Risks / Open Questions

  • нужно решить, где хранить runtime mapping enemySlotIndex -> NetworkObject и когда его очищать

Human Decisions Needed

  • none currently

Decision Log

  • 2026-03-31 - задача выделена отдельно как интеграция deterministic spawn в runtime voxel-chunk loop.

Handoff Notes

Если окажется, что генератор чанков работает и на клиенте, убедиться, что спавн вызывается только на сервере.