|
|
//========= Copyright � 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++ ) { Q_snprintf( a, sizeof(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; } }
|