mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-19 14:38:18 +00:00
Merge #6060
6060: Add buttons+increased length on demo viewbar r=def- a=l-ouis Aimed to add some more controls on the demo view bar: Added tick step buttons and jump to next/prev marker buttons Increased width of demo controls panel so it wasn't as cluttered changed export cut icon to a common export icon instead of the camcorder icon Centered the time multiplier between the buttons it was between ![image](https://user-images.githubusercontent.com/69405348/202874985-9d983959-9188-4d96-9a2d-633621e6f489.png) ## Checklist - [x] Tested the change ingame - [x] Provided screenshots if it is a visual change - [ ] Tested in combination with possibly related configuration options - [ ] Written a unit test (especially base/) or added coverage to integration test - [ ] Considered possible null pointers and out of bounds array indexing - [x] Changed no physics that affect existing maps - [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional) Co-authored-by: louis <louisaltgeer@gmail.com>
This commit is contained in:
commit
acfc7f8c06
|
@ -325,18 +325,22 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
||||||
|
|
||||||
MainView.HSplitBottom(TotalHeight, 0, &MainView);
|
MainView.HSplitBottom(TotalHeight, 0, &MainView);
|
||||||
MainView.VSplitLeft(50.0f, 0, &MainView);
|
MainView.VSplitLeft(50.0f, 0, &MainView);
|
||||||
MainView.VSplitLeft(450.0f, &MainView, 0);
|
MainView.VSplitLeft(600.0f, &MainView, 0);
|
||||||
|
|
||||||
MainView.Draw(ms_ColorTabbarActive, IGraphics::CORNER_T, 10.0f);
|
MainView.Draw(ms_ColorTabbarActive, IGraphics::CORNER_T, 10.0f);
|
||||||
|
|
||||||
MainView.Margin(5.0f, &MainView);
|
MainView.Margin(5.0f, &MainView);
|
||||||
|
|
||||||
CUIRect SeekBar, ButtonBar, NameBar;
|
CUIRect SeekBar, ButtonBar, NameBar, SpeedBar;
|
||||||
|
|
||||||
MainView.HSplitTop(SeekBarHeight, &SeekBar, &ButtonBar);
|
MainView.HSplitTop(SeekBarHeight, &SeekBar, &ButtonBar);
|
||||||
ButtonBar.HSplitTop(Margins, 0, &ButtonBar);
|
ButtonBar.HSplitTop(Margins, 0, &ButtonBar);
|
||||||
ButtonBar.HSplitBottom(NameBarHeight, &ButtonBar, &NameBar);
|
ButtonBar.HSplitBottom(NameBarHeight, &ButtonBar, &NameBar);
|
||||||
NameBar.HSplitTop(4.0f, 0, &NameBar);
|
NameBar.HSplitTop(4.0f, 0, &NameBar);
|
||||||
|
SpeedBar.HSplitBottom(NameBarHeight, &SpeedBar, &NameBar);
|
||||||
|
ButtonBar.HSplitTop(0.0f, 0, &SpeedBar);
|
||||||
|
SpeedBar.VSplitLeft(123.0f, 0, &SpeedBar);
|
||||||
|
SpeedBar.VSplitLeft(133.0f, &SpeedBar, 0);
|
||||||
|
|
||||||
// do seekbar
|
// do seekbar
|
||||||
{
|
{
|
||||||
|
@ -374,7 +378,7 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
||||||
Graphics()->TextureClear();
|
Graphics()->TextureClear();
|
||||||
Graphics()->QuadsBegin();
|
Graphics()->QuadsBegin();
|
||||||
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
|
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
IGraphics::CQuadItem QuadItem(SeekBar.x + (SeekBar.w - 10.0f) * Ratio, SeekBar.y, UI()->PixelSize(), SeekBar.h);
|
IGraphics::CQuadItem QuadItem(8.0f + SeekBar.x + (SeekBar.w - 10.0f) * Ratio, SeekBar.y, UI()->PixelSize(), SeekBar.h);
|
||||||
Graphics()->QuadsDrawTL(&QuadItem, 1);
|
Graphics()->QuadsDrawTL(&QuadItem, 1);
|
||||||
Graphics()->QuadsEnd();
|
Graphics()->QuadsEnd();
|
||||||
}
|
}
|
||||||
|
@ -474,7 +478,6 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
||||||
GameClient()->m_Tooltips.DoToolTip(&s_PlayPauseButton, &Button, pInfo->m_Paused ? Localize("Play the current demo") : Localize("Pause the current demo"));
|
GameClient()->m_Tooltips.DoToolTip(&s_PlayPauseButton, &Button, pInfo->m_Paused ? Localize("Play the current demo") : Localize("Pause the current demo"));
|
||||||
|
|
||||||
// stop button
|
// stop button
|
||||||
|
|
||||||
ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
|
ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
|
||||||
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
||||||
static CButtonContainer s_ResetButton;
|
static CButtonContainer s_ResetButton;
|
||||||
|
@ -485,9 +488,25 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
||||||
}
|
}
|
||||||
GameClient()->m_Tooltips.DoToolTip(&s_ResetButton, &Button, Localize("Stop the current demo"));
|
GameClient()->m_Tooltips.DoToolTip(&s_ResetButton, &Button, Localize("Stop the current demo"));
|
||||||
|
|
||||||
// slowdown
|
// one tick back
|
||||||
|
ButtonBar.VSplitLeft(Margins + 10.0f, 0, &ButtonBar);
|
||||||
|
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
||||||
|
static CButtonContainer s_OneTickBackButton;
|
||||||
|
if(DoButton_FontIcon(&s_OneTickBackButton, "\xEF\x81\x93", 0, &Button, IGraphics::CORNER_ALL))
|
||||||
|
DemoSeekTick(IDemoPlayer::TICK_PREVIOUS);
|
||||||
|
GameClient()->m_Tooltips.DoToolTip(&s_OneTickBackButton, &Button, Localize("Go back one tick"));
|
||||||
|
|
||||||
|
// one tick forward
|
||||||
ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
|
ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
|
||||||
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
||||||
|
static CButtonContainer s_OneTickForwardButton;
|
||||||
|
if(DoButton_FontIcon(&s_OneTickForwardButton, "\xEF\x81\x94", 0, &Button, IGraphics::CORNER_ALL))
|
||||||
|
DemoSeekTick(IDemoPlayer::TICK_NEXT);
|
||||||
|
GameClient()->m_Tooltips.DoToolTip(&s_OneTickForwardButton, &Button, Localize("Go forward one tick"));
|
||||||
|
|
||||||
|
// slowdown
|
||||||
|
ButtonBar.VSplitLeft(Margins + 10.0f, 0, &ButtonBar);
|
||||||
|
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
||||||
static CButtonContainer s_SlowDownButton;
|
static CButtonContainer s_SlowDownButton;
|
||||||
if(DoButton_FontIcon(&s_SlowDownButton, "\xEF\x81\x8A", 0, &Button, IGraphics::CORNER_ALL))
|
if(DoButton_FontIcon(&s_SlowDownButton, "\xEF\x81\x8A", 0, &Button, IGraphics::CORNER_ALL))
|
||||||
DecreaseDemoSpeed = true;
|
DecreaseDemoSpeed = true;
|
||||||
|
@ -505,10 +524,10 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
||||||
ButtonBar.VSplitLeft(Margins * 3, 0, &ButtonBar);
|
ButtonBar.VSplitLeft(Margins * 3, 0, &ButtonBar);
|
||||||
char aBuffer[64];
|
char aBuffer[64];
|
||||||
str_format(aBuffer, sizeof(aBuffer), "×%g", pInfo->m_Speed);
|
str_format(aBuffer, sizeof(aBuffer), "×%g", pInfo->m_Speed);
|
||||||
UI()->DoLabel(&ButtonBar, aBuffer, Button.h * 0.7f, TEXTALIGN_LEFT);
|
UI()->DoLabel(&SpeedBar, aBuffer, Button.h * 0.7f, TEXTALIGN_CENTER);
|
||||||
|
|
||||||
// slice begin button
|
// slice begin button
|
||||||
ButtonBar.VSplitLeft(Margins * 10, 0, &ButtonBar);
|
ButtonBar.VSplitLeft(Margins * 7, 0, &ButtonBar);
|
||||||
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
||||||
static CButtonContainer s_SliceBeginButton;
|
static CButtonContainer s_SliceBeginButton;
|
||||||
if(DoButton_FontIcon(&s_SliceBeginButton, "\xEF\x8B\xB5", 0, &Button, IGraphics::CORNER_ALL))
|
if(DoButton_FontIcon(&s_SliceBeginButton, "\xEF\x8B\xB5", 0, &Button, IGraphics::CORNER_ALL))
|
||||||
|
@ -535,7 +554,7 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
||||||
ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
|
ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
|
||||||
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
||||||
static CButtonContainer s_SliceSaveButton;
|
static CButtonContainer s_SliceSaveButton;
|
||||||
if(DoButton_FontIcon(&s_SliceSaveButton, "\xEF\x80\xBD", 0, &Button, IGraphics::CORNER_ALL))
|
if(DoButton_FontIcon(&s_SliceSaveButton, "\xEF\x82\x8E", 0, &Button, IGraphics::CORNER_ALL))
|
||||||
{
|
{
|
||||||
DemoPlayer()->GetDemoName(m_aCurrentDemoFile, sizeof(m_aCurrentDemoFile));
|
DemoPlayer()->GetDemoName(m_aCurrentDemoFile, sizeof(m_aCurrentDemoFile));
|
||||||
str_append(m_aCurrentDemoFile, ".demo", sizeof(m_aCurrentDemoFile));
|
str_append(m_aCurrentDemoFile, ".demo", sizeof(m_aCurrentDemoFile));
|
||||||
|
@ -544,6 +563,41 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
||||||
}
|
}
|
||||||
GameClient()->m_Tooltips.DoToolTip(&s_SliceSaveButton, &Button, Localize("Export cut as a separate demo"));
|
GameClient()->m_Tooltips.DoToolTip(&s_SliceSaveButton, &Button, Localize("Export cut as a separate demo"));
|
||||||
|
|
||||||
|
// threshold value, accounts for slight inaccuracy when setting demo position
|
||||||
|
const int Threshold = 10;
|
||||||
|
|
||||||
|
// one marker back
|
||||||
|
ButtonBar.VSplitLeft(Margins + 20.0f, 0, &ButtonBar);
|
||||||
|
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
||||||
|
static CButtonContainer s_OneMarkerBackButton;
|
||||||
|
if(DoButton_FontIcon(&s_OneMarkerBackButton, "\xEF\x81\x88", 0, &Button, IGraphics::CORNER_ALL))
|
||||||
|
for(int i = pInfo->m_NumTimelineMarkers - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if((pInfo->m_aTimelineMarkers[i] - pInfo->m_FirstTick) < CurrentTick && absolute(((pInfo->m_aTimelineMarkers[i] - pInfo->m_FirstTick) - CurrentTick)) > Threshold)
|
||||||
|
{
|
||||||
|
DemoPlayer()->SeekPercent((float)(pInfo->m_aTimelineMarkers[i] - pInfo->m_FirstTick) / TotalTicks);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DemoPlayer()->SeekPercent(0.0f);
|
||||||
|
}
|
||||||
|
GameClient()->m_Tooltips.DoToolTip(&s_OneMarkerBackButton, &Button, Localize("Go back one marker"));
|
||||||
|
|
||||||
|
// one marker forward
|
||||||
|
ButtonBar.VSplitLeft(Margins, 0, &ButtonBar);
|
||||||
|
ButtonBar.VSplitLeft(ButtonbarHeight, &Button, &ButtonBar);
|
||||||
|
static CButtonContainer s_OneMarkerForwardButton;
|
||||||
|
if(DoButton_FontIcon(&s_OneMarkerForwardButton, "\xEF\x81\x91", 0, &Button, IGraphics::CORNER_ALL))
|
||||||
|
for(int i = 0; i < pInfo->m_NumTimelineMarkers; i++)
|
||||||
|
{
|
||||||
|
if((pInfo->m_aTimelineMarkers[i] - pInfo->m_FirstTick) > CurrentTick && absolute(((pInfo->m_aTimelineMarkers[i] - pInfo->m_FirstTick) - CurrentTick)) > Threshold)
|
||||||
|
{
|
||||||
|
DemoPlayer()->SeekPercent((float)(pInfo->m_aTimelineMarkers[i] - pInfo->m_FirstTick) / TotalTicks);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DemoPlayer()->SeekPercent(1.0f);
|
||||||
|
}
|
||||||
|
GameClient()->m_Tooltips.DoToolTip(&s_OneMarkerForwardButton, &Button, Localize("Go forward one marker"));
|
||||||
|
|
||||||
// close button
|
// close button
|
||||||
ButtonBar.VSplitRight(ButtonbarHeight * 3, &ButtonBar, &Button);
|
ButtonBar.VSplitRight(ButtonbarHeight * 3, &ButtonBar, &Button);
|
||||||
static int s_ExitButton = 0;
|
static int s_ExitButton = 0;
|
||||||
|
|
Loading…
Reference in a new issue