[bug] Реплеи не сохраняют время суток: воспроизводить записанное окружение, а не текущее #57

Closed
opened 2026-10-29 17:52:08 +00:00 by chexit · 3 comments
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Сформировано по прямому запросу автора проекта; текущий код просмотрен на f443f0a. Автор наблюдает неверное время суток в повторе. По структуре record.rs::Recording это ожидаемо: сохраняются треки, события и расстановка, но нет day_time/погоды/окружения. Replay camera наследует текущие параметры мира; sim.night также обновляется по текущему game clock в lib.rs.

Требование

  • Записывать время суток на старте и его ход/изменения по replay timeline, включая переход через сутки и команды смены времени. Не предполагать, что мировые часы всегда идут обычным темпом.
  • Сохранить погоду и необходимые параметры окружения: солнце/луна/фаза, дождь/гроза, ветер/seed облаков, измерение. Минимальный фикс времени сделать первым, дальнейшее окружение наращивать совместимо.
  • Применять состояние к render context повтора, а не изменять глобальное время/погоду реального сохранения командой /time set. Live game и параллельные камеры не должны неожиданно меняться.
  • Освещение, тени, небо, туман, вода, дневные/ночные эффекты используют один replay clock. Seek/пауза/slow motion/cut и #58 воспроизводят нужное окружение, не wall clock.
  • Для старых записей явно обозначить отсутствие данных и выбранный fallback; не выдавать текущее время за историческое.

Приёмка

Записать ночной налёт, переключить живой мир на день и посмотреть повтор: он остаётся ночным. Запись через закат/полночь, ручной time jump, дождь и обратная перемотка. После выхода настройки и время живого мира не испорчены; экспорт и preview одного timestamp согласованы.

🤖 Filed by Codex, AI-агент Владимира (chexit). Сформировано по прямому запросу автора проекта; текущий код просмотрен на `f443f0a`. Автор наблюдает неверное время суток в повторе. По структуре [`record.rs::Recording`](https://gitea.maoniao.team/chexit/airdef/src/commit/f443f0a94a71eb2d446792f1829146f9563aaf5d/airdef-mod/src/sim/record.rs) это ожидаемо: сохраняются треки, события и расстановка, но нет day_time/погоды/окружения. Replay camera наследует текущие параметры мира; `sim.night` также обновляется по текущему game clock в lib.rs. ### Требование - Записывать время суток на старте и его ход/изменения по replay timeline, включая переход через сутки и команды смены времени. Не предполагать, что мировые часы всегда идут обычным темпом. - Сохранить погоду и необходимые параметры окружения: солнце/луна/фаза, дождь/гроза, ветер/seed облаков, измерение. Минимальный фикс времени сделать первым, дальнейшее окружение наращивать совместимо. - Применять состояние к **render context повтора**, а не изменять глобальное время/погоду реального сохранения командой /time set. Live game и параллельные камеры не должны неожиданно меняться. - Освещение, тени, небо, туман, вода, дневные/ночные эффекты используют один replay clock. Seek/пауза/slow motion/cut и [#58](https://gitea.maoniao.team/chexit/airdef/issues/58) воспроизводят нужное окружение, не wall clock. - Для старых записей явно обозначить отсутствие данных и выбранный fallback; не выдавать текущее время за историческое. ### Приёмка Записать ночной налёт, переключить живой мир на день и посмотреть повтор: он остаётся ночным. Запись через закат/полночь, ручной time jump, дождь и обратная перемотка. После выхода настройки и время живого мира не испорчены; экспорт и preview одного timestamp согласованы.
chexit added the priority:P2area:renderingtype:bugarea:simulationarea:persistence labels 2026-10-29 17:52:08 +00:00
Author
Owner

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/e3148bf (запушено в main).

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/e3148bf (запушено в main).
Author
Owner

🤖 Agent: Codex — дополнительный corner case записи часов на 6f3fc644bc5194311a86baba722bc340215306b7.

Проверено отдельным нативным тестом: если первый record() сделан с day_time=None, а следующие 99 — с известными часами, Recording::day_time(80.0) всё равно возвращает None. В record условие times.len()==r.len/TIME_STEP навсегда блокирует push после одного пропущенного sample slot: длина массива уже не догонит индекс. То же при любой дырке в доступности game clock.

Хранить samples с timestamp/Option gaps либо другое представление, которое допускает позднее появление и краткую потерю часов. Проверить None на старте, один пропуск в середине, восстановление, seek; не сдвигать sample к неправильному replay time. Отдельная задача нового ревью разбирает утечку render override в gameplay sky_darken; этот комментарий только про запись временной шкалы.

🤖 Agent: Codex — дополнительный corner case записи часов на `6f3fc644bc5194311a86baba722bc340215306b7`. Проверено отдельным нативным тестом: если первый `record()` сделан с `day_time=None`, а следующие 99 — с известными часами, `Recording::day_time(80.0)` всё равно возвращает None. В `record` условие `times.len()==r.len/TIME_STEP` навсегда блокирует push после одного пропущенного sample slot: длина массива уже не догонит индекс. То же при любой дырке в доступности game clock. Хранить samples с timestamp/Option gaps либо другое представление, которое допускает позднее появление и краткую потерю часов. Проверить None на старте, один пропуск в середине, восстановление, seek; не сдвигать sample к неправильному replay time. Отдельная задача нового ревью разбирает утечку render override в gameplay sky_darken; этот комментарий только про запись временной шкалы.
chexit reopened this issue 2026-10-29 21:14:27 +00:00
Author
Owner

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/8a12225 (запушено в main).

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/8a12225 (запушено в main).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#57