//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ // //=============================================================================// #include "cbase.h" #include "c_vguiscreen.h" #include "vgui_controls/Label.h" #include "vgui_bitmappanel.h" #include #include "c_neurotoxin_countdown.h" #include "ienginevgui.h" #include "fmtstr.h" #include "vgui_controls/ImagePanel.h" using namespace vgui; //----------------------------------------------------------------------------- // Control screen //----------------------------------------------------------------------------- class CNeurotoxinCountdownScreen : public CVGuiScreenPanel { DECLARE_CLASS( CNeurotoxinCountdownScreen, CVGuiScreenPanel ); public: CNeurotoxinCountdownScreen( vgui::Panel *parent, const char *panelName ); virtual void ApplySchemeSettings( IScheme *pScheme ); virtual bool Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData ); virtual void OnTick(); private: void Update( C_NeurotoxinCountdown *pNeurotoxinCountdown ); private: vgui::Label *m_pDisplayTextLabel; int iLastSlideIndex; Color m_cDefault; Color m_cInvisible; bool bIsAlreadyVisible; //ImagePanel *(m_pNumberImages[ 6 ][ 10 ]); }; DECLARE_VGUI_SCREEN_FACTORY( CNeurotoxinCountdownScreen, "neurotoxin_countdown_screen" ); //----------------------------------------------------------------------------- // Constructor: //----------------------------------------------------------------------------- CNeurotoxinCountdownScreen::CNeurotoxinCountdownScreen( vgui::Panel *parent, const char *panelName ) : BaseClass( parent, "CNeurotoxinCountdownScreen", vgui::scheme()->LoadSchemeFromFileEx( enginevgui->GetPanel( PANEL_CLIENTDLL ), "resource/NeurotoxinCountdownScreen.res", "NeuroToxinScreen" ) ) { m_pDisplayTextLabel = new vgui::Label( this, "NumberDisplay", "x" ); iLastSlideIndex = 0; } void CNeurotoxinCountdownScreen::ApplySchemeSettings( IScheme *pScheme ) { assert( pScheme ); m_cDefault = pScheme->GetColor( "CNeurotoxinCountdownScreen_Default", GetFgColor() ); m_cInvisible = Color( 0, 0, 0, 0 ); m_pDisplayTextLabel->SetFgColor( m_cDefault ); } //----------------------------------------------------------------------------- // Initialization //----------------------------------------------------------------------------- bool CNeurotoxinCountdownScreen::Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData ) { // Make sure we get ticked... vgui::ivgui()->AddTickSignal( GetVPanel() ); if (!BaseClass::Init(pKeyValues, pInitData)) return false; //for ( int iDigit = 0; iDigit < 6; ++iDigit ) //{ // for ( int iNumber = 0; iNumber < 6; ++iNumber ) // { // m_pNumberImages[ iDigit ][ iNumber ] = SETUP_PANEL( new ImagePanel( this, "SlideshowImage" ) ); // m_pNumberImages[ iDigit ][ iNumber ]->SetImage( "" ); // m_pNumberImages[ iDigit ][ iNumber ]->SetZPos( -2 ); // m_pNumberImages[ iDigit ][ iNumber ]->SetVisible( false ); // } //} return true; } //----------------------------------------------------------------------------- // Update the display string //----------------------------------------------------------------------------- void CNeurotoxinCountdownScreen::OnTick() { BaseClass::OnTick(); if ( g_NeurotoxinCountdowns.Count() <= 0 ) return; C_NeurotoxinCountdown *pNeurotoxinCountdown = NULL; for ( int iDisplayScreens = 0; iDisplayScreens < g_NeurotoxinCountdowns.Count(); ++iDisplayScreens ) { C_NeurotoxinCountdown *pNeurotoxinCountdownTemp = g_NeurotoxinCountdowns[ iDisplayScreens ]; if ( pNeurotoxinCountdownTemp && pNeurotoxinCountdownTemp->IsEnabled() ) { pNeurotoxinCountdown = pNeurotoxinCountdownTemp; break; } } if( !pNeurotoxinCountdown ) { // All display screens are disabled if ( bIsAlreadyVisible ) { SetVisible( false ); bIsAlreadyVisible = false; } return; } if ( !bIsAlreadyVisible ) { SetVisible( true ); bIsAlreadyVisible = true; } Update( pNeurotoxinCountdown ); } void CNeurotoxinCountdownScreen::Update( C_NeurotoxinCountdown *pNeurotoxinCountdown ) { char szBuff[ 256 ]; char szMinutesBuff[ 4 ]; char szSecondsBuff[ 4 ]; char szMillisecondsBuff[ 4 ]; int iMinutes = pNeurotoxinCountdown->GetMinutes(); int iSeconds = pNeurotoxinCountdown->GetSeconds(); int iMilliseconds; if ( iMinutes <= 0 && iSeconds <= 0 ) { iMinutes = 0; iSeconds = 0; iMilliseconds = 0; // Blink! m_pDisplayTextLabel->SetVisible( static_cast( gpGlobals->curtime * 10.0f ) % 2 == 0 ); } else { iMilliseconds = pNeurotoxinCountdown->GetMilliseconds(); m_pDisplayTextLabel->SetVisible( true ); } if ( iMinutes < 10 ) sprintf( szMinutesBuff, "0%i", iMinutes ); else sprintf( szMinutesBuff, "%i", iMinutes ); if ( iSeconds < 10 ) sprintf( szSecondsBuff, "0%i", iSeconds ); else sprintf( szSecondsBuff, "%i", iSeconds ); if ( iMilliseconds < 10 ) sprintf( szMillisecondsBuff, "0%i", iMilliseconds ); else sprintf( szMillisecondsBuff, "%i", iMilliseconds ); sprintf( szBuff, "%s:%s:%s", szMinutesBuff, szSecondsBuff, szMillisecondsBuff ); m_pDisplayTextLabel->SetText( szBuff ); }