feat(runtime): distribute Control provider amounts
Docs Deploy / Build and Deploy MkDocs (push) Successful in 39s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 39s
This commit is contained in:
5 files changed
+1022
-38
No files matched your search
@@ -995,7 +995,13 @@ clock Control.
|
||||
добавку либо пропорционально свободному месту, либо по очереди: при максимумах
|
||||
`[30, 60, 50]`, текущих значениях `[10, 20, 0]` и добавке `22` первый способ
|
||||
даёт `[14, 28, 10]`. При вычитании последовательный способ начинает с последней
|
||||
строки. Так одна таблица описывает и текущее значение, и то, как оно меняется.
|
||||
строки. Пропорциональное вычитание делит запрос по текущим количествам.
|
||||
У каждой изменившейся строки есть отдельный накопитель изменений количества: он
|
||||
получает фактически применённую разницу, а не исходный запрос.
|
||||
Большие суммы округляются в двоичном формате. Поэтому после нескольких
|
||||
маленьких изменений общий запас иногда оказывается чуть больше первоначальной
|
||||
ёмкости; оригинал продолжает считать с этой отрицательной разностью, а не
|
||||
исправляет её отдельным правилом.
|
||||
|
||||
У строк есть и связи с родительскими узлами. Нативный `Control.dll` сначала
|
||||
обновляет запрошенную строку через `0x11220`, затем `0x11130` ищет её детей
|
||||
@@ -1040,8 +1046,10 @@ clock Control.
|
||||
Для точного повтора важен порядок округления. При исходных значениях `[2^24, 2]`
|
||||
и запросе `-1` оригинал сначала складывает общий итог с изменением, затем
|
||||
вычитает прежний итог. Из-за округления фактическое изменение получается `-2`.
|
||||
Нативная проверка подтвердила это поведение; общий распределитель
|
||||
`0x10ba0` в Rust ещё не перенесён, хотя прямая добавка к одной строке уже доступна.
|
||||
Rust переносит этот порядок, сохраняет native накопитель каждой строки и
|
||||
запускает обязательный проход стадий с effects. Если ему нужны ещё не
|
||||
реализованные FX или lifecycle-вызовы, таблица остаётся без изменений. Эти
|
||||
операции обновляют только CPU-снимок и пока не подключены к игровым часам Control.
|
||||
|
||||
Отдельный путь объекта класса `4` умножает интервал на контактный коэффициент и
|
||||
передаёт изменение строке. В проверенном примере коэффициент `1`, интервал `2`,
|
||||
@@ -1058,7 +1066,8 @@ Control заново разыгрывает срок обновления, да
|
||||
Принудительный шаг тоже расходует RNG; неактивный объект синхронизирует часы
|
||||
без такого расхода. Это локальные native проверки, а не работающий Rust
|
||||
Control: запросы Rust `0xe00` и `0x1002` читают текущее состояние строк,
|
||||
которое пока меняет только прямой API, а `0x1005` — загруженную ставку профиля.
|
||||
которое меняют явные API одной строки и распределения, а `0x1005` — загруженную
|
||||
ставку профиля.
|
||||
Точные нативные векторы и открытые границы описаны в [приложении](../appendices/script-vm.md#изменение-provider-состояния-control).
|
||||
|
||||
На x87 control word `0x007f` каждое умножение округляет мантиссу до 24 бит,
|
||||
|
||||
Reference in new issue
Block a user