source-engine/game/client/replay/vgui/replayreminderpanel.cpp
2022-03-01 23:00:42 +03:00

163 lines
4.6 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#if defined( REPLAY_ENABLED )
#include "replayreminderpanel.h"
#include "replay/ireplaysystem.h"
#include "replay/replay.h"
#include "replay/ireplayscreenshotmanager.h"
#include "replay/ireplaymanager.h"
#include "replay/screenshot.h"
#include "iclientmode.h"
#include "vgui_controls/AnimationController.h"
//-----------------------------------------------------------------------------
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//-----------------------------------------------------------------------------
DECLARE_HUDELEMENT( CReplayReminderPanel );
//-----------------------------------------------------------------------------
CReplayReminderPanel::CReplayReminderPanel( const char *pElementName )
: EditablePanel( g_pClientMode->GetViewport(), "ReplayReminder" ),
CHudElement( pElementName )
{
SetScheme( "ClientScheme" );
m_flShowTime = 0;
m_bShouldDraw = false;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CReplayReminderPanel::SetupText()
{
// Get current key binding, if any.
const char *pBoundKey = engine->Key_LookupBinding( "save_replay" );
if ( !pBoundKey || FStrEq( pBoundKey, "(null)" ) )
{
pBoundKey = " ";
}
char szKey[16];
Q_snprintf( szKey, sizeof(szKey), "%s", pBoundKey );
wchar_t wKey[16];
wchar_t wLabel[256];
g_pVGuiLocalize->ConvertANSIToUnicode( szKey, wKey, sizeof( wKey ) );
g_pVGuiLocalize->ConstructString( wLabel, sizeof( wLabel ), g_pVGuiLocalize->Find("#Replay_freezecam_replay" ), 1, wKey );
// Set the text
SetDialogVariable( "text", wLabel );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CReplayReminderPanel::ApplySchemeSettings( IScheme *pScheme )
{
LoadControlSettings("Resource/UI/ReplayReminder.res", "GAME");
BaseClass::ApplySchemeSettings( pScheme );
SetupText();
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CReplayReminderPanel::Show()
{
m_flShowTime = gpGlobals->curtime;
SetVisible( true );
g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( GetParent(), "HudReplayReminderIn" );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CReplayReminderPanel::Hide()
{
SetVisible( false );
m_flShowTime = 0;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
int CReplayReminderPanel::HudElementKeyInput( int down, ButtonCode_t keynum, const char *pszCurrentBinding )
{
if ( ShouldDraw() && pszCurrentBinding )
{
if ( FStrEq (pszCurrentBinding, "save_replay" ) )
{
SetVisible( false );
}
}
return 0;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CReplayReminderPanel::OnThink()
{
BaseClass::OnThink();
if ( !IsVisible() )
return;
// If we're displaying the element for some specific duration...
if ( m_flShowTime )
{
// Get maximum duration
ConVarRef replay_postwinreminderduration( "replay_postwinreminderduration" );
float flShowLength = replay_postwinreminderduration.IsValid() ? replay_postwinreminderduration.GetFloat() : 5.0f;
if ( gpGlobals->curtime >= m_flShowTime + flShowLength )
{
m_flShowTime = 0;
SetVisible( false );
}
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CReplayReminderPanel::SetVisible( bool bState )
{
if ( bState )
{
SetupText();
}
// Store this state for ShouldDraw()
m_bShouldDraw = bState;
BaseClass::SetVisible( bState );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CReplayReminderPanel::ShouldDraw()
{
return m_bShouldDraw;
}
#endif // #if defined( REPLAY_ENABLED )