//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef TF_TIME_PANEL_H #define TF_TIME_PANEL_H #ifdef _WIN32 #pragma once #endif #include "GameEventListener.h" #include "hudelement.h" #include using namespace vgui; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CTFProgressBar : public vgui::ImagePanel { public: DECLARE_CLASS_SIMPLE( CTFProgressBar, vgui::ImagePanel ); CTFProgressBar( vgui::Panel *parent, const char *name ); virtual void Paint(); void SetPercentage( float flPercentage ){ m_flPercent = flPercentage; } private: float m_flPercent; int m_iTexture; CPanelAnimationVar( Color, m_clrActive, "color_active", "TimerProgress.Active" ); CPanelAnimationVar( Color, m_clrInActive, "color_inactive", "TimerProgress.InActive" ); CPanelAnimationVar( Color, m_clrWarning, "color_warning", "TimerProgress.Active" ); CPanelAnimationVar( float, m_flPercentWarning, "percent_warning", "0.75" ); }; // Floating delta text items, float off the top of the frame to // show changes to the timer value typedef struct { // amount of delta int m_nAmount; // die time float m_flDieTime; } timer_delta_t; #define NUM_TIMER_DELTA_ITEMS 10 class CExLabel; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CTFHudTimeStatus : public vgui::EditablePanel, public CGameEventListener { DECLARE_CLASS_SIMPLE( CTFHudTimeStatus, vgui::EditablePanel ); public: CTFHudTimeStatus( Panel *parent, const char *name ); virtual void Paint( void ); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void Reset(); int GetTimerIndex( void ){ return m_iTimerIndex; } void SetTimerIndex( int index ){ m_iTimerIndex = ( index >= 0 ) ? index : 0; SetExtraTimePanels(); } virtual void FireGameEvent( IGameEvent *event ); void SetTeam( int nTeam ){ m_nTeam = nTeam; } protected: virtual void OnThink(); private: void SetExtraTimePanels(); void SetTimeAdded( int iIndex, int nSeconds ); void CheckClockLabelLength( CExLabel *pLabel, vgui::Panel *pBG ); void SetTeamBackground( void ); private: float m_flNextThink; int m_iTimerIndex; bool m_bSuddenDeath; bool m_bOvertime; CExLabel *m_pTimeValue; CTFProgressBar *m_pProgressBar; vgui::ScalableImagePanel *m_pTimerBG; CExLabel *m_pWaitingForPlayersLabel; vgui::Panel *m_pWaitingForPlayersBG; CExLabel *m_pOvertimeLabel; vgui::Panel *m_pOvertimeBG; CExLabel *m_pSetupLabel; vgui::Panel *m_pSetupBG; CExLabel *m_pServerTimeLabel; vgui::Panel *m_pServerTimeLabelBG; // we'll have a second label/bg set for the SuddenDeath panel in case we want to change the look from the Overtime label CExLabel *m_pSuddenDeathLabel; vgui::Panel *m_pSuddenDeathBG; // delta stuff int m_iTimerDeltaHead; timer_delta_t m_TimerDeltaItems[NUM_TIMER_DELTA_ITEMS]; CPanelAnimationVarAliasType( float, m_flDeltaItemStartPos, "delta_item_start_y", "100", "proportional_float" ); CPanelAnimationVarAliasType( float, m_flDeltaItemEndPos, "delta_item_end_y", "0", "proportional_float" ); CPanelAnimationVarAliasType( float, m_flDeltaItemX, "delta_item_x", "0", "proportional_float" ); CPanelAnimationVar( Color, m_DeltaPositiveColor, "PositiveColor", "0 255 0 255" ); CPanelAnimationVar( Color, m_DeltaNegativeColor, "NegativeColor", "255 0 0 255" ); CPanelAnimationVar( float, m_flDeltaLifetime, "delta_lifetime", "2.0" ); CPanelAnimationVar( vgui::HFont, m_hDeltaItemFont, "delta_item_font", "Default" ); int m_nTeam; bool m_bKothMode; bool m_bCachedOvertime; }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CTFHudKothTimeStatus : public CHudElement, public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CTFHudKothTimeStatus, vgui::EditablePanel ); public: CTFHudKothTimeStatus( const char *pElementName ); ~CTFHudKothTimeStatus(); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void Reset(); virtual void Think(); virtual bool ShouldDraw(); virtual void SetVisible( bool bVisible ) OVERRIDE; virtual int GetRenderGroupPriority( void ) { return 80; } // higher than build menus private: void UpdateActiveTeam( void ); private: CTFHudTimeStatus *m_pBluePanel; CTFHudTimeStatus *m_pRedPanel; Panel *m_pActiveTimerBG; int m_nActiveTeam; CPanelAnimationVarAliasType( int, m_nBlueActiveXPos, "blue_active_xpos", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_nRedActiveXPos, "red_active_xpos", "0", "proportional_int" ); }; #endif // TF_TIME_PANEL_H