diff options
| author | SushiTee <weichel.sascha@gmail.com> | 2010-10-19 13:37:36 +0200 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2010-10-19 18:52:16 +0200 |
| commit | 314cda05c7cda9afb05b4b9176dc94dcc16ac760 (patch) | |
| tree | 40c593ca144d76ed7ea57ec8c27f1d74c9a54e39 /src/game | |
| parent | d7a8b94f772d7811b9b96be0b4f3dd8bff775ac3 (diff) | |
| download | zcatch-314cda05c7cda9afb05b4b9176dc94dcc16ac760.tar.gz zcatch-314cda05c7cda9afb05b4b9176dc94dcc16ac760.zip | |
changed demo animations according to demo speed and added some demo speeds. (fixes #206)
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/client/components/effects.cpp | 28 | ||||
| -rw-r--r-- | src/game/client/components/items.cpp | 29 | ||||
| -rw-r--r-- | src/game/client/components/maplayers.cpp | 18 | ||||
| -rw-r--r-- | src/game/client/components/menus_demo.cpp | 10 | ||||
| -rw-r--r-- | src/game/client/components/particles.cpp | 12 |
5 files changed, 88 insertions, 9 deletions
diff --git a/src/game/client/components/effects.cpp b/src/game/client/components/effects.cpp index 91cea107..b95d66e0 100644 --- a/src/game/client/components/effects.cpp +++ b/src/game/client/components/effects.cpp @@ -1,3 +1,5 @@ +#include <engine/demo.h> + #include <game/generated/client_data.h> #include <game/client/components/particles.h> @@ -238,6 +240,32 @@ void CEffects::OnRender() static int64 LastUpdate100hz = 0; static int64 LastUpdate50hz = 0; + if(Client()->State() == IClient::STATE_DEMOPLAYBACK) + { + const IDemoPlayer::CInfo *pInfo = DemoPlayer()->BaseInfo(); + + if(time_get()-LastUpdate100hz > time_freq()/(100*pInfo->m_Speed)) + { + m_Add100hz = true; + LastUpdate100hz = time_get(); + } + else + m_Add100hz = false; + + if(time_get()-LastUpdate50hz > time_freq()/(100*pInfo->m_Speed)) + { + m_Add50hz = true; + LastUpdate50hz = time_get(); + } + else + m_Add50hz = false; + + if(m_Add50hz) + m_pClient->m_pFlow->Update(); + + return; + } + if(time_get()-LastUpdate100hz > time_freq()/100) { m_Add100hz = true; diff --git a/src/game/client/components/items.cpp b/src/game/client/components/items.cpp index b4d696f7..a039717e 100644 --- a/src/game/client/components/items.cpp +++ b/src/game/client/components/items.cpp @@ -58,7 +58,22 @@ void CItems::RenderProjectile(const CNetObj_Projectile *pCurrent, int ItemId) { m_pClient->m_pEffects->SmokeTrail(Pos, Vel*-1); m_pClient->m_pFlow->Add(Pos, Vel*1000*Client()->FrameTime(), 10.0f); - Graphics()->QuadsSetRotation(Client()->LocalTime()*pi*2*2 + ItemId); + + if(Client()->State() == IClient::STATE_DEMOPLAYBACK) + { + const IDemoPlayer::CInfo *pInfo = DemoPlayer()->BaseInfo(); + static float Time = 0; + static float LastLocalTime = Client()->LocalTime(); + + if(!pInfo->m_Paused) + Time += (Client()->LocalTime()-LastLocalTime)*pInfo->m_Speed; + + Graphics()->QuadsSetRotation(Time*pi*2*2 + ItemId); + + LastLocalTime = Client()->LocalTime(); + } + else + Graphics()->QuadsSetRotation(Client()->LocalTime()*pi*2*2 + ItemId); } else { @@ -115,12 +130,16 @@ void CItems::RenderPickup(const CNetObj_Pickup *pPrev, const CNetObj_Pickup *pCu if(Client()->State() == IClient::STATE_DEMOPLAYBACK) { const IDemoPlayer::CInfo *pInfo = DemoPlayer()->BaseInfo(); + static float Time = 0; + static float LastLocalTime = Client()->LocalTime(); if(!pInfo->m_Paused) - { - Pos.x += cosf(Client()->LocalTime()*pInfo->m_Speed*2.0f+Offset)*2.5f; - Pos.y += sinf(Client()->LocalTime()*pInfo->m_Speed*2.0f+Offset)*2.5f; - } + Time += (Client()->LocalTime()-LastLocalTime)*pInfo->m_Speed; + + Pos.x += cosf(Time*2.0f+Offset)*2.5f; + Pos.y += sinf(Time*2.0f+Offset)*2.5f; + + LastLocalTime = Client()->LocalTime(); } else { 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() diff --git a/src/game/client/components/menus_demo.cpp b/src/game/client/components/menus_demo.cpp index acc2a15e..e03b70aa 100644 --- a/src/game/client/components/menus_demo.cpp +++ b/src/game/client/components/menus_demo.cpp @@ -171,7 +171,10 @@ void CMenus::RenderDemoPlayer(CUIRect MainView) if(pInfo->m_Speed > 4.0f) DemoPlayer()->SetSpeed(4.0f); else if(pInfo->m_Speed > 2.0f) DemoPlayer()->SetSpeed(2.0f); else if(pInfo->m_Speed > 1.0f) DemoPlayer()->SetSpeed(1.0f); + else if(pInfo->m_Speed > 0.75f) DemoPlayer()->SetSpeed(0.75f); else if(pInfo->m_Speed > 0.5f) DemoPlayer()->SetSpeed(0.5f); + else if(pInfo->m_Speed > 0.25f) DemoPlayer()->SetSpeed(0.25f); + else if(pInfo->m_Speed > 0.1f) DemoPlayer()->SetSpeed(0.1f); else DemoPlayer()->SetSpeed(0.05f); } @@ -181,7 +184,10 @@ void CMenus::RenderDemoPlayer(CUIRect MainView) static int s_FastForwardButton = 0; if(DoButton_DemoPlayer_Sprite(&s_FastForwardButton, SPRITE_DEMOBUTTON_FASTER, 0, &Button)) { - if(pInfo->m_Speed < 0.5f) DemoPlayer()->SetSpeed(0.5f); + if(pInfo->m_Speed < 0.1f) DemoPlayer()->SetSpeed(0.1f); + else if(pInfo->m_Speed < 0.25f) DemoPlayer()->SetSpeed(0.25f); + else if(pInfo->m_Speed < 0.5f) DemoPlayer()->SetSpeed(0.5f); + else if(pInfo->m_Speed < 0.75f) DemoPlayer()->SetSpeed(0.75f); else if(pInfo->m_Speed < 1.0f) DemoPlayer()->SetSpeed(1.0f); else if(pInfo->m_Speed < 2.0f) DemoPlayer()->SetSpeed(2.0f); else if(pInfo->m_Speed < 4.0f) DemoPlayer()->SetSpeed(4.0f); @@ -194,7 +200,7 @@ void CMenus::RenderDemoPlayer(CUIRect MainView) if(pInfo->m_Speed >= 1.0f) str_format(aBuffer, sizeof(aBuffer), "x%.0f", pInfo->m_Speed); else - str_format(aBuffer, sizeof(aBuffer), "x%.1f", pInfo->m_Speed); + str_format(aBuffer, sizeof(aBuffer), "x%.2f", pInfo->m_Speed); UI()->DoLabel(&ButtonBar, aBuffer, Button.h*0.7f, -1); // close button diff --git a/src/game/client/components/particles.cpp b/src/game/client/components/particles.cpp index 99c2c721..c12231ca 100644 --- a/src/game/client/components/particles.cpp +++ b/src/game/client/components/particles.cpp @@ -1,5 +1,6 @@ #include <base/math.h> #include <engine/graphics.h> +#include <engine/demo.h> #include <game/generated/client_data.h> #include <game/client/render.h> @@ -120,7 +121,16 @@ void CParticles::OnRender() { static int64 LastTime = 0; int64 t = time_get(); - Update((float)((t-LastTime)/(double)time_freq())); + + if(Client()->State() == IClient::STATE_DEMOPLAYBACK) + { + const IDemoPlayer::CInfo *pInfo = DemoPlayer()->BaseInfo(); + if(!pInfo->m_Paused) + Update((float)((t-LastTime)/(double)time_freq())*pInfo->m_Speed); + } + else + Update((float)((t-LastTime)/(double)time_freq())); + LastTime = t; } |