bool CActionScope::InstallAnimation(int animID, const CryCharAnimationParams &animParams) { ISkeletonAnim *pSkelAnim = m_scopeContext.charInst->GetISkeletonAnim(); const bool startAnimationSuccess = pSkelAnim->StartAnimationById(animID, animParams); pSkelAnim->SetLayerPlaybackScale(animParams.m_nLayerID, m_speedBias); pSkelAnim->SetLayerBlendWeight(animParams.m_nLayerID, m_animWeight); return startAnimationSuccess; }
void CActionScope::Update(float timePassed) { IAction * const pPlayingAction = GetPlayingAction().get(); if (pPlayingAction) { ISkeletonAnim *pSkelAnim = m_scopeContext.charInst ? m_scopeContext.charInst->GetISkeletonAnim() : NULL; const float newSpeedBias = pPlayingAction->GetSpeedBias(); const float newAnimWeight = pPlayingAction->GetAnimWeight(); if (m_speedBias != newSpeedBias) { m_speedBias = newSpeedBias; if(pSkelAnim) { for (uint32 layer=0; layer<m_numLayers; layer++) { pSkelAnim->SetLayerPlaybackScale(m_layer+layer, newSpeedBias); } } } if(m_animWeight != newAnimWeight) { m_animWeight = newAnimWeight; if(pSkelAnim) { for (uint32 layer=0; layer<m_numLayers; layer++) { pSkelAnim->SetLayerBlendWeight(m_layer+layer, newAnimWeight); } } } timePassed *= m_speedBias; m_fragmentTime += timePassed+m_timeIncrement; } UpdateSequencers(timePassed); }