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); } }
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)); } }