| #include "rive/animation/cubic_value_interpolator.hpp" |
| |
| using namespace rive; |
| |
| CubicValueInterpolator::CubicValueInterpolator() : m_D(0.0f), m_ValueTo(0.0f) |
| { |
| computeParameters(); |
| } |
| void CubicValueInterpolator::computeParameters() |
| { |
| float y1 = m_D; |
| float y2 = CubicValueInterpolator::y1(); |
| float y3 = CubicValueInterpolator::y2(); |
| float y4 = m_ValueTo; |
| |
| m_A = y4 + 3 * (y2 - y3) - y1; |
| m_B = 3 * (y3 - y2 * 2 + y1); |
| m_C = 3 * (y2 - y1); |
| // m_D = y1; |
| } |
| |
| float CubicValueInterpolator::transformValue(float valueFrom, float valueTo, float factor) |
| { |
| if (m_D != valueFrom || m_ValueTo != valueTo) |
| { |
| m_D = valueFrom; |
| m_ValueTo = valueTo; |
| computeParameters(); |
| } |
| float t = getT(factor); |
| return ((m_A * t + m_B) * t + m_C) * t + m_D; |
| } |
| |
| float CubicValueInterpolator::transform(float factor) const |
| { |
| assert(false); |
| return factor; |
| } |