1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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
|