План: группы задач
Верхний уровень плана. Работа делится на группы (области кода). Для каждой группы отдельный
планировщик пишет карточки задач в docs/plan/<папка группы>/NN-кратко.md (цель, контекст, владения,
шаги, критерий приёмки, модель, размер S/M/L, закрываемые требования).
Объём плана — доделать основу: все открытые пункты TODO.md и требования REQUIREMENTS.md, кроме разделов TODO «Идеи», «Позже», «Места» (новые места), требований «Позже»/«на будущее»/«далёкое будущее» (VR-23…VR-30, FR-14c, сменные вариометры FR-25a, английский NFR-4) и явно отложенного пользователем (слабое железо/Compatibility, CI, поломка крыла, настоящая аэродинамика, аэробуксировка). Вех «показа» нет: после выполнения пользователь сам всё посмотрит и попробует (только Linux; Windows-сборка — позже). Разделы «Вопросы пилотам» — открытые вопросы из questions.md: ответы поправят конфиги, но работу не блокируют.
Правила для планировщиков групп:
- карточка трогает только папки своей группы; изменения чужого API — отдельной карточкой в группе-владельце;
- стык двух групп (например, «ветер → трава») делает группа-потребитель через уже опубликованный API; если API нет, сначала идёт карточка у владельца;
- отложено пользователем, не планировать: оптимизация под слабое железо / Compatibility, CI, поломка крыла (FR-14c), настоящая аэродинамика, аэробуксировка, новые места из раздела «Места» TODO.md;
- сейчас работают агенты (их задачи не планировать заново, учитывать как незавершённые): integration, terrain2, atmosphere, vegetation, sounds — см. отметки «в работе» ниже.
Размер группы — объём оставшейся работы: S ≈ 1–2 карточки, M ≈ 3–5, L ≈ 6+.
Объём (уточнение координатора)
Делаем основу: этапы 0–5 TODO. Не планируем этап 6 «Полировка и хорошая графика» (кроме уже сделанного), время суток (VR-5), смог и дождь под тучами (записаны «в TODO, не в работу»), векторную карту через martin, а также «Идеи», «Позже», «Места».
Сводка
| # | Группа | Папка плана | Объём | Сейчас в работе |
|---|---|---|---|---|
| 1 | Физика полёта | flight/ | S | — |
| 2 | Физика атмосферы | atmosphere/ | M | atmosphere (частично) |
| 3 | Графика облаков и атмосферных явлений | clouds/ | M | atmosphere (Cb, пыль, пелена, лентикуляры) |
| 4 | Рельеф, земля, небо и дымка | terrain/ | L | terrain2 |
| 5 | Растительность | vegetation/ | M | vegetation, terrain2 (колыхание травы) |
| 6 | Объекты мира | world_objects/ | S | — |
| 7 | Модели и визуал крыла/пилота | models/ | L | integration (позы пилота) |
| 8 | Приборы | instruments/ | S | — (пункты TODO «в работе» устарели — проверить) |
| 9 | Звук | sound/ | M | sounds |
| 10 | Задания, тренировки, рекорды | tasks/ | S | — |
| 11 | Интерфейс (меню и экраны) | ui/ | M | integration (меню, «Управление») |
| 12 | Сцена игры и управление | game/ | M | integration (кабина, разбег, позы) |
| 13 | Сборка, проверка и выпуск | build/ | M | — (черновики карточек уже есть) |
1. Физика полёта — flight/ (S)
- Владения:
scripts/flight/(кромеglider_visual.gd→ группа 7),configs/wings/,configs/pilot.json,configs/flight.json,tests/flight/. Документ — docs/guide/flight.md. - API:
FlightModel(setup,step(dt, input, air_fn, ground_fn),reset_on_ground/in_air,phase(), сигналыtook_off,landed(result),takeoff_failed),Glider(setup,set_input,set_air_fn,set_ground_fn,step(dt),get_marker(name), сигналtelemetry_updated(t)),Telemetry. - Сделано: поляра, масса, 3 крыла, тангаж/крен с инерцией, сваливание, ветер, воздействие воздуха на
крыло, разбег, выравнивание, оценка посадки, перегрузка (
load_meter). - Открыто: подгонка по отзывам пилотов (поляра спорт-крыла, инерция крена у тяжёлого пилота, выравнивание во встречный ветер, момент отрыва); FR-1/FR-3 — сверка с реальным крылом пилота.
- Вопросы пилотам (⏳): цифры крыла пилота и его вес; крыло у тяжёлого пилота «тяжелее» в крене?; как садились в сильный встречный — выравнивали полностью или слегка?; какие цифры поляры привычны.
- Объём мал: модель готова; параметры поправят ответы пилотов, когда придут (работу групп не блокирует).
Ждёт ответа пилота (questions.md → «Вираж»): устойчивость по крену по типам крыльев (учебное выравнивается, спортивное нейтрально/заваливается в крутом вираже), обратное рыскание на входе, потеря скорости в вираже и подтягивание трапеции.
2. Физика атмосферы — atmosphere/ (M)
- Владения: в
scripts/atmosphere/— модель воздуха:atmosphere.gd,thermal_field.gd,atmo_thermal.gd,wind_model.gd,ground_field.gd,wave_field.gd,storm_field.gd(физика),dust_model.gd,cloud_physics.gd,bird_flock.gd(поведение);configs/atmosphere.json,configs/weather/,tests/atmosphere/. Документ — docs/guide/atmosphere.md. Файлы делятся с группой 3 по списку выше. - API:
set_weather,set_wind,set_ground(height_fn, sun_fn, surface_fn),set_sun_direction,air_velocity_at(pos),mean_wind_at,step(dt),get_cloudbase_msl,cloud_density_at,get_insolation,thermals_near,set_thermal_mode,load_static_thermals,focus_node. - Сделано: термики с профилем, кольцом опускания, сносом, жизненным циклом и привязкой к рельефу; склоновый подъём, подветренные роторы, фоновое опускание, пресеты, облачный подсос; Cb с нисходняком и фронтом порывов, волна, пыль, пелена гасит прогрев (физика).
- Открыто: FR-14d тучи с дождём не только у Cb (ливневое облако → нисходняк, холодный порывистый ветер); FR-34a проверка проходимости маршрута на всех местах в средний/сильный день (тест-статистика термиков); VR-22 птицы держатся в более слабом подъёме; суточный цикл термиков (часть VR-5, ждёт солнца из группы 4); волна: физика волнового подъёма и роторов проверить против облаков группы 3 (VR-27 — в TODO этапа 2).
- Вопросы пилотам (⏳): болтает сильнее/слабее, чем в жизни?; с чего чаще отрывалось — опушки, каменные
гребни, сёла/дороги? (веса
world.json → surface.thermal, владелец — группа 4).
3. Графика облаков и атмосферных явлений — clouds/ (M)
- Владения: в
scripts/atmosphere/— рендер:cloud_layer.gd,cloud_model.gd,cloud_compositor_effect.gd,cloud_*.gdshader*,cirrus*,dust_devil*,dust_devils.gd,bird.gdshader; ключиclouds.*конфига.scripts/game/cloud_whiteout.gd— у группы 12. - API: облака рисует сама
Atmosphere(дочерниеClouds,Birds); качествоclouds.quality. - Сделано: объёмные облака (compute, low-res буфер), стадии жизни, плоская кромка, тени, улицы, переразвитие, Cb с наковальней и виргой, лентикуляры/шапки/роторные, пыльные вихри, перистая пелена с гало.
- Открыто: известные проблемы из docs/guide/atmosphere.md (Cb «гриб», лентикуляры без «стопки тарелок»); дождевые полосы до земли под тучами (FR-14d, визуал к физике группы 2); проверка FR-14a «читаемость стадии и подсоса» на 1–20 км и снизу — скриншот-сравнение с фото; облака и дымка — порядок наложения (questions terrain2.3).
- Вопросы пилотам: «по облакам видно, где сосёт / где распадается?» (необязательный).
4. Рельеф, земля, небо и дымка — terrain/ (L)
- Владения:
scripts/terrain/(кроме файлов растительности → группа 5),scripts/world/,tools/terrain/,data/terrain/,configs/locations/,configs/world.json,tests/terrain/. Документ — docs/guide/terrain.md. - API:
Terrain:height_at,normal_at,get_start_sites,get_landing_sites,sun_exposure_at,surface_at,thermal_source_strength_at,latlon_to_local,set_clearings,set_wind_sources,set_pilot,get_grass_palette, сигналloaded;MapPicker.point_picked;SkyEnvironment:setup_camera,set_inversion_height_msl,get_haze_top_msl. - Сделано: места Онгудай, Аскарово, Манжерок/Алтай, рантайм-загрузка по координатам, LOD до 110 км, карта поверхности WorldCover — общая для цвета и термиков (VR-4), фактура лугов/полей, лес в три плана, небо, солнце, дымка с верхней границей на инверсии (VR-3).
- В работе (terrain2): цвета, лес/поля с высоты, скалы, Аушкуль, просеки, колыхание травы.
- Открыто: смог над городами и посёлками до ~500 м (VR-3, слова пилота); вода: рябь и пятна от порывов
(VR-16); реки/озёра OSM вместо масок стока (VR-9, данные у группы 6); солнце по координатам, дате и
времени + выбор времени старта (VR-5, база для суточного цикла); кромка леса как триггер и препятствие
(VR-21 — проверить, что закрыто работой terrain2); векторная карта выбора старта через martin (TODO этап 6,
сейчас отмывка
MapPicker). - Вопросы пилотам (⏳, необязательные по решению пользователя): точные старты/посадки Онгудая, Биягоды, Аушкуля.
5. Растительность — vegetation/ (M)
- Владения:
scripts/vegetation/(создаёт агент vegetation),configs/vegetation.json; изscripts/terrain/—grass_field.gd,grass.gdshader,tree_placer.gd,terrain_tree_models.gd,tree_model.gdshader,forest_impostors.*,terrain_trees.gd,trees.gdshader(договориться с terrain2 о переносе после его завершения);tools/blender/build_trees.py,assets/models/trees/. - API: ветер в шейдеры —
TerrainWind(группа 4); просеки —Terrain.set_clearings; палитра —get_grass_palette. - Сделано: деревья 5 пород × 3 LOD, импостеры 0,35–3,5 км, травинки ≤ 30 м с приминанием, качание от ветра.
- В работе: vegetation — травинки вблизи; terrain2 — колыхание травы и нивы волнами (VR-17).
- Открыто: порывы и термики «бегут» по траве/посевам как читаемый признак (VR-17 — проверка с пилотом); лес с объёмом и кромкой (VR-21, вместе с группой 4); вариации деревьев (2–3 сида, импостеры 8 ракурсов).
- Вопросы пилотам: «по траве видно подход термика?» (необязательный).
Рекомендации для GrassField (от агента vegetation, не реализовано):
- Прореживание вдали: пучкам в куске — случайный rank 0..1; виден, если rank < плотность(расстояние); дальние пучки шире (far_width_k). Вершин вдали в 5–8 раз меньше.
- Волны порывов: смещение копить на CPU (offset += dir·speed·dt) → uniform; порывистость = |air_velocity_at − mean_wind_at|, сглаженная экспонентой — иначе рисунок скачет при смене ветра.
- Приминание гасить по высоте ног над землёй: полное до ~0,4 м, ноль выше ~1,2 м; нормаль травинки явно, без переворота (иначе обратные стороны темнеют при cull_disabled).
- Посадки — прямоугольником (axis_deg, length_m, width_m из WorldObjects.get_landing_sites), не кругом; сухость травинок по локации поверх палитры (Онгудай +0,35, Аскарово +0,25).
6. Объекты мира — world_objects/ (S)
- Владения:
scripts/world_objects/,scenes/world_objects/,configs/world_objects.json,data/osm/,tools/osm/,tests/world_objects/,assets/models/world/. Документ — docs/guide/world-objects.md. - API:
WorldObjects.setup(terrain, air),wire_hit(a, b),obstacle_hit(a, b),get_landing_sites(),clearing_mask_for(id),is_clear_at,WorldClearings.build_for(id), сигналbuilt. - Сделано: ветроуказатели по локальному ветру и в роторе (VR-7, VR-20), посадки с препятствиями (VR-12), дороги, дома, ЛЭП с проводами и столкновением (VR-9 частично, VR-10), просеки.
- Открыто: дым от труб и костров (VR-15: поднимается в термике, сносится, растекается под инверсией); выдача рек/озёр OSM группе 4.
- Вопросы пилотам (необязательные): где садились на каждом месте.
7. Модели и визуал крыла/пилота — models/ (L)
- Владения:
tools/blender/(кромеbuild_trees.py),assets/models/(glider_*, pilot, instrument, vario_90s, bird),assets/source/,assets/shaders/sail/,scripts/flight/glider_visual.gd,scenes/glider/*_visual.tscn,scenes/models_preview/. Документ — docs/guide/models.md (контракт маркеров и осей). - API: маркеры
HangPoint,PilotHead,BaseBar,InstrumentMount,VarioMount,WingTipL/R,CockpitCamera;SailMaterial(параметры паруса); анимации пилота stand/walk/run/run_air/climb_in/prone/ climb_out/flare (запускаетPilotAnimatorгруппы 12). - Сделано: 3 крыла, пилот со скелетом и 8 позами, планшет, вариометр 90-х, птица; шейдер паруса с просвечиванием и нормалями.
- Открыто (главное в кадре №1): тень крыла на земле (VR-5/VR-6 — сейчас
cast_shadows: false, нужна для оценки высоты ниже 100 м); мягкий колышущийся парус на малой скорости синхронно со звуком (VR-11) и трепет задней кромки (VR-19); парус и пилот высокого качества (майлар, латы, руки на стойках, перчатки, IK рук к трапеции конкретного крыла); детали приборов (кнопки, стекло с бликом, карабины). - Вопросы пилотам: нет открытых.
8. Приборы — instruments/ (S)
- Владения:
scripts/instruments/,scenes/instruments/,configs/instruments.json,tests/instruments/. Документ — docs/guide/instruments.md. - API:
Vario,FlightInstrument(update,get_texture,set_page,set_task,set_task_state,set_sound_settings,get_wind,reset),Instrument3D,InstrumentOverlay,ThermalAssistant,WindEstimator,InstrumentTask. - Сделано: 5 страниц (полёт, карта, ветер/глиссада, задание/настройки, помощник центровки), честная оценка ветра, прибор в углу для внешних камер, экран вариометра 90-х.
- Открыто:
vario_90s_3d.tscnуказан вconfigs/game.json, но сцены нет — модель на стойке + выбор звука в настройках (FR-25a, без сменных моделей — это «далёкое будущее»); читаемость планшета из кабины (размер шрифта, контраст — вместе с группой 7 по корпусу); часть TODO этапа 4 помечена «в работе» без агента (помощник центровки, прибор в углу) — сверить с кодом и закрыть. - Вопросы пилотам (⏳): какие приборы у пилота и где закреплены — подогнать вид.
9. Звук — sound/ (M)
- Владения:
scripts/audio/,scenes/audio/,configs/audio.json,assets/sounds/,tools/sounds/,tests/audio/. Документы — docs/guide/instruments.md («Звуки полёта»), docs/research/sounds.md. - API:
VarioAudio(set_vario,set_volume_db,set_enabled),FlightAudio(update(t, extra),play_landing,play_step,play_carabiner), аудиошины Master/Vario/Wind/Effects/Ambient. - Сделано: вариометр (XC Tracer и classic_90s), поток, тросы, парус, каркас, разбег, посадка, окружение.
- В работе (sounds): генерация на GPU и оригиналы Freesound вместо превью.
- Открыто: сведение громкостей по фазам (вариометр слышен всегда, поток не утомляет) — с замерами громкости, а не только на слух; хлопание паруса синхронно с визуалом группы 7; звук дождя/порывов для FR-14d.
- Вопросы: прослушать звуки (пользователь, sounds.6); пилоту — похож ли поток/вариометр.
10. Задания, тренировки, рекорды — tasks/ (S)
- Владения:
scripts/tasks/,scenes/tasks/,configs/tasks/,tests/tasks/. Документ — docs/guide/tasks.md. - API:
Task.load_config / list_available,TaskTracker(setup,update(t),get_state,result, сигналыturnpoint_reached,start_taken,goal_reached,task_failed),TrainingMode(update,on_landed,result, сигналfinished),FlightRecords.add_flight. - Сделано: вся логика FR-35…FR-37 без нод, импорт
.xctsk, оптимизатор маршрута, 3 тренировки, рекорды. - Открыто: в игру не подключено — выбор режима, трекер в
Game.tick(), итог и «Новый рекорд!» (делают группы 11 и 12 по API из docs/guide/tasks.md); здесь — только правки логики по их запросам и стартongudai_demoнаkayancha_south.
11. Интерфейс — ui/ (M)
- Владения:
scripts/ui/,scenes/ui/,locale/,configs/ui.json. Документ — docs/guide/game.md («Как добавить экран»). - API: экраны наружу — только сигналы;
UiKit,AssetsCredits,UserSettings.save_patch. - Сделано: меню, «Полёт…» (крыло, масса, погода, ветер, место), пауза, настройки, «Об игре», итог, tr().
- В работе (integration): простое меню «фото + кнопки», экран «Управление», выбор старта на карте.
- Открыто: выбор режима (свободный / задание / тренировка) и итог с рекордами (FR-34…FR-37 — с группой 12); выбор времени старта (VR-5, после группы 4); выбор вариометра/звука 90-х в настройках (FR-25a); «Как летать» — экран в меню или расширение «Управления» (по желанию пользователя); английский (NFR-4) — вне объёма.
12. Сцена игры и управление — game/ (M)
- Владения:
scenes/main.*,scenes/game/,scripts/game/,scripts/core/,configs/game.json,configs/controls.json,configs/camera.json,tests/game/. Документ — docs/guide/game.md. - API:
Game.start/restart/tick,InputController,CameraRig,PilotAnimator,WorldLink,GraphicsPresets,UserSettings,LaunchOptions(командная строка,--smoke,--autopilot). - Сделано: сборка всех модулей, порядок шага, камеры, мышь-голова, геймпад, белая мгла в облаке, столкновения, пресеты графики, автопилот, 5-минутный тест полёта.
- В работе (integration): кабина (VR-11), разбег W+Shift с защёлкой (FR-30), позы пилота по фазам.
- Открыто: подключение заданий/тренировок/рекордов (FR-35…37); часы симуляции и ускорение времени (VR-5, после группы 4); подключение дождя/смога/дыма по мере появления API.
13. Сборка, проверка и выпуск (Linux) — build/ (M)
- Владения:
tools/build.sh,tools/check.sh,tools/lint.sh, новыеtools/soak.sh,tools/bench/,tests/stability/,export_presets.cfg(Linux),project.godot(окно),TODO.md,docs/guide/architecture.md(таблица модулей), ключиgraphics*вconfigs/game.json(по согласованию с группой 12). - Сделано:
tools/check.sh(линтер, тесты, сборка Linux, smoke),tools/build.sh linux. - Открыто: матрица стабильности (места × крылья × погоды, 30-мин прогон сборки); замеры NFR-1 (60 FPS на дискретной) и NFR-2 (≤ 10 с) с подбором пресета medium; дефолты первого запуска; синхронизация TODO.md и ARCHITECTURE с кодом (многие «в работе» уже сделаны). Windows-сборка — вне объёма (позже).
- Черновики карточек:
build/(помечены «черновик»;01и часть02про показ — неактуальны).
Зависимости между группами
4 Рельеф ──surface_at, height, солнце──▶ 2 Атмосфера ──air_velocity_at, облака, cloudbase──▶ 3 Облака
│ TerrainWind ◀── mean_wind/thermals (2) │
├──▶ 5 Растительность (ветер, просеки, палитра) ├──▶ 6 Объекты (ветер для колдунов, дыма)
├──▶ 6 Объекты (height_at, latlon) ── OSM реки ──▶ 4
7 Модели ──маркеры, анимации, SailMaterial──▶ 1 Полёт (glider_visual) и 12 Сцена (PilotAnimator)
1 Полёт ──Telemetry──▶ 8 Приборы, 9 Звук, 10 Задания
10 Задания ──API──▶ 11 Интерфейс + 12 Сцена (подключение)
12 Сцена собирает всё; 11 — экраны сцены 12
13 Сборка — последняя: проверяет всё сразуКлючевые цепочки:
- VR-5 время суток: 4 (солнце по дате/времени) → 2 (суточный цикл термиков) → 11/12 (выбор времени, часы).
- FR-14d тучи с дождём: 2 (физика) → 3 (дождевые полосы) → 9 (звук дождя) → 12 (подключение, если нужен новый API).
- VR-3 смог: 4 (дымка/смог по классу «застройка») — сам; 6 (дым VR-15) может брать высоту инверсии у 4.
- Тень крыла / колыхание паруса: 7 → 9 (синхронный звук хлопания).
- Задания в игре: 10 готово → 12 (трекер в
tick) → 11 (меню режима, итог и рекорды). - Ответы пилотов (когда придут) → правки конфигов в 1, 2, 4, 9; работу не блокируют.
Что можно вести параллельно
Сейчас (папки свободны от текущих агентов): 1 (только подготовка, основное ждёт отзывов),
6 (дым VR-15), 7 (тень крыла, парус; scripts/game/pilot_animator.gd не трогать — это integration),
8 (вариометр 90-х на стойке, читаемость), 10 (правки по запросам), 13 (синхронизация TODO, tools/soak.sh,
tools/bench/).
После текущих агентов:
- atmosphere закончил → 2 и 3 (делят
scripts/atmosphere/по файлам; при конфликте — 2 раньше 3); - terrain2 закончил → 4 и 5 (5 забирает файлы растительности из
scripts/terrain/, после этого параллельно); - sounds закончил → 9;
- integration закончил → 12 и 11 (11 после карточки 12 «задания в Game.tick», экраны — параллельно);
- все закончили → 13: матрица стабильности, замеры FPS/загрузки, сборка.
Зависят от ответов пилотов (не блокируют): подгонка группы 1 (поляра, крен, выравнивание), болтанка и веса источников термиков (2, 4), точные старты/посадки (4, 6). Если ответов нет — оставляем правдоподобные значения (решение пользователя).