From 315afff2202f3d7cfd7299a29c0ca67a757b9e2e Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sun, 1 Nov 2026 13:13:53 +0400 Subject: feat(fx): track phase and restart per effect instance --- docs/tomes/05-render.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'docs/tomes/05-render.md') diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md index 266cb47..7cbe7d7 100644 --- a/docs/tomes/05-render.md +++ b/docs/tomes/05-render.md @@ -740,6 +740,19 @@ struct FxHeader60 { локальную точку опоры, scale -- базовый масштаб экземпляра. Unknown flags и settings ID сохраняются. +У каждого экземпляра эффекта есть своё начало отсчёта. Например, эффект +длительностью четыре секунды, созданный на 135-й секунде, на 137-й находится +в середине цикла: `(137 − 135) / 4 = 0,5`. Режим может идти вперёд, +повторяться, идти назад или сохранять постоянную фазу. Вызывающий код может +сменить режим экземпляра, не меняя документ. Запрос перезапуска ждёт конца +текущего цикла и начинает новый при следующем обновлении. + +Эти правила реализованы в `fparkan-fx::clock`. Приложение передаёт одну фазу +геометрии, свету и звуку одной Control-строки; повторная отправка кадра не +пересчитывает её и не расходует случайные числа повторно. В статической сцене +все экземпляры пока рождаются в момент ноль. Управляющие команды Control и +очередь обновления с шагом 50 миллисекунд остаются задачами игрового цикла. + Каждая команда начинается с `uint32_t command_word`: ```text @@ -867,7 +880,8 @@ Effect renderer подавляет header bit `0x800` только при render selector 0. Native AniMesh component path захвачен с selector 1, а в его 53-entry manager присутствуют FX entries с header `0xD00`; preview использует selector 1 и пропускает такие visual commands. Изменения manager -`A8`, которые задают runtime phase/header gate, пока не моделируются. Header +`A8`, которые задают runtime phase/header gate, пока заменены нулём с явным +счётчиком `control_fx_manager_flag_stub`. Header bit `0x10` относится к activation lifecycle и не выключает draw. Для visual effect renderer использует MAT0, указанный самой командой. Его -- cgit v1.2.3