From 56c4081da403728486bf747666c0f745567a0be6 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 6 Sep 2010 21:36:39 +0200 Subject: [PATCH] Demo name is now showed while playing a demo file --- src/engine/demo.h | 1 + src/engine/shared/demorec.cpp | 15 +++++++++++++++ src/engine/shared/demorec.h | 2 ++ src/game/client/components/menus_demo.cpp | 16 ++++++++++++++-- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/engine/demo.h b/src/engine/demo.h index 6abc9b2d8..e0cad3875 100644 --- a/src/engine/demo.h +++ b/src/engine/demo.h @@ -24,6 +24,7 @@ public: virtual void Pause() = 0; virtual void Unpause() = 0; virtual const CInfo *BaseInfo() const = 0; + virtual char *GetDemoName() = 0; }; class IDemoRecorder : public IInterface diff --git a/src/engine/shared/demorec.cpp b/src/engine/shared/demorec.cpp index 960634b19..0c2efd40c 100644 --- a/src/engine/shared/demorec.cpp +++ b/src/engine/shared/demorec.cpp @@ -516,6 +516,9 @@ int CDemoPlayer::Load(class IStorage *pStorage, class IConsole *pConsole, const return -1; } + // store the filename + str_copy(m_aFilename, pFilename, sizeof(m_aFilename)); + // clear the playback info mem_zero(&m_Info, sizeof(m_Info)); m_Info.m_Info.m_FirstTick = -1; @@ -722,7 +725,19 @@ int CDemoPlayer::Stop() m_File = 0; mem_free(m_pKeyFrames); m_pKeyFrames = 0; + str_copy(m_aFilename, "", sizeof(m_aFilename)); return 0; } +char *CDemoPlayer::GetDemoName() +{ + // get the name of the demo without its path + char *pDemoShortName = &m_aFilename[0]; + for(int i = 0; i < str_length(m_aFilename)-1; i++) + { + if(m_aFilename[i] == '/' || m_aFilename[i] == '\\') + pDemoShortName = &m_aFilename[i+1]; + } + return pDemoShortName; +} diff --git a/src/engine/shared/demorec.h b/src/engine/shared/demorec.h index cdf46e99a..39e9ebdb9 100644 --- a/src/engine/shared/demorec.h +++ b/src/engine/shared/demorec.h @@ -83,6 +83,7 @@ private: class IConsole *m_pConsole; IOHANDLE m_File; + char m_aFilename[256]; CKeyFrame *m_pKeyFrames; CPlaybackInfo m_Info; @@ -109,6 +110,7 @@ public: void SetSpeed(float Speed); int SetPos(float Precent); const CInfo *BaseInfo() const { return &m_Info.m_Info; } + char *GetDemoName(); int Update(); diff --git a/src/game/client/components/menus_demo.cpp b/src/game/client/components/menus_demo.cpp index 8e89ee061..526ff0a98 100644 --- a/src/game/client/components/menus_demo.cpp +++ b/src/game/client/components/menus_demo.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -42,11 +43,12 @@ void CMenus::RenderDemoPlayer(CUIRect MainView) const float SeekBarHeight = 15.0f; const float ButtonbarHeight = 20.0f; + const float NameBarHeight = 20.0f; const float Margins = 5.0f; float TotalHeight; if(m_MenuActive) - TotalHeight = SeekBarHeight+ButtonbarHeight+Margins*3; + TotalHeight = SeekBarHeight+ButtonbarHeight+NameBarHeight+Margins*3; else TotalHeight = SeekBarHeight+Margins*2; @@ -58,7 +60,7 @@ void CMenus::RenderDemoPlayer(CUIRect MainView) MainView.Margin(5.0f, &MainView); - CUIRect SeekBar, ButtonBar; + CUIRect SeekBar, ButtonBar, NameBar; int CurrentTick = pInfo->m_CurrentTick - pInfo->m_FirstTick; int TotalTicks = pInfo->m_LastTick - pInfo->m_FirstTick; @@ -67,6 +69,8 @@ void CMenus::RenderDemoPlayer(CUIRect MainView) { MainView.HSplitTop(SeekBarHeight, &SeekBar, &ButtonBar); ButtonBar.HSplitTop(Margins, 0, &ButtonBar); + ButtonBar.HSplitBottom(NameBarHeight, &ButtonBar, &NameBar); + NameBar.HSplitTop(3.5f, 0, &NameBar); } else SeekBar = MainView; @@ -198,6 +202,14 @@ void CMenus::RenderDemoPlayer(CUIRect MainView) static int s_ExitButton = 0; if(DoButton_DemoPlayer(&s_ExitButton, Localize("Close"), 0, &Button)) Client()->Disconnect(); + + // demo name + char aBuf[128]; + str_format(aBuf, sizeof(aBuf), "Demofile: %s", DemoPlayer()->GetDemoName()); + CTextCursor Cursor; + TextRender()->SetCursor(&Cursor, NameBar.x, NameBar.y, Button.h*0.7f, TEXTFLAG_RENDER|TEXTFLAG_STOP_AT_END); + Cursor.m_LineWidth = 450.0f; + TextRender()->TextEx(&Cursor, aBuf, -1); } }