//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //============================================================================= #ifndef TF_HUD_TARGET_ID_H #define TF_HUD_TARGET_ID_H #ifdef _WIN32 #pragma once #endif #include "hud.h" #include "hudelement.h" #include #include "tf_imagepanel.h" #include "tf_spectatorgui.h" #include "c_tf_player.h" #include "IconPanel.h" class CFloatingHealthIcon; class CAvatarImagePanel; #define PLAYER_HINT_DISTANCE 150 #define PLAYER_HINT_DISTANCE_SQ (PLAYER_HINT_DISTANCE*PLAYER_HINT_DISTANCE) #define MAX_ID_STRING 256 #define MAX_PREPEND_STRING 32 //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CTargetID : public CHudElement, public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CTargetID, vgui::EditablePanel ); public: CTargetID( const char *pElementName ); virtual void LevelShutdown( void ); void Reset( void ); void VidInit( void ); virtual bool ShouldDraw( void ); virtual void PerformLayout( void ); virtual void ApplySettings( KeyValues *inResourceData ); virtual void ApplySchemeSettings( vgui::IScheme *scheme ); void UpdateID( void ); virtual int CalculateTargetIndex( C_TFPlayer *pLocalTFPlayer ); virtual wchar_t *GetPrepend( void ) { return NULL; } int GetTargetIndex( void ) { return m_iTargetEntIndex; } virtual int GetRenderGroupPriority( void ); virtual void FireGameEvent( IGameEvent * event ); virtual bool DrawHealthIcon(); virtual C_TFPlayer *GetTargetForSteamAvatar( C_TFPlayer *pTFPlayer ); private: bool IsValidIDTarget( int nEntIndex, float flOldTargetRetainFOV, float &flNewTargetRetainFOV ); void UpdateFloatingHealthIconVisibility( bool bVisible ); protected: vgui::HFont m_hFont; int m_iLastEntIndex; float m_flLastChangeTime; float m_flTargetRetainFOV; int m_iTargetEntIndex; bool m_bLayoutOnUpdate; vgui::Label *m_pTargetNameLabel; vgui::Label *m_pTargetDataLabel; CTFImagePanel *m_pBGPanel; vgui::EditablePanel *m_pMoveableSubPanel; CIconPanel *m_pMoveableIcon; vgui::ImagePanel *m_pMoveableSymbolIcon; vgui::Label *m_pMoveableKeyLabel; CIconPanel *m_pMoveableIconBG; CTFSpectatorGUIHealth *m_pTargetHealth; vgui::ImagePanel *m_pTargetAmmoIcon; vgui::ImagePanel *m_pTargetKillStreakIcon; CAvatarImagePanel *m_pAvatarImage; int m_iRenderPriority; int m_nOriginalY; Color m_LabelColorDefault; bool m_bArenaPanelVisible; CFloatingHealthIcon *m_pFloatingHealthIcon; int m_iLastScannedEntIndex; CPanelAnimationVarAliasType( int, m_iXOffset, "x_offset", "20", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iYOffset, "y_offset", "20", "proportional_int" ); }; class CMainTargetID : public CTargetID { DECLARE_CLASS_SIMPLE( CMainTargetID, CTargetID ); public: CMainTargetID( const char *pElementName ) : CTargetID( pElementName ) {} virtual bool ShouldDraw( void ); }; class CSpectatorTargetID : public CTargetID { DECLARE_CLASS_SIMPLE( CSpectatorTargetID, CTargetID ); public: CSpectatorTargetID( const char *pElementName ) : CTargetID( pElementName ) {} virtual bool ShouldDraw( void ); virtual int CalculateTargetIndex( C_TFPlayer *pLocalTFPlayer ); virtual void ApplySchemeSettings( vgui::IScheme *scheme ); virtual void PerformLayout( void ); virtual bool DrawHealthIcon() { return true; } private: vgui::Panel *m_pBGPanel_Spec_Blue; vgui::Panel *m_pBGPanel_Spec_Red; }; //----------------------------------------------------------------------------- // Purpose: Second target ID that's used for displaying a second target below the primary //----------------------------------------------------------------------------- class CSecondaryTargetID : public CTargetID { DECLARE_CLASS_SIMPLE( CSecondaryTargetID, CTargetID ); public: CSecondaryTargetID( const char *pElementName ); virtual bool ShouldDraw( void ); virtual int CalculateTargetIndex( C_TFPlayer *pLocalTFPlayer ); virtual wchar_t *GetPrepend( void ) { return m_wszPrepend; } virtual bool DrawHealthIcon() { return true; } private: wchar_t m_wszPrepend[ MAX_PREPEND_STRING ]; bool m_bWasHidingLowerElements; }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CFloatingHealthIcon : public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CFloatingHealthIcon, vgui::EditablePanel ); public: CFloatingHealthIcon( vgui::Panel *parent, const char *name ); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void OnTick( void ); virtual void Paint( void ); virtual bool IsVisible( void ); virtual void SetVisible( bool state ); void Reset( void ); void SetEntity( C_BaseEntity *pEntity ); C_BaseEntity *GetEntity( void ) { return m_hEntity; } static CFloatingHealthIcon* AddFloatingHealthIcon( C_BaseEntity *pEntity ); bool CalculatePosition(); private: CTFSpectatorGUIHealth *m_pTargetHealth; CHandle< C_BaseEntity > m_hEntity; float m_flPrevHealth; int m_nPrevLevel; }; #endif // TF_HUD_TARGET_ID_H