diff options
Diffstat (limited to 'game/client/hl1/hl1_hud_flashlight.cpp')
| -rw-r--r-- | game/client/hl1/hl1_hud_flashlight.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/game/client/hl1/hl1_hud_flashlight.cpp b/game/client/hl1/hl1_hud_flashlight.cpp new file mode 100644 index 0000000..c3872b7 --- /dev/null +++ b/game/client/hl1/hl1_hud_flashlight.cpp @@ -0,0 +1,132 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + + +#include "cbase.h" +#include "hud.h" +#include "hudelement.h" +#include "hud_macros.h" +#include "iclientmode.h" +#include "hl1_c_player.h" + +#include <vgui/ISurface.h> +#include <vgui_controls/Panel.h> + + +#define MIN_ALPHA 100 + + +class CHudFlashlight : public CHudElement, public vgui::Panel +{ + DECLARE_CLASS_SIMPLE( CHudFlashlight, vgui::Panel ); + +public: + CHudFlashlight( const char *pElementName ); + +private: + void Paint( void ); + void ApplySchemeSettings(vgui::IScheme *pScheme); + +private: + CHudTexture *icon_flash_empty; + CHudTexture *icon_flash_full; + CHudTexture *icon_flash_beam; + Color m_clrReddish; +}; + +DECLARE_HUDELEMENT( CHudFlashlight ); + + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CHudFlashlight::CHudFlashlight( const char *pElementName ) : CHudElement( pElementName ), BaseClass(NULL, "HudFlashlight") +{ + vgui::Panel *pParent = g_pClientMode->GetViewport(); + SetParent( pParent ); + + SetHiddenBits( HIDEHUD_HEALTH | HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT ); +} + +void CHudFlashlight::Paint( void ) +{ + int r, g, b, a, nUnused; + int x, y; + bool bIsOn; + Color clrFlash; + + C_HL1_Player *pPlayer = ToHL1Player( C_HL1_Player::GetLocalPlayer() ); + if ( !pPlayer ) + return; + + if ( !icon_flash_empty ) + { + icon_flash_empty = gHUD.GetIcon( "flash_empty" ); + } + + if ( !icon_flash_full ) + { + icon_flash_full = gHUD.GetIcon( "flash_full" ); + } + + if ( !icon_flash_beam ) + { + icon_flash_beam = gHUD.GetIcon( "flash_beam" ); + } + + if ( !icon_flash_empty || !icon_flash_full || !icon_flash_beam ) + { + return; + } + + bIsOn = pPlayer->IsEffectActive( EF_DIMLIGHT ); + + if ( bIsOn ) + a = 225; + else + a = MIN_ALPHA; + + if ( pPlayer->m_nFlashBattery < 20 ) + { + m_clrReddish.GetColor( r, g, b, nUnused ); + } + else + { + (gHUD.m_clrYellowish).GetColor( r, g, b, nUnused ); + } + + clrFlash.SetColor( r, g, b, a ); + + y = icon_flash_empty->Height() / 2; + x = GetWide() - ( icon_flash_empty->Width() * 1.5 ); + + // Draw the flashlight casing + icon_flash_empty->DrawSelf( x, y, clrFlash ); + + if ( bIsOn ) + { // draw the flashlight beam + x = GetWide() - icon_flash_empty->Width() / 2; + + icon_flash_beam->DrawSelf( x, y, clrFlash ); + } + + // draw the flashlight energy level + x = GetWide() - ( icon_flash_empty->Width() * 1.5 ); + + int nOffset = icon_flash_empty->Width() * ( 1.0 - ( (float)pPlayer->m_nFlashBattery / 100.0 ) ); + if ( nOffset < icon_flash_empty->Width() ) + { + icon_flash_full->DrawSelfCropped( x + nOffset, y, nOffset, 0, icon_flash_full->Width() - nOffset, icon_flash_full->Height(), clrFlash ); + } +} + +void CHudFlashlight::ApplySchemeSettings(vgui::IScheme *pScheme) +{ + BaseClass::ApplySchemeSettings(pScheme); + SetPaintBackgroundEnabled(false); + + m_clrReddish = pScheme->GetColor( "Reddish", Color( 255, 16, 16, 255 ) ); +} |