//----------------------------------------------------------------------- void Animation::_applyBaseKeyFrame() { if (mUseBaseKeyFrame) { Animation* baseAnim = this; if (mBaseKeyFrameAnimationName != StringUtil::BLANK && mContainer) baseAnim = mContainer->getAnimation(mBaseKeyFrameAnimationName); if (baseAnim) { for (NodeTrackList::iterator i = mNodeTrackList.begin(); i != mNodeTrackList.end(); ++i) { NodeAnimationTrack* track = i->second; NodeAnimationTrack* baseTrack; if (baseAnim == this) baseTrack = track; else baseTrack = baseAnim->getNodeTrack(track->getHandle()); TransformKeyFrame kf(baseTrack, mBaseKeyFrameTime); baseTrack->getInterpolatedKeyFrame(baseAnim->_getTimeIndex(mBaseKeyFrameTime), &kf); track->_applyBaseKeyFrame(&kf); } for (VertexTrackList::iterator i = mVertexTrackList.begin(); i != mVertexTrackList.end(); ++i) { VertexAnimationTrack* track = i->second; if (track->getAnimationType() == VAT_POSE) { VertexAnimationTrack* baseTrack; if (baseAnim == this) baseTrack = track; else baseTrack = baseAnim->getVertexTrack(track->getHandle()); VertexPoseKeyFrame kf(baseTrack, mBaseKeyFrameTime); baseTrack->getInterpolatedKeyFrame(baseAnim->_getTimeIndex(mBaseKeyFrameTime), &kf); track->_applyBaseKeyFrame(&kf); } } } // Re-base has been done, this is a one-way translation mUseBaseKeyFrame = false; } }