--- id: TASK-0019 title: Добавить генерацию данжей-предфабов поверх биомов мира summary: Реализовать BackLog-задачу на детерминированное размещение dungeon prefab в voxel-мире: одинаковая позиция по seed, встраивание через stamp/carve и сохранение результата. priority: High area: worldgen owner: pretty_kotik created: 2026-03-30 updated: 2026-03-30 execution_time: 1d6h depends_on: - TASK-0003 canonical_docs: - docs/tasks/Index.md related_files: - Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs - Assets/ChunkTemplate.asset --- # TASK-0019 - Добавить генерацию данжей-предфабов поверх биомов мира ## Status Статус задачи ведется в `docs/tasks/Index.md` и является каноническим там. Допустимые значения статуса: - `BackLog` - `ToDo` - `InProgress` - `Review` - `Done` ## Why Dungeon prefab должны одинаково размещаться по seed и быть частью мира, а не отдельной "декорацией". Для voxel-мира это означает stamp/carve в данных чанков (и, при необходимости, пересборку визуального меша/коллайдеров). ## Expected Outcome Система worldgen умеет по seed и biome rules выбрать место для dungeon prefab, встроить его в voxel-мир (stamp/carve в воксельных данных чанков), удалить конфликтующие воксели и воспроизвести тот же результат у всех клиентов. ## Current Context В проекте есть `VoxelWorldGenerator` с chunked runtime loop. Dungeon placement должен строиться поверх deterministic world coordinates и biome sampling, но применять изменения на уровне voxel chunk data. ## Source Of Truth - `docs/tasks/items/TASK-0003.md` - готовые dungeon prefab assets - future dungeon placement code ## Read First - `docs/tasks/items/TASK-0003.md` - `Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs` - `Assets/ChunkTemplate.asset` ## Scope In - deterministic placement dungeon prefab по seed и biome rules - выбор world-space/voxel-space якоря (anchor) и bounded volume для stamp/carve - stamp/carve в voxel chunk data и пересборка меша/коллайдера - одинаковое размещение у всех игроков ## Scope Out - процедурная сборка самих данжей из модулей - сложная логика лута и боссов внутри данжа ## Constraints - данж не должен существовать только как отдельный GameObject без интеграции в voxel данные мира - размещение должно быть детерминированным и совместимым с chunked worldgen ## If You Find Drift - если prefab placement требует недетерминированного ручного runtime-подбора, это drift ## Suggested Approach 1. Определить правила выбора позиции данжа по biome/world rules. 2. Определить формат dungeon stamp (например: набор voxel изменений, высотная маска, volume SDF или готовый "voxel brush"). 3. Реализовать применение stamp/carve в voxel chunk data и пересборку визуала. 4. Подготовить интеграцию с chunk loading и world save. ## Acceptance Criteria - один и тот же seed размещает один и тот же dungeon prefab в одном и том же месте - данж встраивается в voxel-мир через stamp/carve и изменяет voxel chunk data - результат одинаков у всех игроков и повторяем после загрузки мира ## Verification - повторная генерация одинакового мира и сверка положения данжа - ручная проверка отсутствия "парящих" коллайдеров/дыр после stamp/carve ## Risks / Open Questions - нужно решить, как хранить пересечение данжа с несколькими чанками и как кэшировать/сохранять stamp results ## Human Decisions Needed - none currently ## Decision Log - `2026-03-31` - задача переписана под voxel worldgen: stamp/carve вместо grid/tile carving. ## Handoff Notes При переводе в `ToDo` желательно отдельно перечислить доступные dungeon prefab и biome placement rules.