feat(ui): Phase 29 map visibility toggles
Tests · Go / test (push) Successful in 2m31s
Tests · UI / test (push) Failing after 8m7s

Adds the gear-icon popover on the map view with per-game persistence
of every category toggle plus the wrap-mode radio. Hide-by-id and
visibility-fog facilities land on the renderer so every flip applies
within one frame without a Pixi remount; the wrap-mode toggle keeps
its existing remount + camera-preserve path. A new server-side turn
force-resets every flag to defaults so a hidden category never makes
the player miss the next turn's news.

Also fixes the FligthDistance → FlightDistance typo in pkg/calc/race.go
(plus the single Go caller); the TS side keeps duplicating the formula
until a race-level WASM bridge lands.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ilia Denisov
2026-05-19 21:33:53 +02:00
parent 65c0fbb87d
commit 2bd1b54936
32 changed files with 3046 additions and 63 deletions
+45 -1
View File
@@ -806,7 +806,51 @@ Directory-промоушен ([Раздел 5](#5-реестр-названий-
каталоге, расширить `CHECK`-констрейнт миграции и вызвать
`notification.Submit` из подходящего доменного модуля).
### 6.7 Перекрёстные ссылки
### 6.7 Управление видимостью карты
Карта (`ui/frontend/src/lib/active-view/map.svelte`) несёт
попап-«шестерёнку» (`map-toggles.svelte`) в правом верхнем углу
канваса — посекторный интерфейс видимости для конкретной игры.
Попап содержит три группы элементов; любое изменение применяется
в пределах одного кадра (без перемонтирования Pixi):
- **Объекты** — шесть независимых чекбоксов: группы в
гиперпространстве, входящие группы, неопознанные группы,
грузовые маршруты, метки сражений, метки бомбардировок.
- **Планеты** — четыре строки: чужие / необитаемые /
неопознанные виды планет плюс выключатель «показывать
недостижимые планеты», который при выключении прячет каждую
не-LOCAL планету, отстоящую дальше
`FlightDistance(localPlayerDrive)` от любой LOCAL-планеты
(метрика учитывает торическую развёртку).
- **Вид** — переключатель тумана видимости (чуть более светлая
заливка вне объединения окружностей
`VisibilityDistance(localPlayerDrive)` вокруг LOCAL-планет;
LOCAL-планеты всегда вне фильтра) плюс радиогруппа
«торус / без переноса», переключающая режим рендерера с
сохранением центра камеры.
LOCAL-планеты отрисовываются всегда — для них тоггла нет.
Остальные тогглы по умолчанию включены. Скрытие планеты
каскадно прячет все привязанные к ней примитивы: метки сражений
и бомбардировок на этой планете, точки in-space и incoming
ship-групп вместе с траекториями, летящих *к* этой планете, и
грузовые стрелки, чей источник или назначение — эта планета.
Каскад не оставляет на карте «осиротевших» меток, указывающих
в пустоту.
Состояние видимости сохраняется по игре в namespace кеша
`game-map-toggles/{gameId}` (см.
[`ui/docs/storage.md`](../ui/docs/storage.md)). При каждом
новом серверном ходе, ставшем текущим — либо через `setGame`,
обнаруживший `currentTurn` сервера выше последнего сохранённого
`lastResetTurn`, либо при явном клике пользователя по
аффордансу «новый ход» — все тогглы принудительно
сбрасываются в дефолт, чтобы новое содержимое хода не оказалось
скрытым устаревшими настройками. Навигация по истории
(`viewTurn`) общее состояние тогглов не сбрасывает.
### 6.8 Перекрёстные ссылки
- Backend ↔ engine wire-контракт (`pkg/model/{order,report,rest}`):
[ARCHITECTURE.md §9](ARCHITECTURE.md#9-backend--game-engine-communication).