about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--data/demo_buttons.pngbin0 -> 599 bytes
-rw-r--r--datasrc/content.py12
-rw-r--r--src/game/client/components/menus.h1
-rw-r--r--src/game/client/components/menus_demo.cpp46
4 files changed, 43 insertions, 16 deletions
diff --git a/data/demo_buttons.png b/data/demo_buttons.png
new file mode 100644
index 00000000..47a5c2f1
--- /dev/null
+++ b/data/demo_buttons.png
Binary files differdiff --git a/datasrc/content.py b/datasrc/content.py
index e510a19f..a11988b4 100644
--- a/datasrc/content.py
+++ b/datasrc/content.py
@@ -225,6 +225,7 @@ image_particles = Image("particles", "particles.png")
 image_game = Image("game", "game.png")
 image_browseicons = Image("browseicons", "browse_icons.png")
 image_emoticons = Image("emoticons", "emoticons.png")
+image_demobuttons = Image("demobuttons", "demo_buttons.png")
 
 container.images.Add(image_null)
 container.images.Add(image_game)
@@ -235,6 +236,7 @@ container.images.Add(image_emoticons)
 container.images.Add(image_browseicons)
 container.images.Add(Image("console_bg", "console.png"))
 container.images.Add(Image("console_bar", "console_bar.png"))
+container.images.Add(image_demobuttons)
 
 container.pickups.Add(Pickup("health"))
 container.pickups.Add(Pickup("armor"))
@@ -246,12 +248,14 @@ set_game = SpriteSet("game", image_game, 32, 16)
 set_tee = SpriteSet("tee", image_null, 8, 4)
 set_browseicons = SpriteSet("browseicons", image_browseicons, 4, 1)
 set_emoticons = SpriteSet("emoticons", image_emoticons, 4, 4)
+set_demobuttons = SpriteSet("demobuttons", image_demobuttons, 5, 1)
 
 container.spritesets.Add(set_particles)
 container.spritesets.Add(set_game)
 container.spritesets.Add(set_tee)
 container.spritesets.Add(set_browseicons)
 container.spritesets.Add(set_emoticons)
+container.spritesets.Add(set_demobuttons)
 
 container.sprites.Add(Sprite("part_slice", set_particles, 0,0,1,1))
 container.sprites.Add(Sprite("part_ball", set_particles, 1,0,1,1))
@@ -358,11 +362,17 @@ container.sprites.Add(Sprite("blank1", set_emoticons, 1, 3, 1, 1))
 container.sprites.Add(Sprite("deadtee", set_emoticons, 2, 3, 1, 1))
 container.sprites.Add(Sprite("blank2", set_emoticons, 3, 3, 1, 1))
 
-
 container.sprites.Add(Sprite("browse_lock", set_browseicons, 0,0,1,1))
 container.sprites.Add(Sprite("browse_heart", set_browseicons, 1,0,1,1))
 container.sprites.Add(Sprite("browse_unpure", set_browseicons, 3,0,1,1))
 
+container.sprites.Add(Sprite("demobutton_play", set_demobuttons, 0,0,1,1))
+container.sprites.Add(Sprite("demobutton_pause", set_demobuttons, 1,0,1,1))
+container.sprites.Add(Sprite("demobutton_reset", set_demobuttons, 2,0,1,1))
+container.sprites.Add(Sprite("demobutton_slower", set_demobuttons, 3,0,1,1))
+container.sprites.Add(Sprite("demobutton_faster", set_demobuttons, 4,0,1,1))
+
+
 anim = Animation("base")
 anim.body.frames.Add(AnimKeyframe(0, 0, -4, 0))
 anim.back_foot.frames.Add(AnimKeyframe(0, 0, 10, 0))
diff --git a/src/game/client/components/menus.h b/src/game/client/components/menus.h
index 3ad737e5..53f81954 100644
--- a/src/game/client/components/menus.h
+++ b/src/game/client/components/menus.h
@@ -33,6 +33,7 @@ class CMenus : public CComponent
 
 
 	int DoButton_DemoPlayer(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
+	int DoButton_DemoPlayer_Sprite(const void *pID, int spriteId, int Checked, const CUIRect *pRect);
 	int DoButton_Menu(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
 	int DoButton_MenuTab(const void *pID, const char *pText, int Checked, const CUIRect *pRect, int Corners);
 	int DoButton_SettingsTab(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
diff --git a/src/game/client/components/menus_demo.cpp b/src/game/client/components/menus_demo.cpp
index 231cd83a..18d9ddee 100644
--- a/src/game/client/components/menus_demo.cpp
+++ b/src/game/client/components/menus_demo.cpp
@@ -1,9 +1,9 @@
 
 #include <base/math.h>
 
-
 #include <engine/demo.h>
 #include <engine/keys.h>
+#include <engine/graphics.h>
 
 #include <game/client/render.h>
 #include <game/client/gameclient.h>
@@ -11,6 +11,8 @@
 
 #include <game/client/ui.h>
 
+#include <game/generated/client_data.h>
+
 #include "menus.h"
 
 int CMenus::DoButton_DemoPlayer(const void *pID, const char *pText, int Checked, const CUIRect *pRect)
@@ -20,6 +22,19 @@ int CMenus::DoButton_DemoPlayer(const void *pID, const char *pText, int Checked,
 	return UI()->DoButtonLogic(pID, pText, Checked, pRect);
 }
 
+int CMenus::DoButton_DemoPlayer_Sprite(const void *pID, int spriteId, int Checked, const CUIRect *pRect)
+{
+	RenderTools()->DrawUIRect(pRect, vec4(1,1,1, Checked ? 0.10f : 0.5f)*ButtonColorMul(pID), CUI::CORNER_ALL, 5.0f);
+	Graphics()->TextureSet(g_pData->m_aImages[IMAGE_DEMOBUTTONS].m_Id);
+	Graphics()->QuadsBegin();
+	RenderTools()->SelectSprite(spriteId);
+	IGraphics::CQuadItem QuadItem(pRect->x, pRect->y, pRect->w, pRect->h);
+	Graphics()->QuadsDrawTL(&QuadItem, 1);
+	Graphics()->QuadsEnd();
+	
+	return UI()->DoButtonLogic(pID, "", Checked, pRect);
+}
+
 void CMenus::RenderDemoPlayer(CUIRect MainView)
 {
 	const IDemoPlayer::CInfo *pInfo = DemoPlayer()->BaseInfo();
@@ -111,33 +126,34 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
 	{
 		// do buttons
 		CUIRect Button;
-
-		// pause button
+		
+		// combined play and pause button
 		ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
-		static int s_PauseButton = 0;
-		if(DoButton_DemoPlayer(&s_PauseButton, "| |", pInfo->m_Paused, &Button))
+		static int s_PlayPauseButton = 0;
+		if(!pInfo->m_Paused)
 		{
-			if(pInfo->m_Paused)
-				DemoPlayer()->Unpause();
-			else
+			if(DoButton_DemoPlayer_Sprite(&s_PlayPauseButton, SPRITE_DEMOBUTTON_PAUSE, pInfo->m_Paused, &Button))
 				DemoPlayer()->Pause();
 		}
+		else
+		{
+			if(DoButton_DemoPlayer_Sprite(&s_PlayPauseButton, SPRITE_DEMOBUTTON_PLAY, !pInfo->m_Paused, &Button))
+			DemoPlayer()->Unpause();
+		}
 		
-		// play button
 		ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
 		ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
-		static int s_PlayButton = 0;
-		if(DoButton_DemoPlayer(&s_PlayButton, ">", !pInfo->m_Paused, &Button))
+		static int s_ResetButton = 0;
+		if(DoButton_DemoPlayer_Sprite(&s_ResetButton, SPRITE_DEMOBUTTON_RESET, false, &Button))
 		{
-			DemoPlayer()->Unpause();
-			DemoPlayer()->SetSpeed(1.0f);
+			DemoPlayer()->SetPos(0);
 		}
 
 		// slowdown
 		ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
 		ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
 		static int s_SlowDownButton = 0;
-		if(DoButton_DemoPlayer(&s_SlowDownButton, "<<", 0, &Button))
+		if(DoButton_DemoPlayer_Sprite(&s_SlowDownButton, SPRITE_DEMOBUTTON_SLOWER, 0, &Button))
 		{
 			if(pInfo->m_Speed > 4.0f) DemoPlayer()->SetSpeed(4.0f);
 			else if(pInfo->m_Speed > 2.0f) DemoPlayer()->SetSpeed(2.0f);
@@ -150,7 +166,7 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
 		ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
 		ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
 		static int s_FastForwardButton = 0;
-		if(DoButton_DemoPlayer(&s_FastForwardButton, ">>", 0, &Button))
+		if(DoButton_DemoPlayer_Sprite(&s_FastForwardButton, SPRITE_DEMOBUTTON_FASTER, 0, &Button))
 		{
 			if(pInfo->m_Speed < 0.5f) DemoPlayer()->SetSpeed(0.5f);
 			else if(pInfo->m_Speed < 1.0f) DemoPlayer()->SetSpeed(1.0f);