blob: 790a630456760d8956fe2e5c9875b836490eecae [file] [log] [blame]
#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;
}