From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/game/client/vgui_loadingdiscpanel.cpp | 176 +++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 mp/src/game/client/vgui_loadingdiscpanel.cpp (limited to 'mp/src/game/client/vgui_loadingdiscpanel.cpp') diff --git a/mp/src/game/client/vgui_loadingdiscpanel.cpp b/mp/src/game/client/vgui_loadingdiscpanel.cpp new file mode 100644 index 00000000..187cb8c5 --- /dev/null +++ b/mp/src/game/client/vgui_loadingdiscpanel.cpp @@ -0,0 +1,176 @@ +//========= 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" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +//----------------------------------------------------------------------------- +// 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; + +public: + CLoadingDisc( void ) + { + loadingDiscPanel = NULL; + m_pPauseDiscPanel = NULL; + } + + 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 ); + delete loadingDiscPanel; + loadingDiscPanel = NULL; + } + + if ( m_pPauseDiscPanel ) + { + m_pPauseDiscPanel->SetParent( (vgui::Panel *)NULL ); + delete m_pPauseDiscPanel; + 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 ) + { + if ( bVisible && !m_pPauseDiscPanel ) + { + m_pPauseDiscPanel = vgui::SETUP_PANEL(new CLoadingDiscPanel( m_hParent ) ); + m_pPauseDiscPanel->SetText( "#gameui_paused" ); + } + + if ( m_pPauseDiscPanel ) + { + m_pPauseDiscPanel->SetVisible( bVisible ); + } + } +}; + +static CLoadingDisc g_LoadingDisc; +ILoadingDisc *loadingdisc = ( ILoadingDisc * )&g_LoadingDisc; -- cgit v1.2.3