Compute the next playback value for a dimension — pure, no state mutation.
Discrete dimensions step by ±step on the range-min-anchored grid;
continuous dimensions advance by range / traverseTime × frameTime.
Boundaries follow the loop mode. For loop and once the range ends are
shown: a step that reaches or overshoots max (forward) or min
(backward) lands on it, and the NEXT step — taken from the endpoint —
wraps to the opposite end (loop) or stops (once). bounce clamps and
flips the returned direction on arrival, which already shows the endpoint
exactly once; a bounce STARTED on the endpoint it moves toward steps away
from it on the first tick.
Compute the next playback value for a dimension — pure, no state mutation.
Discrete dimensions step by
±stepon the range-min-anchored grid; continuous dimensions advance byrange / traverseTime × frameTime. Boundaries follow the loop mode. Forloopandoncethe range ends are shown: a step that reaches or overshootsmax(forward) ormin(backward) lands on it, and the NEXT step — taken from the endpoint — wraps to the opposite end (loop) or stops (once).bounceclamps and flips the returned direction on arrival, which already shows the endpoint exactly once; a bounce STARTED on the endpoint it moves toward steps away from it on the first tick.