summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_hud_passtime.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf/tf_hud_passtime.h')
-rw-r--r--game/client/tf/tf_hud_passtime.h198
1 files changed, 198 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_passtime.h b/game/client/tf/tf_hud_passtime.h
new file mode 100644
index 0000000..94eb7fd
--- /dev/null
+++ b/game/client/tf/tf_hud_passtime.h
@@ -0,0 +1,198 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef TF_HUD_PASSTIME_H
+#define TF_HUD_PASSTIME_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tf_controls.h"
+#include "GameEventListener.h"
+
+namespace vgui { class ContinuousProgressBar; }
+class CTFHudPasstimePlayerOffscreenArrow;
+
+//-----------------------------------------------------------------------------
+class CTFHudPasstimePanel : public vgui::EditablePanel
+{
+public:
+ DECLARE_CLASS_SIMPLE( CTFHudPasstimePanel, vgui::EditablePanel );
+ CTFHudPasstimePanel( vgui::Panel *pParent, const char *name );
+
+ virtual bool IsVisible() OVERRIDE;
+};
+
+//-----------------------------------------------------------------------------
+class CTFHudTeamScore : public CTFHudPasstimePanel
+{
+public:
+ DECLARE_CLASS_SIMPLE( CTFHudTeamScore, CTFHudPasstimePanel );
+ CTFHudTeamScore( vgui::Panel *pParent );
+
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
+ virtual void OnTick() OVERRIDE;
+
+private:
+ int GetTeamScore( int iTeam );
+
+ vgui::EditablePanel *m_pPlayingToCluster;
+};
+
+//-----------------------------------------------------------------------------
+class CTFHudPasstimePassNotify : public CTFHudPasstimePanel
+{
+public:
+ DECLARE_CLASS_SIMPLE( CTFHudPasstimePassNotify, CTFHudPasstimePanel );
+ CTFHudPasstimePassNotify( vgui::Panel *pParent );
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
+ virtual void OnTick() OVERRIDE;
+private:
+ vgui::EditablePanel *m_pTextBox;
+ vgui::Label *m_pTextInPassRange;
+ vgui::Label *m_pTextLockedOn;
+ vgui::Label *m_pTextPassIncoming;
+ vgui::Label *m_pTextPlayerName;
+ vgui::ImagePanel *m_pSpeechIndicator;
+ vgui::ImagePanel *m_pPassLockIndicator;
+ vgui::IBorder *m_pTextBoxBorderNormal;
+ vgui::IBorder *m_pTextBoxBorderIncomingRed;
+ vgui::IBorder *m_pTextBoxBorderIncomingBlu;
+};
+
+//-----------------------------------------------------------------------------
+class CTFHudPasstimeEventText
+{
+public:
+ CTFHudPasstimeEventText();
+ ~CTFHudPasstimeEventText();
+ void Tick();
+ void Clear();
+ void SetControls( vgui::Label *pTitleLabel, vgui::Label *pDetailLabel, vgui::Label *pBonusLabel );
+ void EnqueueSteal( C_TFPlayer *pAttacker, C_TFPlayer *pVictim );
+ void EnqueuePass( C_TFPlayer *pThrower, C_TFPlayer *pCatcher );
+ void EnqueueInterception( C_TFPlayer *pThrower, C_TFPlayer *pCatcher );
+ void EnqueueScore( C_TFPlayer *pThrower, C_TFPlayer *pAssister );
+ void EnqueueGeneric( const char *pTitle, const char *pDetail, const char *pBonus );
+
+private:
+ // this would make more sense as a vgui animation but I need more control than that can reliably give me
+ enum class State { Idle, In, Show, Out, Pause };
+
+ struct QueueElement
+ {
+ static const size_t STRLEN_MAX = 128;
+ QueueElement();
+ wchar_t title[STRLEN_MAX];
+ wchar_t detail[STRLEN_MAX];
+ wchar_t bonus[STRLEN_MAX];
+ };
+
+ void SetPlayerName( C_TFPlayer *pPlayer, const char *pKey );
+ void SetTeam( C_TFPlayer *pPlayer );
+ void EnterState( State state, float duration );
+ void SetAlpha( int ia );
+ static void SetLabelText( vgui::Label *pLabel, const wchar_t *pText );
+ void Enqueue( C_TFPlayer *pSource, C_TFPlayer *pSubject, const char *pTitle, const char *pDetail, const char *pBonus );
+
+ template< int TArraySize >
+ void ConstructNewString( const char *pLocTag, wchar_t (&out)[TArraySize] );
+
+ bool m_bValid;
+ CountdownTimer m_displayTimer;
+ KeyValuesAD m_localizeKeys;
+ vgui::Label *m_pTitleLabel;
+ vgui::Label *m_pDetailLabel;
+ vgui::Label *m_pBonusLabel;
+ State m_state;
+ typedef CUtlQueue<QueueElement> Queue;
+ Queue m_queue;
+ wchar_t m_pwcsBuf[32];
+};
+
+//-----------------------------------------------------------------------------
+class CTFArrowPanel;
+class C_TFPlayer;
+class C_PasstimeBall;
+class CTFHudPasstimeOffscreenArrow;
+class C_FuncPasstimeGoal;
+class CTFHudPasstimeBallStatus : public CTFHudPasstimePanel, public CGameEventListener
+{
+public:
+ DECLARE_CLASS_SIMPLE( CTFHudPasstimeBallStatus, CTFHudPasstimePanel );
+ CTFHudPasstimeBallStatus( vgui::Panel *pParent );
+ ~CTFHudPasstimeBallStatus();
+
+ void Reset();
+
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
+ virtual void FireGameEvent( IGameEvent *event ) OVERRIDE;
+ virtual void OnTick() OVERRIDE;
+
+private:
+ static const int NumGoalIcons = 3;
+ bool m_bInitialized;
+ bool m_bReset;
+ bool m_bGoalsFound;
+ int m_iXBlueProgress;
+ int m_iXRedProgress;
+ int m_iYBlueProgress;
+ int m_iYRedProgress;
+ vgui::ImagePanel *m_pGoalIconsBlue[NumGoalIcons];
+ vgui::ImagePanel *m_pGoalIconsRed[NumGoalIcons];
+ CHandle<C_FuncPasstimeGoal> m_hGoalsBlue[NumGoalIcons];
+ CHandle<C_FuncPasstimeGoal> m_hGoalsRed[NumGoalIcons];
+ vgui::ImagePanel *m_pPlayerIcons[MAX_PLAYERS];
+ vgui::ImagePanel *m_pProgressBall;
+ vgui::Label *m_pProgressBallCarrierName;
+ vgui::Panel *m_pProgressLevelBar;
+ vgui::ImagePanel *m_pSelfPlayerIcon;
+ CTFHudPasstimeEventText *m_pEventText;
+
+ vgui::EditablePanel *m_pPowerCluster;
+ vgui::Panel *m_pBallPowerMeterFillContainer;
+ vgui::ImagePanel *m_pBallPowerMeterFill;
+ vgui::Panel *m_pBallPowerMeterFrame;
+ vgui::Panel *m_pBallPowerMeterFinalSection;
+ int m_iBallPowerMeterFillWidth;
+ int m_iPrevBallPower;
+
+ void OnBallFreeSelf( C_TFPlayer *pOwner, C_TFPlayer *pAttacker );
+ void OnBallFreeOther( C_TFPlayer *pOwner, C_TFPlayer *pAttacker );
+ void OnBallGetOther( int iPlayer );
+ void OnBallGetSelf( int iPlayer );
+ void OnBallScore();
+ bool TryForceBallFree();
+ bool TryForceBallGet();
+ void OnBallGet( int getterIndex );
+ void UpdateGoalIcon( vgui::ImagePanel *pIcon, C_FuncPasstimeGoal *pGoal );
+ bool BShouldDraw() const;
+ void OnTickVisible( C_TFPlayer *pLocalPlayer, C_PasstimeBall *pBall);
+ void OnTickHidden();
+ void HideGoalIcons();
+};
+
+//-----------------------------------------------------------------------------
+class CTFHudPasstime : public CTFHudPasstimePanel
+{
+public:
+ DECLARE_CLASS_SIMPLE( CTFHudPasstime, CTFHudPasstimePanel );
+ CTFHudPasstime( vgui::Panel *pParent );
+ ~CTFHudPasstime();
+ void Reset();
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
+ virtual void OnTick() OVERRIDE;
+
+private:
+ CTFHudPasstimeBallStatus *m_pBallStatus;
+ CTFHudTeamScore *m_pTeamScore;
+ CTFHudPasstimeOffscreenArrow *m_pBallOffscreenArrow;
+ CTFHudPasstimePassNotify *m_pPassNotify;
+ CTFHudPasstimePlayerOffscreenArrow *m_pPlayerArrows[MAX_PLAYERS];
+};
+
+#endif // TF_HUD_PASSTIME_H