summaryrefslogtreecommitdiff
path: root/game/client/hl1/hl1_hud_ammo.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/hl1/hl1_hud_ammo.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/hl1/hl1_hud_ammo.cpp')
-rw-r--r--game/client/hl1/hl1_hud_ammo.cpp224
1 files changed, 224 insertions, 0 deletions
diff --git a/game/client/hl1/hl1_hud_ammo.cpp b/game/client/hl1/hl1_hud_ammo.cpp
new file mode 100644
index 0000000..3fb52c8
--- /dev/null
+++ b/game/client/hl1/hl1_hud_ammo.cpp
@@ -0,0 +1,224 @@
+//========= 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_hud_numbers.h"
+
+#include <vgui/ISurface.h>
+#include <vgui_controls/Panel.h>
+#include "ihudlcd.h"
+
+#define MIN_ALPHA 100
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Displays current ammunition level
+//-----------------------------------------------------------------------------
+class CHudAmmo : public CHudElement, public CHL1HudNumbers
+{
+ DECLARE_CLASS_SIMPLE( CHudAmmo, CHL1HudNumbers );
+
+public:
+ CHudAmmo( const char *pElementName );
+ void Init( void );
+ void VidInit( void );
+ void OnThink( void );
+
+private:
+ void Paint( void );
+ void ApplySchemeSettings(vgui::IScheme *pScheme);
+
+private:
+ CHandle<C_BaseCombatWeapon> m_hLastPickedUpWeapon;
+ float m_flFade;
+};
+
+DECLARE_HUDELEMENT( CHudAmmo );
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor
+//-----------------------------------------------------------------------------
+CHudAmmo::CHudAmmo( const char *pElementName ) : CHudElement( pElementName ), BaseClass(NULL, "HudAmmo")
+{
+ SetHiddenBits( HIDEHUD_HEALTH | HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT | HIDEHUD_WEAPONSELECTION );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudAmmo::Init( void )
+{
+ m_hLastPickedUpWeapon = NULL;
+ m_flFade = 0.0;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudAmmo::VidInit( void )
+{
+ Reset();
+
+ BaseClass::VidInit();
+}
+
+void CHudAmmo::OnThink( void )
+{
+ C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
+ if ( !pPlayer )
+ return;
+
+ // find and display our current selection
+ C_BaseCombatWeapon *pActiveWeapon = GetActiveWeapon();
+ if ( !pActiveWeapon )
+ {
+ m_hLastPickedUpWeapon = NULL;
+ return;
+ }
+
+ if ( m_hLastPickedUpWeapon != pActiveWeapon )
+ {
+ m_flFade = 200.0f;
+ m_hLastPickedUpWeapon = pActiveWeapon;
+ }
+}
+
+void CHudAmmo::Paint( void )
+{
+ int r, g, b, a, nUnused;
+ int x, y;
+ Color clrAmmo;
+
+ if (!ShouldDraw())
+ return;
+
+ C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
+ C_BaseCombatWeapon *pActiveWeapon = GetActiveWeapon();
+ // find and display our current selection
+
+ if ( !pPlayer || !pActiveWeapon )
+ {
+ hudlcd->SetGlobalStat( "(ammo_primary)", "n/a" );
+ hudlcd->SetGlobalStat( "(ammo_secondary)", "n/a" );
+ return;
+ }
+
+ hudlcd->SetGlobalStat( "(weapon_print_name)", pActiveWeapon ? pActiveWeapon->GetPrintName() : " " );
+ hudlcd->SetGlobalStat( "(weapon_name)", pActiveWeapon ? pActiveWeapon->GetName() : " " );
+
+ if ( ( pActiveWeapon->GetPrimaryAmmoType() == -1 ) && ( pActiveWeapon->GetSecondaryAmmoType() == -1 ) )
+ return;
+
+ int nFontWidth = GetNumberFontWidth();
+ int nFontHeight = GetNumberFontHeight();
+
+ a = (int)MAX( MIN_ALPHA, m_flFade );
+
+ if ( m_flFade > 0 )
+ m_flFade -= ( gpGlobals->frametime * 20 );
+
+ (gHUD.m_clrYellowish).GetColor( r, g, b, nUnused );
+ clrAmmo.SetColor( r, g, b, a );
+
+ int nHudElemWidth, nHudElemHeight;
+ GetSize( nHudElemWidth, nHudElemHeight );
+
+ // Does this weapon have a clip?
+ y = nHudElemHeight - ( nFontHeight * 1.5 );
+
+ // Does weapon have any ammo at all?
+ if ( pActiveWeapon->GetPrimaryAmmoType() != -1 )
+ {
+ CHudTexture *icon_ammo = gWR.GetAmmoIconFromWeapon( pActiveWeapon->GetPrimaryAmmoType() );
+
+ if ( !icon_ammo )
+ {
+ return;
+ }
+
+ int nIconWidth = icon_ammo->Width();
+
+ if ( pActiveWeapon->UsesClipsForAmmo1() )
+ {
+ // room for the number and the '|' and the current ammo
+
+ x = nHudElemWidth - (8 * nFontWidth) - nIconWidth;
+ x = DrawHudNumber( x, y, pActiveWeapon->Clip1(), clrAmmo );
+
+ int nBarWidth = nFontWidth / 10;
+
+ x += nFontWidth / 2;
+
+ (gHUD.m_clrYellowish).GetColor( r, g, b, nUnused );
+ clrAmmo.SetColor( r, g, b, a );
+
+ // draw the | bar
+ clrAmmo.SetColor( r, g, b, a );
+ vgui::surface()->DrawSetColor( clrAmmo );
+ vgui::surface()->DrawFilledRect( x, y, x + nBarWidth, y + nFontHeight );
+
+ x += nBarWidth + nFontWidth / 2;
+
+ x = DrawHudNumber( x, y, pPlayer->GetAmmoCount( pActiveWeapon->GetPrimaryAmmoType() ), clrAmmo );
+ }
+ else
+ {
+ // SPR_Draw a bullets only line
+ x = nHudElemWidth - 4 * nFontWidth - nIconWidth;
+ x = DrawHudNumber( x, y, pPlayer->GetAmmoCount( pActiveWeapon->GetPrimaryAmmoType() ), clrAmmo );
+ }
+
+ // Draw the ammo Icon
+ icon_ammo->DrawSelf( x, y, clrAmmo );
+
+ hudlcd->SetGlobalStat( "(ammo_primary)", VarArgs( "%d", pPlayer->GetAmmoCount( pActiveWeapon->GetPrimaryAmmoType() ) ) );
+ }
+ else
+ {
+ hudlcd->SetGlobalStat( "(ammo_primary)", "n/a" );
+ }
+
+ // Does weapon have seconday ammo?
+ if ( pActiveWeapon->GetSecondaryAmmoType() != -1 )
+ {
+ CHudTexture *icon_ammo = gWR.GetAmmoIconFromWeapon( pActiveWeapon->GetSecondaryAmmoType() );
+
+ if ( !icon_ammo )
+ {
+ return;
+ }
+
+ int nIconWidth = icon_ammo->Width();
+
+ // Do we have secondary ammo?
+ if ( pPlayer->GetAmmoCount( pActiveWeapon->GetSecondaryAmmoType() ) > 0 )
+ {
+ y -= ( nFontHeight * 1.25 );
+ x = nHudElemWidth - 4 * nFontWidth - nIconWidth;
+ x = DrawHudNumber( x, y, pPlayer->GetAmmoCount( pActiveWeapon->GetSecondaryAmmoType() ), clrAmmo );
+
+ // Draw the ammo Icon
+ icon_ammo->DrawSelf( x, y, clrAmmo );
+ }
+
+ hudlcd->SetGlobalStat( "(ammo_secondary)", VarArgs( "%d", pPlayer->GetAmmoCount( pActiveWeapon->GetSecondaryAmmoType() ) ) );
+ }
+ else
+ {
+ hudlcd->SetGlobalStat( "(ammo_secondary)", "n/a" );
+ }
+
+}
+
+void CHudAmmo::ApplySchemeSettings(vgui::IScheme *pScheme)
+{
+ BaseClass::ApplySchemeSettings(pScheme);
+ SetPaintBackgroundEnabled(false);
+}