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.
187 lines
5.9 KiB
187 lines
5.9 KiB
//========= Copyright © 1996-2005, 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
|
|
|
|
class CHud;
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Base class for all hud elements
|
|
//-----------------------------------------------------------------------------
|
|
class CHudElement : public CGameEventListener
|
|
{
|
|
public:
|
|
DECLARE_CLASS_NOBASE( CHudElement );
|
|
|
|
// constructor - registers object in global list
|
|
CHudElement() {}
|
|
explicit CHudElement( const char *pElementName );
|
|
// destructor - removes object from the global list
|
|
virtual ~CHudElement();
|
|
|
|
virtual void SetHud( CHud *pHud );
|
|
|
|
// 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's starting
|
|
virtual void LevelInit( void ) { return; };
|
|
// LevelShutdown's called whenever a level's 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; }
|
|
|
|
// Called once per frame whether the element is visible or not
|
|
virtual void Think( void ) {return;}
|
|
|
|
// Called when time warping occurs, i.e. when instant replay rewinds or forwards client's time
|
|
virtual void OnTimeJump( 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 );
|
|
|
|
virtual void SetIgnoreGlobalHudDisable( bool hide );
|
|
virtual bool GetIgnoreGlobalHudDisable( void );
|
|
|
|
bool IsParentedToClientDLLRootPanel() const;
|
|
void SetParentedToClientDLLRootPanel( bool parented );
|
|
|
|
// Return true if this HUD element expects an entry in HudLayout.res
|
|
virtual bool WantsHudLayoutEntry( void ) const { return true; }
|
|
|
|
// 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();
|
|
|
|
void SetSplitScreenPlayerSlot( int nSlot );
|
|
int GetSplitScreenPlayerSlot() const;
|
|
|
|
virtual void OnSplitScreenStateChanged() {}
|
|
|
|
public: // IGameEventListener Interface
|
|
|
|
virtual void FireGameEvent( IGameEvent * event ) {}
|
|
|
|
protected:
|
|
void InitCHudElementAfterConstruction( const char* pElementName );
|
|
|
|
public:
|
|
|
|
// True if this element is visible, and should think
|
|
bool m_bActive;
|
|
|
|
// m_bWantLateUpdate defaults to false. Set this to true if you need to position something based on the
|
|
// position of a player or other moving game actor.
|
|
// When true, your Think and ProcessInput functions will be called after the simulation updates this means
|
|
// that the Flash VM will not have a chance to run until after the frame has been rendered. This is
|
|
//probably not a big deal, but is good to know.
|
|
bool m_bWantLateUpdate;
|
|
|
|
protected:
|
|
int m_iHiddenBits;
|
|
int m_nSplitScreenPlayerSlot;
|
|
bool m_ignoreGlobalHudDisable;
|
|
|
|
private:
|
|
const char *m_pElementName;
|
|
bool m_bNeedsRemove;
|
|
bool m_bIsParentedToClientDLLRootPanel;
|
|
|
|
CUtlVector< int > m_HudRenderGroups;
|
|
CHud *m_pHud;
|
|
};
|
|
|
|
#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
|