diff options
Diffstat (limited to 'game/client/cstrike/hud_scenarioicon.cpp')
| -rw-r--r-- | game/client/cstrike/hud_scenarioicon.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/game/client/cstrike/hud_scenarioicon.cpp b/game/client/cstrike/hud_scenarioicon.cpp new file mode 100644 index 0000000..379a1f7 --- /dev/null +++ b/game/client/cstrike/hud_scenarioicon.cpp @@ -0,0 +1,109 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" +#include "hudelement.h" +#include <vgui_controls/Panel.h> +#include <vgui/ISurface.h> +#include "clientmode_csnormal.h" +#include "c_cs_player.h" +#include "cs_gamerules.h" + +#include "c_cs_hostage.h" +#include "c_plantedc4.h" + +class CHudScenarioIcon : public CHudElement, public vgui::Panel +{ +public: + DECLARE_CLASS_SIMPLE( CHudScenarioIcon, vgui::Panel ); + + CHudScenarioIcon( const char *name ); + + virtual bool ShouldDraw(); + virtual void Paint(); + +private: + CPanelAnimationVar( Color, m_clrIcon, "IconColor", "IconColor" ); + + CHudTexture *m_pC4Icon; + CHudTexture *m_pHostageIcon; +}; + + +DECLARE_HUDELEMENT( CHudScenarioIcon ); + + +CHudScenarioIcon::CHudScenarioIcon( const char *pName ) : + vgui::Panel( NULL, "HudScenarioIcon" ), CHudElement( pName ) +{ + SetParent( g_pClientMode->GetViewport() ); + m_pC4Icon = NULL; + m_pHostageIcon = NULL; + + SetHiddenBits( HIDEHUD_PLAYERDEAD ); +} + +bool CHudScenarioIcon::ShouldDraw() +{ + C_CSPlayer *pPlayer = C_CSPlayer::GetLocalCSPlayer(); + return pPlayer && pPlayer->IsAlive(); +} + +void CHudScenarioIcon::Paint() +{ + // If there is a bomb planted, draw that + if( g_PlantedC4s.Count() > 0 ) + { + if ( !m_pC4Icon ) + { + m_pC4Icon = gHUD.GetIcon( "scenario_c4" ); + } + + if ( m_pC4Icon ) + { + int x, y, w, h; + GetBounds( x, y, w, h ); + + C_PlantedC4 *pC4 = g_PlantedC4s[0]; + + Color c = m_clrIcon; + + c[3] = 80; + + if( pC4->m_flNextGlow - gpGlobals->curtime < 0.1 ) + { + c[3] = 255; + } + + if( pC4->IsBombActive() ) + m_pC4Icon->DrawSelf( 0, 0, h, h, c ); //draw it square! + } + } + + CCSGameRules *pRules = CSGameRules(); + + // If there are hostages, draw how many there are + if( pRules && pRules->GetNumHostagesRemaining() ) + { + if ( !m_pHostageIcon ) + { + m_pHostageIcon = gHUD.GetIcon( "scenario_hostage" ); + } + + if( m_pHostageIcon ) + { + int xpos = 0; + int iconWidth = m_pHostageIcon->Width(); + + for(int i=0;i<pRules->GetNumHostagesRemaining();i++) + { + m_pHostageIcon->DrawSelf( xpos, 0, m_clrIcon ); + xpos += iconWidth; + } + } + } +} + |