source-engine/game/client/hl1/hl1_hud_flashlight.cpp

133 lines
3.0 KiB
C++
Raw Normal View History

2022-04-16 09:05:19 +00:00
//========= 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 ) );
}