|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Workfile: $
// $Date: $
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "iloadingdisc.h"
#include "vgui_controls/Frame.h"
#include "vgui_controls/Label.h"
#include "hud_numericdisplay.h"
#include "vgui/ISurface.h"
#include "vgui/ILocalize.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
extern vgui::ILocalize *g_pVGuiLocalize;
//-----------------------------------------------------------------------------
// Purpose: Displays the loading plaque
//-----------------------------------------------------------------------------
class CLoadingDiscPanel : public vgui::EditablePanel { typedef vgui::EditablePanel BaseClass; public: CLoadingDiscPanel( vgui::VPANEL parent ); ~CLoadingDiscPanel();
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) { BaseClass::ApplySchemeSettings( pScheme );
int w, h; w = ScreenWidth(); h = ScreenHeight();
if ( w != m_ScreenSize[ 0 ] || h != m_ScreenSize[ 1 ] ) { m_ScreenSize[ 0 ] = w; m_ScreenSize[ 1 ] = h;
// Re-perform the layout if the screen size changed
LoadControlSettings( "resource/LoadingDiscPanel.res" ); }
// center the dialog
int wide, tall; GetSize( wide, tall ); SetPos( ( w - wide ) / 2, ( h - tall ) / 2 ); }
virtual void PaintBackground() { SetBgColor( Color(0, 0, 0, 128) ); SetPaintBackgroundType( 2 ); BaseClass::PaintBackground(); }
virtual void SetText( const char *text ) { m_pLoadingLabel->SetText( text ); }
private: vgui::Label *m_pLoadingLabel; int m_ScreenSize[ 2 ]; };
//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
CLoadingDiscPanel::CLoadingDiscPanel( vgui::VPANEL parent ) : BaseClass( NULL, "CLoadingDiscPanel" ) { int w, h; w = ScreenWidth(); h = ScreenHeight();
SetParent( parent ); SetProportional( true ); SetScheme( "ClientScheme" ); SetVisible( false ); SetCursor( NULL );
m_pLoadingLabel = vgui::SETUP_PANEL(new vgui::Label( this, "LoadingLabel", "" )); m_pLoadingLabel->SetPaintBackgroundEnabled( false );
LoadControlSettings( "resource/LoadingDiscPanel.res" );
// center the dialog
int wide, tall; GetSize( wide, tall ); SetPos( ( w - wide ) / 2, ( h - tall ) / 2 );
m_ScreenSize[ 0 ] = w; m_ScreenSize[ 1 ] = h; }
//-----------------------------------------------------------------------------
// Purpose: Destructor
//-----------------------------------------------------------------------------
CLoadingDiscPanel::~CLoadingDiscPanel() { }
class CLoadingDisc : public ILoadingDisc { private: CLoadingDiscPanel *loadingDiscPanel; CLoadingDiscPanel *m_pPauseDiscPanel; vgui::VPANEL m_hParent;
int m_nPrevTimeRemaining;
public: CLoadingDisc( void ) { loadingDiscPanel = NULL; m_pPauseDiscPanel = NULL; m_nPrevTimeRemaining = -1; }
void Create( vgui::VPANEL parent ) { // don't create now, only when it's needed
m_hParent = parent; }
void Destroy( void ) { if ( loadingDiscPanel ) { loadingDiscPanel->SetParent( (vgui::Panel *)NULL ); loadingDiscPanel->MarkForDeletion(); loadingDiscPanel = NULL; }
if ( m_pPauseDiscPanel ) { m_pPauseDiscPanel->SetParent( (vgui::Panel *)NULL ); m_pPauseDiscPanel->MarkForDeletion(); m_pPauseDiscPanel = NULL; }
m_hParent = NULL; }
void SetLoadingVisible( bool bVisible ) { // demand-create the dialog
if ( bVisible && !loadingDiscPanel ) { loadingDiscPanel = vgui::SETUP_PANEL(new CLoadingDiscPanel( m_hParent ) ); }
if ( loadingDiscPanel ) { loadingDiscPanel->SetVisible( bVisible ); } }
void SetPausedVisible( bool bVisible, float flExpireTime /*= -1.f */) { if ( bVisible ) { if ( !m_pPauseDiscPanel ) { m_pPauseDiscPanel = vgui::SETUP_PANEL(new CLoadingDiscPanel( m_hParent ) ); }
if ( m_pPauseDiscPanel ) { // Update when we have a timer
if ( flExpireTime != -1.f ) { int nTime = (int)( flExpireTime - Plat_FloatTime() ); if ( nTime != m_nPrevTimeRemaining ) { wchar_t wzString[256]; wchar_t wzTime[64]; char szString[256]; _snwprintf( wzTime, sizeof( wzTime ), L"%d", nTime ); g_pVGuiLocalize->ConstructString_safe( wzString, g_pVGuiLocalize->Find( "#GameUI_PausedTimer" ), 1, wzTime ); g_pVGuiLocalize->ConvertUnicodeToANSI( wzString, szString, sizeof( szString ) ); m_pPauseDiscPanel->SetText( szString ); m_nPrevTimeRemaining = nTime; } } else if ( m_pPauseDiscPanel->IsVisible() != bVisible ) { m_pPauseDiscPanel->SetText( "#gameui_paused" ); } } }
if ( m_pPauseDiscPanel ) { m_pPauseDiscPanel->SetVisible( bVisible ); } } };
static CLoadingDisc g_LoadingDisc; ILoadingDisc *loadingdisc = ( ILoadingDisc * )&g_LoadingDisc;
|