Improved the replay control buttons in the demo player a lot.

* Now there is a combined play/pause button + a reset button
* Replaced the ugly strings with nice graphics
This commit is contained in:
Fujnky 2010-07-27 22:25:36 +02:00 committed by oy
parent d01fb2eb78
commit 4d8c4ffadb
4 changed files with 43 additions and 16 deletions

BIN
data/demo_buttons.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 B

View file

@ -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))

View file

@ -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);

View file

@ -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);