summaryrefslogtreecommitdiff
path: root/game/client/hl2/hud_bonusprogress.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/hl2/hud_bonusprogress.cpp')
-rw-r--r--game/client/hl2/hud_bonusprogress.cpp197
1 files changed, 197 insertions, 0 deletions
diff --git a/game/client/hl2/hud_bonusprogress.cpp b/game/client/hl2/hud_bonusprogress.cpp
new file mode 100644
index 0000000..c7569e0
--- /dev/null
+++ b/game/client/hl2/hud_bonusprogress.cpp
@@ -0,0 +1,197 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+//
+// BonusProgress.cpp
+//
+// implementation of CHudBonusProgress class
+//
+#include "cbase.h"
+#include "hud.h"
+#include "hud_macros.h"
+#include "view.h"
+
+#include "iclientmode.h"
+
+#include <KeyValues.h>
+#include <vgui/ISurface.h>
+#include <vgui/ISystem.h>
+#include <vgui_controls/AnimationController.h>
+
+#include <vgui/ILocalize.h>
+
+using namespace vgui;
+
+#include "hudelement.h"
+#include "hud_numericdisplay.h"
+
+#include "convar.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+#define INIT_BONUS_PROGRESS -1
+
+
+//-----------------------------------------------------------------------------
+// Purpose: BonusProgress panel
+//-----------------------------------------------------------------------------
+class CHudBonusProgress : public CHudElement, public CHudNumericDisplay
+{
+ DECLARE_CLASS_SIMPLE( CHudBonusProgress, CHudNumericDisplay );
+
+public:
+ CHudBonusProgress( const char *pElementName );
+ virtual void Init( void );
+ virtual void VidInit( void );
+ virtual void Reset( void );
+ virtual void OnThink();
+
+private:
+ void SetChallengeLabel( void );
+
+private:
+ // old variables
+ int m_iBonusProgress;
+
+ int m_iLastChallenge;
+};
+
+DECLARE_HUDELEMENT( CHudBonusProgress );
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor
+//-----------------------------------------------------------------------------
+CHudBonusProgress::CHudBonusProgress( const char *pElementName ) : CHudElement( pElementName ), CHudNumericDisplay(NULL, "HudBonusProgress")
+{
+ SetHiddenBits( HIDEHUD_BONUS_PROGRESS );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudBonusProgress::Init()
+{
+ Reset();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudBonusProgress::Reset()
+{
+ m_iBonusProgress = INIT_BONUS_PROGRESS;
+
+ C_BasePlayer *local = C_BasePlayer::GetLocalPlayer();
+ if ( local )
+ m_iLastChallenge = local->GetBonusChallenge();
+
+ SetChallengeLabel();
+
+ SetDisplayValue(m_iBonusProgress);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudBonusProgress::VidInit()
+{
+ Reset();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudBonusProgress::OnThink()
+{
+ C_GameRules *pGameRules = GameRules();
+
+ if ( !pGameRules )
+ {
+ // Not ready to init!
+ return;
+ }
+
+ int newBonusProgress = 0;
+ int iBonusChallenge = 0;
+
+ C_BasePlayer *local = C_BasePlayer::GetLocalPlayer();
+ if ( !local )
+ {
+ // Not ready to init!
+ return;
+ }
+
+ // Never below zero
+ newBonusProgress = MAX( local->GetBonusProgress(), 0 );
+ iBonusChallenge = local->GetBonusChallenge();
+
+ // Only update the fade if we've changed bonusProgress
+ if ( newBonusProgress == m_iBonusProgress && m_iLastChallenge == iBonusChallenge )
+ {
+ return;
+ }
+
+ m_iBonusProgress = newBonusProgress;
+
+ if ( m_iLastChallenge != iBonusChallenge )
+ {
+ m_iLastChallenge = iBonusChallenge;
+ SetChallengeLabel();
+ }
+
+ g_pClientMode->GetViewportAnimationController()->StartAnimationSequence("BonusProgressFlash");
+
+ if ( pGameRules->IsBonusChallengeTimeBased() )
+ {
+ SetIsTime( true );
+ SetIndent( false );
+ }
+ else
+ {
+ SetIsTime( false );
+ SetIndent( true );
+ }
+
+ SetDisplayValue(m_iBonusProgress);
+}
+
+void CHudBonusProgress::SetChallengeLabel( void )
+{
+ // Blank for no challenge
+ if ( m_iLastChallenge == 0 )
+ {
+ SetLabelText(L"");
+ return;
+ }
+
+ char szBonusTextName[] = "#Valve_Hud_BONUS_PROGRESS00";
+
+ int iStringLength = Q_strlen( szBonusTextName );
+
+ szBonusTextName[ iStringLength - 2 ] = ( m_iLastChallenge / 10 ) + '0';
+ szBonusTextName[ iStringLength - 1 ] = ( m_iLastChallenge % 10 ) + '0';
+
+ wchar_t *tempString = g_pVGuiLocalize->Find(szBonusTextName);
+
+ if (tempString)
+ {
+ SetLabelText(tempString);
+ return;
+ }
+
+ // Couldn't find a special string for this challenge
+ tempString = g_pVGuiLocalize->Find("#Valve_Hud_BONUS_PROGRESS");
+ if (tempString)
+ {
+ SetLabelText(tempString);
+ return;
+ }
+
+ // Couldn't find any localizable string
+ SetLabelText(L"BONUS");
+} \ No newline at end of file