diff options
Diffstat (limited to 'game/client/tf/tf_hud_mann_vs_machine_status.h')
| -rw-r--r-- | game/client/tf/tf_hud_mann_vs_machine_status.h | 378 |
1 files changed, 378 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_mann_vs_machine_status.h b/game/client/tf/tf_hud_mann_vs_machine_status.h new file mode 100644 index 0000000..9c91001 --- /dev/null +++ b/game/client/tf/tf_hud_mann_vs_machine_status.h @@ -0,0 +1,378 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef TF_HUD_MANN_VS_MACHINE_STATUS_H +#define TF_HUD_MANN_VS_MACHINE_STATUS_H +#ifdef _WIN32 +#pragma once +#endif + + +#include "hudelement.h" +#include "tf_controls.h" +#include "hud.h" +#include <vgui/IScheme.h> +#include <vgui_controls/ProgressBar.h> +#include <vgui_controls/ScalableImagePanel.h> +#include <vgui_controls/EditablePanel.h> +#include <vgui/ISurface.h> +#include "tf_hud_objectivestatus.h" +#include "tf_hud_mann_vs_machine_victory.h" +#include "tf_gcmessages.h" +#include "tf_hud_mann_vs_machine_stats.h" +#include "tf_hud_mann_vs_machine_loss.h" +#include "tf_mann_vs_machine_stats.h" + +#define MAX_TANK_PROGRESS_BARS 5 + +//========================================================= +typedef struct +{ + int nCount; + const char *pchClassIconName; + int iFlags; + bool bActive; +} hud_enemy_data_t; + +class CEnemyCountPanel : public vgui::EditablePanel, public CGameEventListener +{ + DECLARE_CLASS_SIMPLE( CEnemyCountPanel, vgui::EditablePanel ); +public: + CEnemyCountPanel( Panel *parent, const char *pName ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void FireGameEvent( IGameEvent *event ); + + void SetFlashing( bool bState ); + bool IsFlashing( void ){ return m_bFlashing; } + + CTFImagePanel *m_pEnemyCountImage; + Panel *m_pEnemyCountImageBG; + CTFImagePanel *m_pEnemyCountCritBG; + +private: + bool m_bFlashing; +}; + +//========================================================= +class CMvMBossProgressBar : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CMvMBossProgressBar, vgui::EditablePanel ); +public: + CMvMBossProgressBar( Panel *parent, const char *pName ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void OnTick( void ); + void SetPercentage( float flPercentage ); + void SetImage( const char* pszImageName ); + +private: + float m_flPercentage; + float m_flOldPercentage; + int m_nBarOrgX; + int m_nBarOrgY; + int m_nBarOrgW; + int m_nBarOrgT; + int m_nBgOrgX; + int m_nBgOrgY; + int m_nBgOrgW; + int m_nBgOrgT; + vgui::ScalableImagePanel *m_pProgressBar; + vgui::ScalableImagePanel *m_pProgressBarBG; + CTFImagePanel *m_pBossImage; + + // keeps the two rounded ends a certain distance apart from each other so the rounded line continues to look good even at low values + CPanelAnimationVarAliasType( int, m_nWidthSpacer, "width_spacer", "2", "proportional_xpos" ); +}; + +//========================================================= +class CMvMBossStatusPanel : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CMvMBossStatusPanel, vgui::EditablePanel ); +public: + CMvMBossStatusPanel( Panel *parent, const char *pName ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void OnTick( void ); + +private: + vgui::ScalableImagePanel *m_pBackground; + CUtlVector< CMvMBossProgressBar* > m_ProgressBars; + int m_nBackgroundOriginalX; + int m_nBackgroundOriginalY; + int m_nBackgroundOriginalW; + int m_nBackgroundOriginalT; + int m_nBackGroundTall; + bool m_bPanelDirty; + + CPanelAnimationVarAliasType( int, m_nSpaceBetweenPanels, "yOffset", "5", "proportional_ypos" ); + CPanelAnimationVarAliasType( int, m_nXOffset, "xOffset", "5", "proportional_xpos" ); +}; + +//========================================================= +class CCurrencyStatusPanel : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CCurrencyStatusPanel, vgui::EditablePanel ); +public: + CCurrencyStatusPanel( Panel *parent, const char *name ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void OnTick( void ); + + virtual bool UpdateHUD( void ); + +private: + int m_nCurrency; + int m_nTargetCurrency; +}; + +//========================================================= +class CInWorldCurrencyStatus : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CInWorldCurrencyStatus, vgui::EditablePanel ); +public: + CInWorldCurrencyStatus( Panel *parent, const char *name ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void OnTick( void ); + +private: + + vgui::Label *m_pGood; + vgui::Label *m_pBad; +}; + +//========================================================= +class CWaveStatusPanel : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CWaveStatusPanel, vgui::EditablePanel ); +public: + CWaveStatusPanel( Panel *parent, const char *pName ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void OnTick( void ); + +private: + void UpdateEnemyCounts( void ); + + void AddClassIconBeingUsed( CUtlVector< const char* > &vector, const char *pchIcon ) const; // used temporarily to track the icons we're showing + bool IsClassIconBeingUsed( CUtlVector< const char* > &vector, const char *pchIcon ) const; // used temporarily to track the icons we're showing + +private: + int m_nEnemyRemainingNoSupport; + int m_nBarOrgX; + int m_nBarOrgY; + int m_nBarOrgW; + int m_nBarOrgT; + int m_nBgOrgX; + int m_nBgOrgY; + int m_nBgOrgW; + int m_nBgOrgT; + int m_nWaveCount; + int m_nMaxWaveCount; + bool m_bPanelDirty; + + vgui::Panel *m_pSeparatorBar; + CExLabel *m_pSupportLabel; + vgui::ScalableImagePanel *m_pProgressBar; + vgui::ScalableImagePanel *m_pProgressBarBG; + vgui::ScalableImagePanel *m_pBackground; + + CUtlVector< CEnemyCountPanel* > m_EnemyCountPanels; + + CPanelAnimationVarAliasType( int, m_nWaveCountYPos, "count_ypos", "32", "proportional_ypos" ); // ypos for the icon/count pairs + CPanelAnimationVarAliasType( int, m_nSupportLabelYOffset, "support_label_yOffset", "20", "proportional_ypos" ); + CPanelAnimationVarAliasType( int, m_nWaveCountOffset, "count_offset", "5", "proportional_xpos" ); // space between the icon/count pairs + CPanelAnimationVarAliasType( int, m_nWaveCountBGMinWidth, "count_bg_min_width", "200", "proportional_xpos" ); // min background width + CPanelAnimationVar( Color, m_clrNormal, "color_normal", "TanLight" ); + CPanelAnimationVar( Color, m_clrMiniBoss, "color_miniboss", "RedSolid" ); + + // keeps the two rounded ends a certain distance apart from each other so the rounded line continues to look good even at low values + CPanelAnimationVarAliasType( int, m_nWidthSpacer, "width_spacer", "2", "proportional_xpos" ); + + CPanelAnimationVar( bool, m_bVerbose, "verbose", "0" ); + CPanelAnimationVarAliasType( int, m_nNormalHeight, "normal_height", "35", "proportional_ypos" ); + CPanelAnimationVarAliasType( int, m_nVerboseHeightNoNumbers, "verbose_height_no_numbers", "53", "proportional_ypos" ); + CPanelAnimationVarAliasType( int, m_nVerboseHeight, "verbose_height", "65", "proportional_ypos" ); +}; + +//========================================================= +class CWarningSwoop : public vgui::ImagePanel +{ + DECLARE_CLASS_SIMPLE( CWarningSwoop, vgui::ImagePanel ); +public: + CWarningSwoop( Panel *parent, const char *name ); + + virtual void PaintBackground( void ); + virtual bool IsVisible( void ); + + void StartSwoop( void ); + +private: + float m_flStartCapAnimStart; + + CPanelAnimationVar( float, m_flSwoopTime, "time", "0.3" ); +}; + +//========================================================= +class CWaveCompleteSummaryPanel : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CWaveCompleteSummaryPanel, vgui::EditablePanel ); +public: + CWaveCompleteSummaryPanel( Panel *parent, const char *pName ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void OnTick( void ); + + void ShowWaveSummary( int nWaveNumber ); + +private: + enum + { + CREDITS_COLLECT = 0, + CREDITS_MISSED, + CREDITS_BONUS, + RATING_LABEL, + RATING_SCORE, + CHECKPOINT, + WAIT, + FINISHED, + }; + + bool StateUpdateValue( vgui::EditablePanel *parent, char* field, float targetTime, float currentTime, int nextState, int endValue ); + + void RatingLabelUpdate( void ); + void RatingScoreUpdate( void ); + + bool CheckState( float targetTime, float currentTime, int nextState ); + void CheckCredits (); + + vgui::EditablePanel *m_pWaveCompleteContainer; + vgui::EditablePanel *m_pCreditContainerPanel; + vgui::EditablePanel *m_pRatingContainerPanel; + + vgui::Label *m_pCreditBonusTextLabel; + vgui::Label *m_pCreditBonusCountLabel; + + vgui::ScalableImagePanel *m_pRespecBackground; + vgui::EditablePanel *m_pRespecContainerPanel; + vgui::Label *m_pRespecTextLabel; + vgui::Label *m_pRespecCountLabel; + + float m_fPreviousTick; + float m_fStateRunningTime; + + int m_nWaveNumber; + int m_eState; + + int m_nCreditsCollected; + int m_nCreditsMissed; + int m_nCreditBonus; +}; + +//========================================================= +class CVictorySplash : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CVictorySplash, vgui::EditablePanel ); +public: + CVictorySplash( Panel *parent, const char *pName ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void OnTick( void ); + +private: + +}; + +//========================================================= +class CMvMBombCarrierProgress : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CMvMBombCarrierProgress, vgui::EditablePanel ); +public: + CMvMBombCarrierProgress( Panel *parent, const char *pName ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + +}; + +//========================================================= +class CTFHudMannVsMachineStatus : public CHudElement, public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CTFHudMannVsMachineStatus, vgui::EditablePanel ); + +public: + CTFHudMannVsMachineStatus( const char *pElementName ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void FireGameEvent( IGameEvent *event ); + virtual bool ShouldDraw( void ); + virtual void OnTick( void ); + //virtual void OnCommand( const char *command ); + + void WaveFailed( void ); + void ShowWaveSummary ( int nWaveNumber ); + void MVMVictory( bool bIsKicking, int bTime ); + void MVMServerKickTimeUpdate( int bTime ); + void MVMVictoryGCResponse( CMsgMvMVictoryInfo &pData ); + + void ForceVictoryRefresh(); + + void ReopenVictoryPanel( void ); + + bool IsVictoryPanelVisible() + { + return m_pVictoryContainer && m_pVictoryContainer->IsVictoryPanelVisible(); + } + + virtual GameActionSet_t GetPreferredActionSet() { return IsVictoryPanelVisible() ? GAME_ACTION_SET_MENUCONTROLS : CHudElement::GetPreferredActionSet(); } + + bool IsWaveCompletePanelVisible() + { + return m_pWaveCompletePanel && m_pWaveCompletePanel->IsVisible(); + } +private: + + void UpdateBombCarrierProgress ( void ); + + void UpdateServerMessage( void ); + + CWarningSwoop *m_pWarningSwoop; + CWaveStatusPanel *m_pWaveStatusPanel; + CWaveCompleteSummaryPanel *m_pWaveCompletePanel; + + CVictorySplash *m_pVictorySplash; + CMvMVictoryPanelContainer *m_pVictoryContainer; + CMvMWaveLossPanel *m_pWaveLossPanel; + + vgui::EditablePanel *m_pServerChangeMessage; + + bool m_bInVictorySplash; + float m_flVictoryTimer; + + int m_nNextWaveTime; + + bool m_bSpecPanelVisible; + int m_nSpyMissionCount; + + int m_nFlagCarrierUpgradeLevel; + vgui::EditablePanel *m_pUpgradeLevelContainer; + vgui::ImagePanel *m_pUpgradeLevel1; + vgui::ImagePanel *m_pUpgradeLevel2; + vgui::ImagePanel *m_pUpgradeLevel3; + vgui::ImagePanel *m_pUpgradeLevelBoss; + + int m_nUpgradeMaskBaseWidth; + int m_nUpgradeMaskMaxWidth; + vgui::EditablePanel *m_pBombUpgradeMeterMask; + + bool m_bAdjustWaveStatusPanel; + + bool m_bIsServerKicking; + float m_flServerEndTime; +}; + +#endif // TF_HUD_MANN_VS_MACHINE_STATUS_H
\ No newline at end of file |