diff options
Diffstat (limited to 'game/client/tf2/commanderoverlay.h')
| -rw-r--r-- | game/client/tf2/commanderoverlay.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/game/client/tf2/commanderoverlay.h b/game/client/tf2/commanderoverlay.h new file mode 100644 index 0000000..c477c8c --- /dev/null +++ b/game/client/tf2/commanderoverlay.h @@ -0,0 +1,153 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $NoKeywords: $ +//=============================================================================// + +#if !defined( COMMANDEROVERLAY_H ) +#define COMMANDEROVERLAY_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "panelmetaclassmgr.h" + + +//----------------------------------------------------------------------------- +// forward declarations +//----------------------------------------------------------------------------- +class C_BaseEntity; +class KeyValues; + + +//----------------------------------------------------------------------------- +// Overlay handle +//----------------------------------------------------------------------------- + +typedef unsigned short OverlayHandle_t; +enum +{ + OVERLAY_HANDLE_INVALID = (OverlayHandle_t)~0 +}; + +//----------------------------------------------------------------------------- +// Purpose: Singleton class responsible for managing overlay elements +//----------------------------------------------------------------------------- +class IHudCommanderOverlayMgr +{ +public: +// // Call this when the game starts up + shuts down + virtual void GameInit() = 0; + virtual void GameShutdown() = 0; + + // Call this when the level starts up + shuts down + virtual void LevelInit( ) = 0; + virtual void LevelShutdown() = 0; + + // add an overlay element to the commander mode, returns a handle to it + virtual OverlayHandle_t AddOverlay( char const* pOverlayName, C_BaseEntity* pEntity, vgui::Panel *pParent = NULL ) = 0; + + // removes a particular overlay + virtual void RemoveOverlay( OverlayHandle_t handle ) = 0; + + // Call this once a frame... + virtual void Tick( ) = 0; + + // Call this when commander mode is enabled or disabled + virtual void Enable( bool enable ) = 0; + +protected: + // Don't delete me! + virtual ~IHudCommanderOverlayMgr() {} +}; + + +//----------------------------------------------------------------------------- +// Returns the singleton commander overlay interface +//----------------------------------------------------------------------------- +IHudCommanderOverlayMgr* HudCommanderOverlayMgr(); + + +//----------------------------------------------------------------------------- +// Helper class for entities to join the list of entities to render on screen +//----------------------------------------------------------------------------- +class CPanelRegistration +{ +public: + CPanelRegistration( ) : m_Overlay(OVERLAY_HANDLE_INVALID) {} + + ~CPanelRegistration() + { + HudCommanderOverlayMgr()->RemoveOverlay( m_Overlay ); + } + + void Activate( C_BaseEntity* pEntity, char const* pOverlayName, bool active ) + { + if( active ) + { + AddOverlay( pEntity, pOverlayName ); + } + else + { + RemoveOverlay(); + } + } + + void Activate( C_BaseEntity* pEntity, char const* pOverlayName, vgui::Panel *pParent, int sortOrder, bool active ) + { + if( active ) + { + AddOverlay( pEntity, pOverlayName, pParent ); + } + else + { + RemoveOverlay(); + } + } + + + void AddOverlay( C_BaseEntity *pEntity, const char *pOverlayName, vgui::Panel *pParent = NULL ) + { + RemoveOverlay(); + m_Overlay = HudCommanderOverlayMgr()->AddOverlay( pOverlayName, pEntity, pParent ); + } + + void RemoveOverlay() + { + if( m_Overlay != OVERLAY_HANDLE_INVALID ) + { + HudCommanderOverlayMgr()->RemoveOverlay( m_Overlay ); + m_Overlay = OVERLAY_HANDLE_INVALID; + } + } + + +private: + OverlayHandle_t m_Overlay; +}; + + +//----------------------------------------------------------------------------- +// Macros for help with simple registration of panels +// Put DECLARE_ENTITY_PANEL() in your class definition +// and ENTITY_PANEL_ACTIVATE( "name" ) in the entity's SetDormant call +//----------------------------------------------------------------------------- +#define DECLARE_ENTITY_PANEL() CPanelRegistration m_OverlayPanel +#define ENTITY_PANEL_ACTIVATE( _pOverlayName, _active ) m_OverlayPanel.Activate( this, _pOverlayName, _active ) + + +//----------------------------------------------------------------------------- +// Helper macro to make overlay factories one line of code. Use like this: +// DECLARE_OVERLAY_FACTORY( CEntityImagePanel, "image" ); +//----------------------------------------------------------------------------- +#define DECLARE_OVERLAY_FACTORY( _PanelClass, _nameString ) \ + DECLARE_PANEL_FACTORY( _PanelClass, C_BaseEntity, _nameString ) + +#define DECLARE_OVERLAY_POINT_FACTORY( _PanelClass, _nameString ) \ + DECLARE_PANEL_FACTORY( _PanelClass, void, _nameString ) + + +#endif // COMMANDEROVERLAY_H
\ No newline at end of file |