Beispiel #1
0
void TBAnimationObject::InvokeOnAnimationStart()
{
	TBLinkListOf<TBAnimationListener>::Iterator li = m_listeners.IterateForward();
	OnAnimationStart();
	while (TBAnimationListener *listener = li.GetAndStep())
		listener->OnAnimationStart(this);
}
Beispiel #2
0
 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);
		}
	}