When body's world.rot crosses ±π (e.g., body facing south), target_local in the look-at-block could momentarily be ≈±2π. Without normalization, the snap-branch wrote that raw value to state.angle, then rot_min/rot_max clamp produced a discontinuous jump (head 'flicked sideways' when body faced south, per manual interactive test). Fix: normalize target_local to (-π, π] BEFORE the snap/slerp/rate-limit branch and BEFORE clamp. Symmetric handling regardless of which smoothing mode the bone uses.
47 KiB
47 KiB