You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.0 KiB
132 lines
3.0 KiB
//========= 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 ) ); |
|
}
|
|
|