Files
2026-04-08 21:10:34 +07:00

112 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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.