ReadonlykindDiscriminator; also what a diagnostic prints when a binding is dumped.
Readonlymutatestrue when ValueAdapter.copy and ValueAdapter.lerp write
through their target/out argument (reference types), false when they
ignore it and the result flows purely by return value (primitives and
discrete values). See this module's header.
Adds b * weight onto a (PH-9 layered / additive animation).
Continuous kinds are arithmetic: numbers, vectors, and colours compute
a + b * weight. Quaternions treat b as a delta from identity and
compose a * slerp(identity, b, weight). Step kinds (boolean, discrete)
cannot add — they return a and ignore b and weight.
Same out contract as ValueAdapter.lerp: callers must use the
return value; out may alias a and must not alias b for the in-place
kinds that write through it.
Interpolates from a to b by t and returns the effective value: the
mutated out for in-place adapters, the computed value otherwise. Callers
must use the return value.
t is not clamped — values outside [0, 1] extrapolate for the continuous
kinds, exactly as @fourjs/math does — and the step kinds hold a for every
t < 1. Endpoint exactness at t = 1 is not guaranteed in floating point
for the continuous kinds (they compute a + (b - a) * t, matching
@fourjs/math); a tween that must land precisely assigns the end value at
completion instead of lerping to it.
How one value type is duplicated, assigned, and interpolated.
Implementations are stateless singletons, so an adapter can be shared by every binding and track in an application.