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
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#if !defined( HUDELEMENT_H )
#define HUDELEMENT_H
#ifdef _WIN32
#pragma once
#endif
#include "hud.h"
#include "hud_element_helper.h"
#include "networkvar.h"
#include "GameEventListener.h"
#include "tier0/memdbgon.h"
#undef new
//-----------------------------------------------------------------------------
// Purpose: Base class for all hud elements
//-----------------------------------------------------------------------------
class CHudElement : public CGameEventListener
{
public:
DECLARE_CLASS_NOBASE( CHudElement );
// constructor - registers object in global list
CHudElement( const char *pElementName );
// destructor - removes object from the global list
virtual ~CHudElement();
// called when the Hud is initialised (whenever the DLL is loaded)
virtual void Init( void ) { return; }
// called whenever the video mode changes, and whenever Init() would be called, so the hud can vid init itself
virtual void VidInit( void ) { return; }
// LevelInit's called whenever a new level is starting
virtual void LevelInit( void ) { return; };
// LevelShutdown's called whenever a level is finishing
virtual void LevelShutdown( void ) { return; };
// called whenever the hud receives "reset" message, which is (usually) every time the client respawns after getting killed
virtual void Reset( void ) { return; }
// Called once per frame for visible elements before general key processing
virtual void ProcessInput( void ) { return; }
//
virtual const char *GetName( void ) const { return m_pElementName; };
// Return true if this hud element should be visible in the current hud state
virtual bool ShouldDraw( void );
virtual bool IsActive( void ) { return m_bActive; };
virtual void SetActive( bool bActive );
// Hidden bits.
// HIDEHUD_ flags that note when this element should be hidden in the HUD
virtual void SetHiddenBits( int iBits );
bool IsParentedToClientDLLRootPanel() const;
void SetParentedToClientDLLRootPanel( bool parented );
// memory handling, uses calloc so members are zero'd out on instantiation
void *operator new( size_t stAllocateBlock )
{
Assert( stAllocateBlock != 0 );
void *pMem = malloc( stAllocateBlock );
memset( pMem, 0, stAllocateBlock );
return pMem;
}
void* operator new( size_t stAllocateBlock, int nBlockUse, const char *pFileName, int nLine )
{
Assert( stAllocateBlock != 0 );
void *pMem = MemAlloc_Alloc( stAllocateBlock, pFileName, nLine );
memset( pMem, 0, stAllocateBlock );
return pMem;
}
void operator delete( void *pMem )
{
#if defined( _DEBUG )
int size = _msize( pMem );
memset( pMem, 0xcd, size );
#endif
free( pMem );
}
void operator delete( void *pMem, int nBlockUse, const char *pFileName, int nLine )
{
operator delete( pMem );
}
void SetNeedsRemove( bool needsremove );
void RegisterForRenderGroup( const char *pszName );
void UnregisterForRenderGroup( const char *pszGroupName );
void HideLowerPriorityHudElementsInGroup( const char *pszGroupName );
void UnhideLowerPriorityHudElementsInGroup( const char *pszGroupName );
// For now, CHUdElements declare a single priority value. They will only be hidden
// by panels with a lower priority and will only lock out panels with a lower priority
virtual int GetRenderGroupPriority();
public: // IGameEventListener Interface
virtual void FireGameEvent( IGameEvent * event ) {}
public:
// True if this element is visible, and should think
bool m_bActive;
protected:
int m_iHiddenBits;
private:
const char *m_pElementName;
bool m_bNeedsRemove;
bool m_bIsParentedToClientDLLRootPanel;
CUtlVector< int > m_HudRenderGroups;
};
#include "utlpriorityqueue.h"
inline bool RenderGroupLessFunc( CHudElement * const &lhs, CHudElement * const &rhs )
{
return ( lhs->GetRenderGroupPriority() < rhs->GetRenderGroupPriority() );
}
// hud elements declare themselves to be part of a hud render group, by name
// we register with each hudelement a list of indeces of groups they are in
// then they can query by index the state of their render group
class CHudRenderGroup
{
public:
CHudRenderGroup()
{
m_pLockingElements.SetLessFunc( RenderGroupLessFunc );
bHidden = false;
}
bool bHidden;
CUtlPriorityQueue< CHudElement * > m_pLockingElements;
};
#include "tier0/memdbgoff.h"
#endif // HUDELEMENT_H
|