You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.4 KiB
153 lines
4.4 KiB
//========= 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
|