//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef TF_HUD_ROBOT_DESTRUCTION_STATUS_H #define TF_HUD_ROBOT_DESTRUCTION_STATUS_H #ifdef _WIN32 #pragma once #endif #include "tf_controls.h" #include "tf_imagepanel.h" #include "hud_controlpointicons.h" #include "GameEventListener.h" #include "tf_logic_robot_destruction.h" #include "tf_time_panel.h" #include "entity_capture_flag.h" class CTFHudRobotDestruction_StateImage : public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CTFHudRobotDestruction_StateImage, vgui::EditablePanel ); public: CTFHudRobotDestruction_StateImage( Panel *parent, const char *name, const char *pszResFile ); virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE; virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE; void SetImageVisible( bool bVisible ) { m_pImage->SetVisible( bVisible ); } protected: vgui::ImagePanel *m_pImage; vgui::ImagePanel *m_pRobotImage; const char *m_pszResFile; }; //----------------------------------------------------------------------------- class CTFHudRobotDestruction_DeadImage : public CTFHudRobotDestruction_StateImage { DECLARE_CLASS_SIMPLE( CTFHudRobotDestruction_DeadImage, CTFHudRobotDestruction_StateImage ); public: CTFHudRobotDestruction_DeadImage( Panel *parent, const char *name, const char *pszResFile ); void SetProgress( float flProgress ); private: CTFProgressBar *m_pRespawnProgressBar; }; //----------------------------------------------------------------------------- class CTFHudRobotDestruction_ActiveImage : public CTFHudRobotDestruction_StateImage { DECLARE_CLASS_SIMPLE( CTFHudRobotDestruction_ActiveImage, CTFHudRobotDestruction_StateImage ); public: CTFHudRobotDestruction_ActiveImage( Panel *parent, const char *name, const char *pszResFile ); virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE; }; //----------------------------------------------------------------------------- class CTFHudRobotDestruction_RobotIndicator : public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CTFHudRobotDestruction_RobotIndicator, vgui::EditablePanel ); public: CTFHudRobotDestruction_RobotIndicator( vgui::Panel *pParent, const char *pszName, CTFRobotDestruction_RobotGroup *pGroup ); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE; virtual void PerformLayout() OVERRIDE; virtual void ApplySettings( KeyValues *inResourceData ); virtual void OnTick() OVERRIDE; void DoUnderAttackBlink(); int GetGroupNumber() const; int GetTeamNumber() const; void UpdateState(); eRobotUIState GetState() const { return m_eState; } const CTFRobotDestruction_RobotGroup *GetGroup() const { return m_hGroup.Get(); } void SetNextRobotIndicator( CTFHudRobotDestruction_RobotIndicator * pNext ) { m_pNextRobotIndicator = pNext; } void SetPrevRobotIndicator( CTFHudRobotDestruction_RobotIndicator * pPrev ) { m_pPrevRobotIndicator = pPrev; } private: CTFHudRobotDestruction_RobotIndicator *m_pPrevRobotIndicator; CTFHudRobotDestruction_RobotIndicator *m_pNextRobotIndicator; CHandle< CTFRobotDestruction_RobotGroup > m_hGroup; vgui::EditablePanel *m_pRobotStateContainer; CTFHudRobotDestruction_DeadImage *m_pDeadPanel; CTFHudRobotDestruction_ActiveImage *m_pActivePanel; CTFHudRobotDestruction_StateImage *m_pShieldedPanel; float m_flHealthPercentage; eRobotUIState m_eState; CControlPointIconSwoop * m_pSwoop; }; class CTFHUDRobotDestruction : public vgui::EditablePanel, public CGameEventListener { DECLARE_CLASS_SIMPLE( CTFHUDRobotDestruction, vgui::EditablePanel ); public: typedef CUtlVector< CTFHudRobotDestruction_RobotIndicator* > RobotVector_t; CTFHUDRobotDestruction( vgui::Panel *parent, const char *name ); ~CTFHUDRobotDestruction(); virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE; virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE; virtual void PerformLayout() OVERRIDE; virtual bool IsVisible( void ) OVERRIDE; virtual void Reset(); virtual void OnTick() OVERRIDE; virtual void PaintBackground() OVERRIDE; virtual void Paint() OVERRIDE; virtual void FireGameEvent( IGameEvent *pEvent ) OVERRIDE; void UpdateRobotElements(); private: void PaintPDPlayerScore( const CTFPlayer* pPlayer ); void UpdateStolenPoints( int nTeam, EditablePanel* pContainer ); void UpdateCarriedFlagStatus( C_BasePlayer *pNewOwner, C_BaseEntity *pFlag ); void UpdateStolenFlagStatus( int nTeam, C_BaseEntity *pFlag ); void PerformRobotLayout( RobotVector_t& vecRobots, int nTeam ); void SetPlayingToLabelVisible( bool bVisible ); void UpdateTeamRobotCounts(); int m_nStealLeftEdge; int m_nStealRightEdge; KeyValues *m_pRobotIndicatorKVs; CExLabel *m_pPlayingTo; vgui::Panel *m_pPlayingToBG; RobotVector_t m_vecRedRobots; RobotVector_t m_vecBlueRobots; EditablePanel *m_pCarriedContainer; vgui::ImagePanel *m_pCarriedImage; EditablePanel *m_pScoreContainer; EditablePanel *m_pProgressBarsContainer; EditablePanel *m_pBlueStolenContainer; EditablePanel *m_pBlueDroppedPanel; EditablePanel *m_pRedStolenContainer; EditablePanel *m_pRedDroppedPanel; EditablePanel *m_pBlueScoreValueContainer; EditablePanel *m_pRedScoreValueContainer; EditablePanel *m_pCountdownContainer; // used in the player destruction .res file CTFImagePanel *m_pTeamLeaderImage; bool m_bPlayingRD; class CProgressPanel : public ImagePanel, public CGameEventListener { DECLARE_CLASS_SIMPLE( CProgressPanel, ImagePanel ); public: CProgressPanel( vgui::Panel *parent, const char *name ); virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE; virtual void PaintBackground() OVERRIDE; virtual void OnTick() OVERRIDE; virtual void FireGameEvent( IGameEvent * pEvent ) OVERRIDE; void SetProgress( float flProgress, bool bInstant = false ); void Blink(); void SetApproachSpeed( float flApproachSpeed ) { m_flApproachSpeed = flApproachSpeed; } void SetColor( const Color& c ) { m_StandardColor = c; } private: void CaptureBounds(); void CalculateSize(); float m_flWidth; float m_flXpos; int m_nXOrg; int m_nYOrg; int m_nWideOrg; int m_nTallOrg; float m_flLastScoreTime; float m_flCurrentProgress; float m_flEndProgress; float m_flLastTick; CPanelAnimationVarAliasType( int, m_nLeftOffset, "left_offset", "25", "proportional_int" ); CPanelAnimationVarAliasType( int, m_nRightOffset, "right_offset", "25", "proportional_int" ); CPanelAnimationVar( Color, m_StandardColor, "standard_color", "255 255 255 255" ); CPanelAnimationVar( Color, m_BrightColor, "bright_color", "255 255 255 255" ); CPanelAnimationVar( bool, m_bLeftToRight, "left_to_right", "1" ); CPanelAnimationVar( float, m_flApproachSpeed, "approach_speed", "1.f" ); CPanelAnimationVar( float, m_flBlinkThreshold, "blink_threshold", "2.f" ); CPanelAnimationVar( float, m_flBlinkRate, "blink_rate", "3.f" ); }; CProgressPanel *m_pCarriedFlagProgressBar; EditablePanel *m_pRedVictoryPanel; CProgressPanel *m_pRedProgressBar; CProgressPanel *m_pRedProgressBarEscrow; EditablePanel *m_pBlueVictoryPanel; CProgressPanel *m_pBlueProgressBar; CProgressPanel *m_pBlueProgressBarEscrow; CHandle< CCaptureFlag > m_hRedFlag; CHandle< CCaptureFlag > m_hBlueFlag; CPanelAnimationVarAliasType( int, m_nStealLeftEdgeOffset, "left_steal_edge_offset", "25", "proportional_int" ); CPanelAnimationVarAliasType( int, m_nStealRightEdgeOffset, "right_steal_edge_offset", "100", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iRobotXOffset, "robot_x_offset", "6", "proportional_int"); CPanelAnimationVarAliasType( int, m_iRobotYOffset, "robot_y_offset", "25", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iRobotXStep, "robot_x_step", "5", "proportional_int"); CPanelAnimationVarAliasType( int, m_iRobotYStep, "robot_y_step", "0", "proportional_int"); CPanelAnimationVar( Color, m_ColorBlue, "color_blue", "0 0 255 255" ); CPanelAnimationVar( Color, m_ColorRed, "color_red", "255 0 0 255" ); CPanelAnimationVar( vgui::HFont, m_hPDPlayerScoreFont, "player_name_font", "HudFontSmallBold" ); CPanelAnimationVar( Color, m_TextColor, "text_color", "255 255 255 255" ); }; #endif // TF_HUD_ROBOT_DESTRUCTION_STATUS_H