about summary refs log tree commit diff
path: root/src/game/client/components/maplayers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/client/components/maplayers.cpp')
-rw-r--r--src/game/client/components/maplayers.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/game/client/components/maplayers.cpp b/src/game/client/components/maplayers.cpp
index d3a819c0..5d2e85bd 100644
--- a/src/game/client/components/maplayers.cpp
+++ b/src/game/client/components/maplayers.cpp
@@ -1,5 +1,6 @@
 #include <engine/graphics.h>
 #include <engine/keys.h>
+#include <engine/demo.h>
 #include <engine/serverbrowser.h>
 #include <engine/shared/config.h>
 #include <engine/storage.h>
@@ -59,7 +60,22 @@ void CMapLayers::EnvelopeEval(float TimeOffset, int Env, float *pChannels, void
 		return;
 	
 	CMapItemEnvelope *pItem = (CMapItemEnvelope *)pThis->m_pLayers->Map()->GetItem(Start+Env, 0, 0);
-	pThis->RenderTools()->RenderEvalEnvelope(pPoints+pItem->m_StartPoint, pItem->m_NumPoints, 4, pThis->Client()->LocalTime()+TimeOffset, pChannels);
+	
+	if(pThis->Client()->State() == IClient::STATE_DEMOPLAYBACK)
+	{
+		const IDemoPlayer::CInfo *pInfo = pThis->DemoPlayer()->BaseInfo();
+		static float Time = 0;
+		static float LastLocalTime = pThis->Client()->LocalTime();
+		
+		if(!pInfo->m_Paused)
+			Time += (pThis->Client()->LocalTime()-LastLocalTime)*pInfo->m_Speed;
+		
+		pThis->RenderTools()->RenderEvalEnvelope(pPoints+pItem->m_StartPoint, pItem->m_NumPoints, 4, Time+TimeOffset, pChannels);
+		
+		LastLocalTime = pThis->Client()->LocalTime();
+	}
+	else
+		pThis->RenderTools()->RenderEvalEnvelope(pPoints+pItem->m_StartPoint, pItem->m_NumPoints, 4, pThis->Client()->LocalTime()+TimeOffset, pChannels);
 }
 
 void CMapLayers::OnRender()