//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef TF_HUD_FLAGSTATUS_H #define TF_HUD_FLAGSTATUS_H #ifdef _WIN32 #pragma once #endif #include "entity_capture_flag.h" #include "tf_controls.h" #include "tf_imagepanel.h" #include "GameEventListener.h" #include "hudelement.h" class CCaptureFlag; class CTFFlagCalloutPanel; //----------------------------------------------------------------------------- // Purpose: Draws the rotated arrow panels //----------------------------------------------------------------------------- class CTFArrowPanel : public vgui::Panel { public: DECLARE_CLASS_SIMPLE( CTFArrowPanel, vgui::Panel ); CTFArrowPanel( vgui::Panel *parent, const char *name ); virtual void Paint(); virtual bool IsVisible( void ); void SetEntity( EHANDLE hEntity ){ m_hEntity = hEntity; } float GetAngleRotation( void ); void OnTick( void ); private: EHANDLE m_hEntity; CMaterialReference m_RedMaterial; CMaterialReference m_BlueMaterial; CMaterialReference m_NeutralMaterial; CMaterialReference m_NeutralRedMaterial; CMaterialReference m_RedMaterialNoArrow; CMaterialReference m_BlueMaterialNoArrow; bool m_bUseRed; float m_flNextColorSwitch; IMaterial *m_pMaterial; }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CTFFlagStatus : public vgui::EditablePanel { public: DECLARE_CLASS_SIMPLE( CTFFlagStatus, vgui::EditablePanel ); CTFFlagStatus( vgui::Panel *parent, const char *name ); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual bool IsVisible( void ); void UpdateStatus( void ); void SetEntity( EHANDLE hEntity ) { m_hEntity = hEntity; if ( m_pArrow ) { m_pArrow->SetEntity( hEntity ); } UpdateStatus(); } CBaseEntity *GetEntity( void ){ return m_hEntity.Get(); } private: EHANDLE m_hEntity; CTFArrowPanel *m_pArrow; CTFImagePanel *m_pStatusIcon; CTFImagePanel *m_pBriefcase; }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CTFHudFlagObjectives : public vgui::EditablePanel, public CGameEventListener { DECLARE_CLASS_SIMPLE( CTFHudFlagObjectives, vgui::EditablePanel ); public: CTFHudFlagObjectives( vgui::Panel *parent, const char *name ); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual bool IsVisible( void ); virtual void Reset(); void OnTick(); public: // IGameEventListener: virtual void FireGameEvent( IGameEvent *event ); private: void UpdateStatus( C_BasePlayer *pNewOwner = NULL, C_BaseEntity *pFlagEntity = NULL ); void SetPlayingToLabelVisible( bool bVisible ); void SetCarriedImage( const char *pchIcon ); private: vgui::ImagePanel *m_pCarriedImage; CExLabel *m_pPlayingTo; vgui::Panel *m_pPlayingToBG; CTFFlagStatus *m_pRedFlag; CTFFlagStatus *m_pBlueFlag; CTFArrowPanel *m_pCapturePoint; bool m_bFlagAnimationPlayed; bool m_bCarryingFlag; vgui::ImagePanel *m_pSpecCarriedImage; vgui::ImagePanel *m_pPoisonImage; CExLabel *m_pPoisonTimeLabel; bool m_bPlayingHybrid_CTF_CP; bool m_bPlayingSpecialDeliveryMode; int m_nNumValidFlags; }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CTFFlagCalloutPanel : public CHudElement, public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CTFFlagCalloutPanel, vgui::EditablePanel ); public: CTFFlagCalloutPanel( const char *pElementName ); ~CTFFlagCalloutPanel( void ); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void PerformLayout( void ); virtual void OnTick( void ); virtual void PaintBackground( void ); virtual void Paint( void ); void GetCalloutPosition( const Vector &vecDelta, float flRadius, float *xpos, float *ypos, float *flRotation ); void SetFlag( CCaptureFlag *pFlag, float flDuration, Vector &vecOffset ); static CTFFlagCalloutPanel *AddFlagCalloutIfNotFound( CCaptureFlag *pFlag, float flDuration, Vector &vecLocation ); bool ShouldShowFlagIconToLocalPlayer( void ); void ScaleAndPositionCallout( float flScale = 1.f ); CHandle< CCaptureFlag > m_hFlag; private: IMaterial *m_pArrowMaterial; CTFImagePanel *m_pFlagCalloutPanel; vgui::Label *m_pFlagValueLabel; CTFImagePanel *m_pFlagStatusIcon; float m_flRemoveTime; float m_flFirstDisplayTime; Vector m_vecOffset; int m_iDrawArrow; bool m_bFlagVisible; // LOS float m_flPrevScale; int m_nPanelWideOrig; int m_nPanelTallOrig; int m_nLabelWideOrig; int m_nLabelTallOrig; int m_nIconWideOrig; int m_nIconTallOrig; static CUtlVector< CTFFlagCalloutPanel* > m_FlagCalloutPanels; }; #endif // TF_HUD_FLAGSTATUS_H