mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-19 20:16:10 +08:00
Added original SDK code for Alien Swarm.
This commit is contained in:
168
game/client/hud_bitmapnumericdisplay.cpp
Normal file
168
game/client/hud_bitmapnumericdisplay.cpp
Normal file
@ -0,0 +1,168 @@
|
||||
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#include "cbase.h"
|
||||
#include "hud_bitmapnumericdisplay.h"
|
||||
#include "iclientmode.h"
|
||||
|
||||
#include <Color.h>
|
||||
#include <KeyValues.h>
|
||||
#include <vgui/ISurface.h>
|
||||
#include <vgui/ISystem.h>
|
||||
#include <vgui/IVGui.h>
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
using namespace vgui;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CHudBitmapNumericDisplay::CHudBitmapNumericDisplay(vgui::Panel *parent, const char *name) : vgui::Panel(parent, name)
|
||||
{
|
||||
vgui::Panel *pParent = GetClientMode()->GetViewport();
|
||||
SetParent( pParent );
|
||||
|
||||
m_iValue = 0;
|
||||
m_bDisplayValue = true;
|
||||
memset( m_pNumbers, 0, 10*sizeof(CHudTexture *) );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: data accessor
|
||||
//-----------------------------------------------------------------------------
|
||||
void CHudBitmapNumericDisplay::SetDisplayValue(int value)
|
||||
{
|
||||
m_iValue = value;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: renders the vgui panel
|
||||
//-----------------------------------------------------------------------------
|
||||
void CHudBitmapNumericDisplay::Paint()
|
||||
{
|
||||
float alpha = m_flAlphaOverride / 255;
|
||||
Color fgColor = GetFgColor();
|
||||
fgColor[3] *= alpha;
|
||||
SetFgColor( fgColor );
|
||||
|
||||
if (m_bDisplayValue)
|
||||
{
|
||||
// draw our numbers
|
||||
// surface()->DrawSetTextColor(GetFgColor());
|
||||
PaintNumbers(digit_xpos, digit_ypos, m_iValue, GetFgColor());
|
||||
|
||||
// draw the overbright blur
|
||||
for (float fl = m_flBlur; fl > 0.0f; fl -= 1.0f)
|
||||
{
|
||||
if (fl >= 1.0f)
|
||||
{
|
||||
PaintNumbers(digit_xpos, digit_ypos, m_iValue, GetFgColor());
|
||||
}
|
||||
else
|
||||
{
|
||||
// draw a percentage of the last one
|
||||
Color col = GetFgColor();
|
||||
col[3] *= fl;
|
||||
PaintNumbers(digit_xpos, digit_ypos, m_iValue, col);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: data accessor
|
||||
//-----------------------------------------------------------------------------
|
||||
void CHudBitmapNumericDisplay::SetShouldDisplayValue(bool state)
|
||||
{
|
||||
m_bDisplayValue = state;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CHudBitmapNumericDisplay::PaintBackground( void )
|
||||
{
|
||||
int alpha = m_flAlphaOverride / 255;
|
||||
Color bgColor = GetBgColor();
|
||||
bgColor[3] *= alpha;
|
||||
SetBgColor( bgColor );
|
||||
|
||||
BaseClass::PaintBackground();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CHudBitmapNumericDisplay::PaintNumbers(int xpos, int ypos, int value, Color col, int numSigDigits )
|
||||
{
|
||||
if( !m_pNumbers[0] )
|
||||
{
|
||||
int i;
|
||||
char a[16];
|
||||
|
||||
for( i=0;i<10;i++ )
|
||||
{
|
||||
sprintf( a, "number_%d", i );
|
||||
|
||||
m_pNumbers[i] = HudIcons().GetIcon( a );
|
||||
}
|
||||
|
||||
if( !m_pNumbers[0] )
|
||||
return;
|
||||
}
|
||||
|
||||
if( value > 100000 )
|
||||
{
|
||||
value = 99999;
|
||||
}
|
||||
|
||||
int pos = 10000;
|
||||
|
||||
float scale = ( digit_height / (float)m_pNumbers[0]->Height());
|
||||
|
||||
int digit;
|
||||
Color color = GetFgColor();
|
||||
int width = m_pNumbers[0]->Width() * scale;
|
||||
int height = m_pNumbers[0]->Height() * scale;
|
||||
bool bStart = false;
|
||||
|
||||
//right align to xpos
|
||||
|
||||
int numdigits = 1;
|
||||
|
||||
int x = pos;
|
||||
while( x >= 10 )
|
||||
{
|
||||
if( value >= x )
|
||||
numdigits++;
|
||||
|
||||
x /= 10;
|
||||
}
|
||||
|
||||
if( numdigits < numSigDigits )
|
||||
numdigits = numSigDigits;
|
||||
|
||||
xpos -= numdigits * width;
|
||||
|
||||
//draw the digits
|
||||
while( pos >= 1 )
|
||||
{
|
||||
digit = value / pos;
|
||||
value = value % pos;
|
||||
|
||||
if( bStart || digit > 0 || pos <= pow(10.0f,numSigDigits-1) )
|
||||
{
|
||||
bStart = true;
|
||||
m_pNumbers[digit]->DrawSelf( xpos, ypos, width, height, col );
|
||||
xpos += width;
|
||||
}
|
||||
|
||||
pos /= 10;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user