ОТЛОЖЕНО (решение пользователя): относится к блоку соревнований (этап 5), пока не делаем.

04. След прошлого полёта (полупрозрачная линия)

Цель: по настройке в мире рисуется траектория прошлого полёта полупрозрачной линией, чтобы сравнить текущий полёт с предыдущим.

Контекст: docs/guide/game.md, scripts/game/flight_stats.gd (трек и итог — владение ui/02, после её приёмки), docs/guide/terrain.md (latlon_to_local), docs/guide/architecture.md (модульность), REQUIREMENTS.md (FR-22 — подсказок нет: след выключен по умолчанию). Папки-владения: scripts/game/ghost_track.gd (новый), scripts/game/track_store.gd (новый), configs/game.json → секция ghost_track, tests/game/test_ghost_track.gd; одна строка подключения в scripts/game/game.gd; переключатель в экране настроек — через ui (если ui/02 уже принят — правка его файла минимальна, перечислить в отчёте).

Шаги

  1. TrackStore (RefCounted): при завершении полёта сохраняет трек (время, позиция, высота, вариометр, id локации) в user://tracks/, хранит последние N (конфиг, по умолчанию 10); формат JSON с lat/lon (через terrain.local_to_latlon) — чтобы потом загружать и реальные IGC.
  2. GhostTrack (Node3D): загружает последний трек той же локации, рисует полупрозрачную ленту/линию (ImmediateMesh или MeshInstance с лентой, ширина и прозрачность — конфиг), с затуханием по дистанции; опция раскраски по вариометру (подъём тёплый, снижение холодный) — отдельный флаг, по умолчанию выключена.
  3. Настройки: «Показывать след прошлого полёта» (выкл. по умолчанию) и «Раскрашивать по вариометру» (выкл.). Сохраняются в user://configs.
  4. Задел под IGC: интерфейс загрузки трека из массива точек lat/lon/alt/time — без парсера IGC (это позже).

Критерий приёмки

  • Тест: полёт → трек сохранён (N ≤ лимита), повторный запуск на той же локации → GhostTrack построен, число точек совпадает; на другой локации — нет.
  • Скриншот сзади (timeout 120): видна полупрозрачная линия прошлого полёта, не перекрывает дельтаплан; с выключенной настройкой — ничего.
  • tools/lint.sh — чисто, тесты game зелёные, +≤0,2 мс GPU.

Зависимости: после приёмки ui/02 (итог полёта, flight_stats) и game/01. Модель: sonnet. Размер: M.