about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorSushiTee <weichel.sascha@xxx.xx>2011-12-01 18:36:51 +0100
committeroy <Tom_Adams@web.de>2011-12-04 13:15:24 +0100
commite411d8f5917ac3b47f6b5f10432d045dda62e814 (patch)
treed84e5588a726f412915be1825bc84a579db1a405 /src
parentf26365d097f274ab98bc936177f102dfc01d79f3 (diff)
downloadzcatch-e411d8f5917ac3b47f6b5f10432d045dda62e814.tar.gz
zcatch-e411d8f5917ac3b47f6b5f10432d045dda62e814.zip
made envelope rendering more smooth
Diffstat (limited to 'src')
-rw-r--r--src/game/client/components/maplayers.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/game/client/components/maplayers.cpp b/src/game/client/components/maplayers.cpp
index 096f9cc5..3d9c42e7 100644
--- a/src/game/client/components/maplayers.cpp
+++ b/src/game/client/components/maplayers.cpp
@@ -67,19 +67,30 @@ void CMapLayers::EnvelopeEval(float TimeOffset, int Env, float *pChannels, void
 	if(pThis->Client()->State() == IClient::STATE_DEMOPLAYBACK)
 	{
 		const IDemoPlayer::CInfo *pInfo = pThis->DemoPlayer()->BaseInfo();
+		static int CurrentLocalTick = pInfo->m_CurrentTick;
 		static int LastLocalTick = pInfo->m_CurrentTick;
 
 		if(!pInfo->m_Paused)
-			Time += (pInfo->m_CurrentTick-LastLocalTick) / (float)pThis->Client()->GameTickSpeed() * pInfo->m_Speed;
+		{
+			if(CurrentLocalTick != pInfo->m_CurrentTick)
+			{
+				LastLocalTick = CurrentLocalTick;
+				CurrentLocalTick = pInfo->m_CurrentTick;
+			}
 
-		pThis->RenderTools()->RenderEvalEnvelope(pPoints+pItem->m_StartPoint, pItem->m_NumPoints, 4, Time+TimeOffset, pChannels);
+			Time = mix(LastLocalTick / (float)pThis->Client()->GameTickSpeed(),
+						CurrentLocalTick / (float)pThis->Client()->GameTickSpeed(),
+						pThis->Client()->IntraGameTick());
+		}
 
-		LastLocalTick = pInfo->m_CurrentTick;
+		pThis->RenderTools()->RenderEvalEnvelope(pPoints+pItem->m_StartPoint, pItem->m_NumPoints, 4, Time+TimeOffset, pChannels);
 	}
 	else
 	{
 		if(pThis->m_pClient->m_Snap.m_pGameInfoObj)
-			Time = (pThis->Client()->GameTick()-pThis->m_pClient->m_Snap.m_pGameInfoObj->m_RoundStartTick) / (float)pThis->Client()->GameTickSpeed();
+			Time = mix((pThis->Client()->PrevGameTick()-pThis->m_pClient->m_Snap.m_pGameInfoObj->m_RoundStartTick) / (float)pThis->Client()->GameTickSpeed(),
+						(pThis->Client()->GameTick()-pThis->m_pClient->m_Snap.m_pGameInfoObj->m_RoundStartTick) / (float)pThis->Client()->GameTickSpeed(),
+						pThis->Client()->IntraGameTick());
 		pThis->RenderTools()->RenderEvalEnvelope(pPoints+pItem->m_StartPoint, pItem->m_NumPoints, 4, Time+TimeOffset, pChannels);
 	}
 }