[enhancement] Единые события и снимки сцены для live-боя, реплея, кинорежиссёра и экспорта #88
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🤖 Filed by Codex, AI-агент Владимира (chexit).
Архитектурный проход по
76f680eba64b64eb28435e71ce9f22a84b0e5da1.Почему текущая запись уже тесна
sim/record.rs::EventKindхранит Kill/Hit/SamLost/Split/Crash; позиции треков пишутся раз в два тика, а SAM — статическим(id, kind, pos). Не записаны реальные обнаружение/захват, поворот/поза установки, событие пуска/зажигания, движение ПВО и переходы узлов/пожара. Кинорежиссёр честно выводит пуск из первой точки ракеты и не может достоверно показать отсутствующий захват. Live рисует черезSim::draw_*, replay отдельно восстанавливаетdraw_ghosts,replay_blastsиreplay_fires.Кроме того, метод с названием
Sim::logзапускаетignite: запись события одновременно является местом игрового эффекта. Это затрудняет отключение/перестройку recorder без изменения боя. #76 и #78 — конкретные баги нынешнего тракта; их исправление не нужно откладывать до рефакторинга.Предложение
SceneSnapshot/SceneTimelineдля live и recorded источников. Render/audio читают его; кинорежиссёр выбирает камеру/скорость, не пересимулирует бой.Приёмка
Seek и повторный seek на один момент дают те же позы, огонь, дым и звук. В кино видны фактические поворот/пуск/зажигание и исход поражения; данные не берутся из текущего боя. Старые записи имеют явный fallback/версию. Ограничить память/длину и измерить стоимость на существующем 10-минутном лимите. Это небольшой журнал сцены, не требование внедрить распределённый event-sourcing.
Общий порядок и зависимости: архитектурная дорожная карта.
🤖 Agent: Codex — работа Владимира (chexit).
Сцена и события: ограниченный typed journal хранит фактические launch/ignition с позицией, ID и звуком, переходы track/lock/source, изменения пожара; SAM keyframes сохраняют health и узлы. Replay использует точный запуск/зажигание и пожар, режиссёр — фактический пуск и позицию SAM. Старые/усечённые записи имеют fallback. Доменные последствия вынесены из recorder: record_event только сохраняет факт, emit_combat_event применяет последствия независимо от наличия записи.
Проверены seek, дубли звука, состояние узлов, огонь с/без recorder. Лимит 65536 scene transitions с явным truncated; отдельный синтетический journal stress на Mac: 12000 ticks ×16 lock transitions, около 26 ms, event Vec capacity 4 MiB. Это не замер FPS/полной записи. Общий SceneSnapshot/SceneTimeline для всех потребителей ещё не завершён; текущие render adapters остаются.
Issue оставлен открытым согласно просьбе автора.
🤖 Agent: Codex, при участии GPT-6.1 Terra и GPT-6 Luna. Продолжение в
kimi-work: код.Smoke и Shown теперь читают общий read-only Snapshot с live/recorded/empty источником, временем, movers, пожарами и blast. Отсутствующая запись не подхватывает накопленные live trails. Recorded smoke billows сохраняют ограниченное 900-тиковое окно независимо от более короткой вспышки; классификация событий общая. Физический strike сохраняет carrier/muzzle, холодный выброс и относительную сетку записи, а дым не рисуется задним числом на неработавшем двигателе.
Тесты seek 40→120→40 с чередованием чужих live Sim, отсутствующей записи и delayed ignition проходят. Потребители model/audio и режиссёр ещё используют отдельные adapters; 10-минутный замер стоимости/памяти и полная унификация остаются. Issue не закрываю.
🤖 Agent: Codex, with GPT-6.1 Terra and GPT-6 Luna.
Replay snapshots now carry battery mode, radar role, spent-cell mask and individual lid pose. Seeking restores the recorded state rather than consulting live SAMs. Live/replayed missile exhaust starts at ignition; the first recorded trail segment is clipped to the ignition position. A seek-forward/back regression test passes.
Pushed code in
966b52fand visual verification/docs in2689d93on kimi-work. Core: 169 passed, 7 ignored; 4 scenarios passed. Adapter: 53 tests, 1 boundary test and 4 scenarios passed. Actual WASM contract: 21 steps passed. Implementation and checksIssue state intentionally unchanged.