diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-18 08:27:18 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-18 08:27:23 +0300 |
| commit | 3cc45621c6ffb32faab648da1ca88093cca33822 (patch) | |
| tree | a6f9cf6bfc7c50d96e0a2efdad869ad8c7b93513 /docs | |
| parent | f8969cfabe56d2a73ffbfdf802db9680084d6d5e (diff) | |
| download | fparkan-codex/op8-evaluator.tar.xz fparkan-codex/op8-evaluator.zip | |
feat(fx): evaluate native Op8 smoke emitterscodex/op8-evaluator
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/reference/environment-effects.md | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/docs/reference/environment-effects.md b/docs/reference/environment-effects.md index 078a222..29d85f9 100644 --- a/docs/reference/environment-effects.md +++ b/docs/reference/environment-effects.md @@ -285,6 +285,34 @@ Evaluator типа 2 принимает индекс context явно и учиÑ семена отдельных экземпляров лишь детерминированно заменяют process-global состояние и не воспроизводят общий порядок вызовов. +## Частицы Op8 + +`fparkan-fx::smoke` разбирает body Op8, хранит кольцевой пул команды и выдаёт +quad-ы с ориентацией к камере для активных слотов. Нативная нормализованная +фаза окна ограничивается диапазоном 0–1 и задаёт интервал проверки следующего события; +сравнение строгое (`schedule_base + interval < update_clock`). Все события +catch-up в одном обновлении проверяются по тому же нормализованному интервалу; +после события нативный код продвигает базу расписания интервалом, вычисленным +по сырой фазе эффекта, а возраст слота считает по нормализованному интервалу. +Когда фаза равна единственной границе окна, деление `0/0` даёт NaN, который +нативный unordered-путь сравнения ограничивает нулём. + +Нулевая база расписания служит признаком начального состояния: обновление +сохраняет текущую опору эмиттера и базу времени, не создавая частицу. Если +первое время равно нулю, следующее обновление повторно захватывает опору. При +событии скорость опоры считается от сохранённой позиции до текущей за время +от базы расписания; слот смещает сохранённую опору на `скорость * due_interval`. +Обновление без событий не переносит сохранённую опору к текущему владельцу. +Откат часов корректирует только базу расписания до текущего времени: слоты, +опора и три потока случайных +чисел не сбрасываются. + +Evaluator принимает отдельные начальные состояния для эмиттера, знаковых +отклонений и материала. Переход каждого потока совпадает с общим native LFSR, +но эти локальные seed не воспроизводят порядок process-global вызовов игры. +Предел 100000 событий catch-up — защитная граница evaluator-а; соответствующего +лимита в исследованном native цикле не обнаружено. + ## Что остаётся за владельцем `EnvironmentSystem` не извлекает камеру из renderer, не разрешает материалы |
