VOID CDUIAnimation::OnAnimationElapse(INT nAnimationID) { if(m_pControl == NULL) return; CRefPtr<CAnimationData> pData = GetAnimationByID(nAnimationID); if(pData.IsNull()) return; INT nCurFrame = pData->m_nCurFrame; if(nCurFrame == 0) { OnAnimationStart(nAnimationID, pData->m_bFirstLoop); pData->m_bFirstLoop = FALSE; } OnAnimationStep(pData->m_nTotalFrame, nCurFrame, nAnimationID); if(nCurFrame >= pData->m_nTotalFrame) { OnAnimationStop(nAnimationID); if(pData->m_bLoop) { pData->m_nCurFrame = 0; } else { m_pControl->KillTimer(nAnimationID); m_arAnimations.erase(std::remove(m_arAnimations.begin(), m_arAnimations.end(), pData) , m_arAnimations.end()); pData = NULL; } } if(!pData.IsNull()) { ++(pData->m_nCurFrame); } }
VOID CUIAnimation::OnAnimationElapse(int nAnimationID) { if(m_pControl == NULL) return; CAnimationData* pData = GetAnimationDataByID(nAnimationID); if( NULL == pData ) return; int nCurFrame = pData->m_nCurFrame; if(nCurFrame == 0) { OnAnimationStart(nAnimationID, pData->m_bFirstLoop); pData->m_bFirstLoop = FALSE; } OnAnimationStep(pData->m_nTotalFrame, nCurFrame, nAnimationID); if(nCurFrame >= pData->m_nTotalFrame) { OnAnimationStop(nAnimationID); if(pData->m_bLoop) { pData->m_nCurFrame = 0; } else { m_pControl->GetManager()->KillTimer( m_pControl, nAnimationID ); m_arAnimations.Remove(m_arAnimations.Find(pData),true); pData = NULL; } } if( NULL != pData ) { ++(pData->m_nCurFrame); } }