about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/engine/demo.h1
-rw-r--r--src/engine/shared/demorec.cpp15
-rw-r--r--src/engine/shared/demorec.h2
-rw-r--r--src/game/client/components/menus_demo.cpp16
4 files changed, 32 insertions, 2 deletions
diff --git a/src/engine/demo.h b/src/engine/demo.h
index 6abc9b2d..e0cad387 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 960634b1..0c2efd40 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 cdf46e99..39e9ebdb 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 8e89ee06..526ff0a9 100644
--- a/src/game/client/components/menus_demo.cpp
+++ b/src/game/client/components/menus_demo.cpp
@@ -4,6 +4,7 @@
 #include <engine/demo.h>
 #include <engine/keys.h>
 #include <engine/graphics.h>
+#include <engine/textrender.h>
 #include <engine/storage.h>
 
 #include <game/client/render.h>
@@ -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);
 	}
 }