Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions cl_dll/draw_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,10 @@ int DrawUtils::DrawHudNumber( int x, int y, int iFlags, int iNumber, int r, int

int DrawUtils::DrawHudNumber2( int x, int y, bool DrawZero, int iDigits, int iNumber, int r, int g, int b )
{
// Negative remainders would produce invalid digit sprite indices
if( iNumber < 0 )
iNumber = 0;

int iWidth = gHUD.GetSpriteRect( gHUD.m_HUD_number_0 ).Width();
x += ( iDigits - 1 ) * iWidth;

Expand All @@ -343,6 +347,10 @@ int DrawUtils::DrawHudNumber2( int x, int y, bool DrawZero, int iDigits, int iNu

int DrawUtils::DrawHudNumber2( int x, int y, int iNumber, int r, int g, int b )
{
// Negative remainders would produce invalid digit sprite indices
if( iNumber < 0 )
iNumber = 0;

int iWidth = gHUD.GetSpriteRect( gHUD.m_HUD_number_0 ).Width();

int iDigits = 0;
Expand Down
35 changes: 28 additions & 7 deletions cl_dll/hud/money.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ version.
#include "draw_util.h"
#include "pm_shared.h"

// Taken from MAX_MONEY_THRESHOLD in ReGameDLL's regamedll/dlls/gamerules.h
constexpr int MAX_HUD_MONEY = 999999;

int CHudMoney::Init( )
{
HOOK_MESSAGE( gHUD.m_Money, Money );
Expand Down Expand Up @@ -102,6 +105,14 @@ int CHudMoney::Draw(float flTime)
int iDeltaR, iDeltaG, iDeltaB;
int iDollarHeight = m_hDollar.rect.Height();
int iDeltaAlpha = 255 - interpolate * (255);
int iDeltaAbs = m_iDelta < 0 ? -m_iDelta : m_iDelta;

// the layout is designed for 5 digits, longer numbers grow to the left
// together with the sign, so they never overlap it
int iDeltaDigits = 5;
for( int n = iDeltaAbs / 100000; n > 0; n /= 10 )
iDeltaDigits++;
int xDelta = x - ( iDeltaDigits - 5 ) * gHUD.m_iFontWidth;

DrawUtils::UnpackRGB (iDeltaR, iDeltaG, iDeltaB, m_iDelta < 0 ? RGB_REDISH : RGB_GREENISH);
DrawUtils::ScaleColors(iDeltaR, iDeltaG, iDeltaB, iDeltaAlpha);
Expand All @@ -114,7 +125,7 @@ int CHudMoney::Draw(float flTime)

// draw delta
SPR_Set(m_hPlus.spr, iDeltaR, iDeltaG, iDeltaB );
SPR_DrawAdditive(0, x, y - iDollarHeight * 1.5, &m_hPlus.rect );
SPR_DrawAdditive(0, xDelta, y - iDollarHeight * 1.5, &m_hPlus.rect );
}
else if( m_iDelta < 0)
{
Expand All @@ -123,13 +134,13 @@ int CHudMoney::Draw(float flTime)
b = (RGB_REDISH & 0xFF) - interpolate * (RGB_REDISH & 0xFF);

SPR_Set(m_hMinus.spr, iDeltaR, iDeltaG, iDeltaB );
SPR_DrawAdditive(0, x, y - iDollarHeight * 1.5, &m_hMinus.rect );
SPR_DrawAdditive(0, xDelta, y - iDollarHeight * 1.5, &m_hMinus.rect );
}

DrawUtils::DrawHudNumber2( x + iDollarWidth, y - iDollarHeight * 1.5 , false, 5,
m_iDelta < 0 ? -m_iDelta : m_iDelta,
DrawUtils::DrawHudNumber2( xDelta + iDollarWidth, y - iDollarHeight * 1.5 , false, iDeltaDigits,
iDeltaAbs,
iDeltaR, iDeltaG, iDeltaB);
FillRGBA(x + iDollarWidth / 4, y - iDollarHeight * 1.5 + gHUD.m_iFontHeight / 4, 2, 2, iDeltaR, iDeltaG, iDeltaB, iDeltaAlpha );
FillRGBA(xDelta + iDollarWidth / 4, y - iDollarHeight * 1.5 + gHUD.m_iFontHeight / 4, 2, 2, iDeltaR, iDeltaG, iDeltaB, iDeltaAlpha );
}
else DrawUtils::UnpackRGB( r, g, b, gHUD.m_iDefaultHUDColor );
}
Expand All @@ -139,10 +150,15 @@ int CHudMoney::Draw(float flTime)

DrawUtils::ScaleColors( r, g, b, alphaBalance );

int iDigits = 5;
for( int n = m_iMoneyCount / 100000; n > 0; n /= 10 )
iDigits++;
x -= ( iDigits - 5 ) * gHUD.m_iFontWidth;

SPR_Set(m_hDollar.spr, r, g, b);
SPR_DrawAdditive(0, x, y, &m_hDollar.rect);

DrawUtils::DrawHudNumber2( x + iDollarWidth, y, false, 5, m_iMoneyCount, r, g, b );
DrawUtils::DrawHudNumber2( x + iDollarWidth, y, false, iDigits, m_iMoneyCount, r, g, b );
FillRGBA(x + iDollarWidth / 4, y + gHUD.m_iFontHeight / 4, 2, 2, r, g, b, alphaBalance );
return 1;
}
Expand All @@ -151,7 +167,12 @@ int CHudMoney::MsgFunc_Money(const char *pszName, int iSize, void *pbuf)
{
BufferReader buf( pszName, pbuf, iSize );
int iOldCount = m_iMoneyCount;
m_iMoneyCount = buf.ReadLong();
int iNewCount = buf.ReadLong();
if( iNewCount < 0 )
iNewCount = 0;
else if( iNewCount > MAX_HUD_MONEY )
iNewCount = MAX_HUD_MONEY;
m_iMoneyCount = iNewCount;
gEngfuncs.Cvar_SetValue( gHUD.cscl_currentmoney->name, m_iMoneyCount );
m_iDelta = m_iMoneyCount - iOldCount;
m_fFade = 5.0f; //fade for 5 seconds
Expand Down
Loading