102 lines
4.8 KiB
Markdown
102 lines
4.8 KiB
Markdown
---
|
||
id: TASK-0026
|
||
title: Реализовать миникарту и сохранение карты у хоста
|
||
summary: Добавить миникарту и хранить ее открытое состояние у хоста так, чтобы карта была общей для всех игроков мира и сохранялась вместе с world-state.
|
||
priority: High
|
||
area: ui
|
||
owner: unassigned
|
||
created: 2026-03-31
|
||
updated: 2026-03-31
|
||
execution_time: 2d
|
||
depends_on:
|
||
- TASK-0003
|
||
- TASK-0004
|
||
canonical_docs:
|
||
- docs/tasks/Index.md
|
||
related_files:
|
||
- Assets/Scripts/VoxelWorld/Runtime/VoxelWorldGenerator.cs
|
||
- Assets/Scenes/
|
||
---
|
||
|
||
# TASK-0026 - Реализовать миникарту и сохранение карты у хоста
|
||
|
||
## Status
|
||
|
||
Статус задачи ведется в `docs/tasks/Index.md` и является каноническим там.
|
||
|
||
## Why
|
||
|
||
Миникарта нужна как gameplay и navigation feature, но ее состояние не должно жить только локально у клиента. Хост должен быть источником истины для открытой карты мира, чтобы все игроки видели согласованное состояние.
|
||
|
||
## Expected Outcome
|
||
|
||
В игре есть миникарта, а открытые области карты сохраняются в состоянии мира у хоста и корректно восстанавливаются для всех игроков при повторном входе в мир.
|
||
|
||
## Current Context
|
||
|
||
Воксельный мир уже генерируется чанками, а world persistence выделен в отдельные задачи. Миникарта должна опираться на те же координаты чанков и храниться как часть world-state, а не как чисто локальный UI cache.
|
||
|
||
## Source Of Truth
|
||
|
||
- `docs/tasks/items/TASK-0003.md`
|
||
- `docs/tasks/items/TASK-0004.md`
|
||
- runtime реализация minimap и world save
|
||
|
||
## Read First
|
||
|
||
- `docs/tasks/items/TASK-0003.md`
|
||
- `docs/tasks/items/TASK-0004.md`
|
||
- `Assets/Scripts/VoxelWorld/Runtime/VoxelWorldGenerator.cs`
|
||
|
||
## Scope In
|
||
|
||
- базовое UI отображение миникарты
|
||
- определение, какие области карты считаются открытыми
|
||
- host-authoritative хранение открытой карты мира
|
||
- восстановление состояния миникарты для всех игроков
|
||
|
||
## Scope Out
|
||
|
||
- полнофункциональная world map с маркерами, пингами и пользовательскими заметками
|
||
- сложная система fog-of-war по каждому игроку отдельно
|
||
|
||
## Constraints
|
||
|
||
- источник истины по открытой карте у хоста
|
||
- состояние карты должно быть частью world-state, а не только локального клиента
|
||
- решение должно быть совместимо с chunked voxel world
|
||
|
||
## Suggested Approach
|
||
|
||
1. Определить формат minimap data на уровне чанков/областей.
|
||
2. Выбрать правило открытия карты: посещение, радиус обзора, загрузка чанка или явный reveal.
|
||
3. Сохранить это состояние в world save у хоста.
|
||
4. Подключить синхронизацию minimap state для новых и уже подключенных игроков.
|
||
|
||
## Acceptance Criteria
|
||
|
||
- миникарта отображает мир в согласованной форме
|
||
- открытая карта сохраняется у хоста
|
||
- новые игроки и повторно подключившиеся игроки получают актуальное состояние карты
|
||
|
||
## Verification
|
||
|
||
- ручной тест: открыть часть мира, перезапустить мир и проверить восстановление
|
||
- ручной тест: второй игрок подключается и получает ту же карту
|
||
|
||
## Risks / Open Questions
|
||
|
||
- нужно решить, хранить ли карту как coarse chunk-state, bitmap или другой компактный формат
|
||
|
||
## Human Decisions Needed
|
||
|
||
- none currently
|
||
|
||
## Decision Log
|
||
|
||
- `2026-03-31` - задача добавлена как backlog feature с host-authoritative persistence minimap state.
|
||
|
||
## Handoff Notes
|
||
|
||
Если позже понадобится отдельная личная карта игрока, не ломать эту задачу: вынести per-player overlays поверх общего world minimap state.
|