diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/hudelement.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/hudelement.h')
| -rw-r--r-- | game/client/hudelement.h | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/game/client/hudelement.h b/game/client/hudelement.h new file mode 100644 index 0000000..6954fe2 --- /dev/null +++ b/game/client/hudelement.h @@ -0,0 +1,154 @@ +//========= 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 ); + + virtual GameActionSet_t GetPreferredActionSet() { return GAME_ACTION_SET_NONE; } + + // 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 |