Variant ValueAnimation::GetAnimationValue(float scaledTime)
{
    unsigned index = 1;
    for (; index < keyFrames_.Size(); ++index)
    {
        if (scaledTime < keyFrames_[index].time_)
            break;
    }

    if (index >= keyFrames_.Size() || !interpolatable_ || interpolationMethod_ == IM_NONE)
        return keyFrames_[index - 1].value_;
    else
    {
        if (interpolationMethod_ == IM_LINEAR)
            return LinearInterpolation(index - 1, index, scaledTime);
        else
            return SplineInterpolation(index - 1, index, scaledTime);
    }
}
예제 #2
0
void AttributeAnimation::UpdateAttributeValue(Animatable* animatable, const AttributeInfo& attributeInfo, float scaledTime)
{
    unsigned index = 1;
    for (; index < keyFrames_.Size(); ++index)
    {
        if (scaledTime < keyFrames_[index].time_)
            break;
    }

    if (index >= keyFrames_.Size() || !interpolatable_)
        animatable->OnSetAttribute(attributeInfo, keyFrames_[index - 1].value_);
    else
    {
        if (interpolationMethod_ == IM_LINEAR)
            animatable->OnSetAttribute(attributeInfo, LinearInterpolation(index - 1, index, scaledTime));
        else
            animatable->OnSetAttribute(attributeInfo, SplineInterpolation(index - 1, index, scaledTime));
    }
}