[Fix] Update Tasks to Voxel Engine
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
---
|
||||
id: TASK-0022
|
||||
title: Интегрировать спавн врагов в VoxelWorldGenerator
|
||||
summary: Добавить в воксельный генератор мира интеграцию спавна врагов при загрузке чанков, используя детерминированные правила и kill-state.
|
||||
priority: Highest
|
||||
area: worldgen
|
||||
owner: unassigned
|
||||
created: 2026-03-31
|
||||
updated: 2026-03-31
|
||||
execution_time: 1d
|
||||
depends_on:
|
||||
- TASK-0003
|
||||
- TASK-0005
|
||||
- TASK-0006
|
||||
canonical_docs:
|
||||
- docs/tasks/Index.md
|
||||
related_files:
|
||||
- Assets/Scripts/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/Scripts/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
|
||||
|
||||
Если окажется, что генератор чанков работает и на клиенте, убедиться, что спавн вызывается только на сервере.
|
||||
Reference in New Issue
Block a user