659 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			659 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /***
 | ||
|  | * | ||
|  | *	Copyright (c) 1999, Valve LLC. All rights reserved. | ||
|  | *	 | ||
|  | *	This product contains software technology licensed from Id  | ||
|  | *	Software, Inc. ("Id Technology").  Id Technology (c) 1996 Id Software, Inc.  | ||
|  | *	All Rights Reserved. | ||
|  | * | ||
|  | *   Use, distribution, and modification of this source code and/or resulting | ||
|  | *   object code is restricted to non-commercial enhancements to products from | ||
|  | *   Valve LLC.  All other use, distribution, or modification is prohibited | ||
|  | *   without written permission from Valve LLC. | ||
|  | * | ||
|  | ****/ | ||
|  | //			
 | ||
|  | //  hud.h
 | ||
|  | //
 | ||
|  | // class CHud declaration
 | ||
|  | //
 | ||
|  | // CHud handles the message, calculation, and drawing the HUD
 | ||
|  | //
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #define RGB_YELLOWISH 0x00FFA000 //255,160,0
 | ||
|  | #define RGB_REDISH 0x00FF1010 //255,160,0
 | ||
|  | #define RGB_GREENISH 0x0000A000 //0,160,0
 | ||
|  | 
 | ||
|  | #ifndef _WIN32
 | ||
|  | #define _cdecl 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #include "wrect.h"
 | ||
|  | #include "cl_dll.h"
 | ||
|  | #include "ammo.h"
 | ||
|  | 
 | ||
|  | #define DHN_DRAWZERO 1
 | ||
|  | #define DHN_2DIGITS  2
 | ||
|  | #define DHN_3DIGITS  4
 | ||
|  | #define MIN_ALPHA	 100	
 | ||
|  | 
 | ||
|  | #define		HUDELEM_ACTIVE	1
 | ||
|  | 
 | ||
|  | typedef struct { | ||
|  | 	int x, y; | ||
|  | } POSITION; | ||
|  | 
 | ||
|  | #include "global_consts.h"
 | ||
|  | 
 | ||
|  | typedef struct { | ||
|  | 	unsigned char r,g,b,a; | ||
|  | } RGBA; | ||
|  | 
 | ||
|  | typedef struct cvar_s cvar_t; | ||
|  | 
 | ||
|  | 
 | ||
|  | #define HUD_ACTIVE	1
 | ||
|  | #define HUD_INTERMISSION 2
 | ||
|  | 
 | ||
|  | #define MAX_PLAYER_NAME_LENGTH		32
 | ||
|  | 
 | ||
|  | #define	MAX_MOTD_LENGTH				1536
 | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	POSITION  m_pos; | ||
|  | 	int   m_type; | ||
|  | 	int	  m_iFlags; // active, moving, 
 | ||
|  | 	virtual		~CHudBase() {} | ||
|  | 	virtual int Init( void ) {return 0;} | ||
|  | 	virtual int VidInit( void ) {return 0;} | ||
|  | 	virtual int Draw(float flTime) {return 0;} | ||
|  | 	virtual void Think(void) {return;} | ||
|  | 	virtual void Reset(void) {return;} | ||
|  | 	virtual void InitHUDData( void ) {}		// called every time a server is connected to
 | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | struct HUDLIST { | ||
|  | 	CHudBase	*p; | ||
|  | 	HUDLIST		*pNext; | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | #include "voice_status.h" // base voice handling class
 | ||
|  | #include "hud_spectator.h"
 | ||
|  | 
 | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudAmmo: public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw(float flTime); | ||
|  | 	void Think(void); | ||
|  | 	void Reset(void); | ||
|  | 	int DrawWList(float flTime); | ||
|  | 	int MsgFunc_CurWeapon(const char *pszName, int iSize, void *pbuf); | ||
|  | 	int MsgFunc_WeaponList(const char *pszName, int iSize, void *pbuf); | ||
|  | 	int MsgFunc_AmmoX(const char *pszName, int iSize, void *pbuf); | ||
|  | 	int MsgFunc_AmmoPickup( const char *pszName, int iSize, void *pbuf ); | ||
|  | 	int MsgFunc_WeapPickup( const char *pszName, int iSize, void *pbuf ); | ||
|  | 	int MsgFunc_ItemPickup( const char *pszName, int iSize, void *pbuf ); | ||
|  | 	int MsgFunc_HideWeapon( const char *pszName, int iSize, void *pbuf ); | ||
|  | 
 | ||
|  | 	void SlotInput( int iSlot ); | ||
|  | 	void _cdecl UserCmd_Slot1( void ); | ||
|  | 	void _cdecl UserCmd_Slot2( void ); | ||
|  | 	void _cdecl UserCmd_Slot3( void ); | ||
|  | 	void _cdecl UserCmd_Slot4( void ); | ||
|  | 	void _cdecl UserCmd_Slot5( void ); | ||
|  | 	void _cdecl UserCmd_Slot6( void ); | ||
|  | 	void _cdecl UserCmd_Slot7( void ); | ||
|  | 	void _cdecl UserCmd_Slot8( void ); | ||
|  | 	void _cdecl UserCmd_Slot9( void ); | ||
|  | 	void _cdecl UserCmd_Slot10( void ); | ||
|  | 	void _cdecl UserCmd_Close( void ); | ||
|  | 	void _cdecl UserCmd_NextWeapon( void ); | ||
|  | 	void _cdecl UserCmd_PrevWeapon( void ); | ||
|  | 
 | ||
|  | private: | ||
|  | 	float m_fFade; | ||
|  | 	RGBA  m_rgba; | ||
|  | 	WEAPON *m_pWeapon; | ||
|  | 	int	m_HUD_bucket0; | ||
|  | 	int m_HUD_selection; | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | 
 | ||
|  | class CHudAmmoSecondary: public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	void Reset( void ); | ||
|  | 	int Draw(float flTime); | ||
|  | 
 | ||
|  | 	int MsgFunc_SecAmmoVal( const char *pszName, int iSize, void *pbuf ); | ||
|  | 	int MsgFunc_SecAmmoIcon( const char *pszName, int iSize, void *pbuf ); | ||
|  | 
 | ||
|  | private: | ||
|  | 	enum { | ||
|  | 		MAX_SEC_AMMO_VALUES = 4 | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	int m_HUD_ammoicon; // sprite indices
 | ||
|  | 	int m_iAmmoAmounts[MAX_SEC_AMMO_VALUES]; | ||
|  | 	float m_fFade; | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | #include "health.h"
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #define FADE_TIME 100
 | ||
|  | 
 | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudGeiger: public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw(float flTime); | ||
|  | 	int MsgFunc_Geiger(const char *pszName, int iSize, void *pbuf); | ||
|  | 	 | ||
|  | private: | ||
|  | 	int m_iGeigerRange; | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudTrain: public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw(float flTime); | ||
|  | 	int MsgFunc_Train(const char *pszName, int iSize, void *pbuf); | ||
|  | 
 | ||
|  | private: | ||
|  | 	HSPRITE m_hSprite; | ||
|  | 	int m_iPos; | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudStatusBar : public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw( float flTime ); | ||
|  | 	void Reset( void ); | ||
|  | 	void ParseStatusString( int line_num ); | ||
|  | 
 | ||
|  | 	int MsgFunc_StatusText( const char *pszName, int iSize, void *pbuf ); | ||
|  | 	int MsgFunc_StatusValue( const char *pszName, int iSize, void *pbuf ); | ||
|  | 
 | ||
|  | protected: | ||
|  | 	enum {  | ||
|  | 		MAX_STATUSTEXT_LENGTH = 128, | ||
|  | 		MAX_STATUSBAR_VALUES = 8, | ||
|  | 		MAX_STATUSBAR_LINES = 3, | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	char m_szStatusText[MAX_STATUSBAR_LINES][MAX_STATUSTEXT_LENGTH];  // a text string describing how the status bar is to be drawn
 | ||
|  | 	char m_szStatusBar[MAX_STATUSBAR_LINES][MAX_STATUSTEXT_LENGTH];	// the constructed bar that is drawn
 | ||
|  | 	int m_iStatusValues[MAX_STATUSBAR_VALUES];  // an array of values for use in the status bar
 | ||
|  | 
 | ||
|  | 	int m_bReparseString; // set to TRUE whenever the m_szStatusBar needs to be recalculated
 | ||
|  | 
 | ||
|  | 	// an array of colors...one color for each line
 | ||
|  | 	float *m_pflNameColors[MAX_STATUSBAR_LINES]; | ||
|  | }; | ||
|  | 
 | ||
|  | struct extra_player_info_t  | ||
|  | { | ||
|  | 	short frags; | ||
|  | 	short deaths; | ||
|  | 	short playerclass; | ||
|  | 	short health; // UNUSED currently, spectator UI would like this
 | ||
|  | 	bool dead; // UNUSED currently, spectator UI would like this
 | ||
|  | 	short teamnumber; | ||
|  | 	char teamname[MAX_TEAM_NAME]; | ||
|  | }; | ||
|  | 
 | ||
|  | struct team_info_t  | ||
|  | { | ||
|  | 	char name[MAX_TEAM_NAME]; | ||
|  | 	short frags; | ||
|  | 	short deaths; | ||
|  | 	short ping; | ||
|  | 	short packetloss; | ||
|  | 	short ownteam; | ||
|  | 	short players; | ||
|  | 	int already_drawn; | ||
|  | 	int scores_overriden; | ||
|  | 	int teamnumber; | ||
|  | }; | ||
|  | 
 | ||
|  | #include "player_info.h"
 | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudDeathNotice : public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	void InitHUDData( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw( float flTime ); | ||
|  | 	int MsgFunc_DeathMsg( const char *pszName, int iSize, void *pbuf ); | ||
|  | 
 | ||
|  | private: | ||
|  | 	int m_HUD_d_skull;  // sprite index of skull icon
 | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudMenu : public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	void InitHUDData( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	void Reset( void ); | ||
|  | 	int Draw( float flTime ); | ||
|  | 	int MsgFunc_ShowMenu( const char *pszName, int iSize, void *pbuf ); | ||
|  | 
 | ||
|  | 	void SelectMenuItem( int menu_item ); | ||
|  | 
 | ||
|  | 	int m_fMenuDisplayed; | ||
|  | 	int m_bitsValidSlots; | ||
|  | 	float m_flShutoffTime; | ||
|  | 	int m_fWaitingForMore; | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudSayText : public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	void InitHUDData( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw( float flTime ); | ||
|  | 	int MsgFunc_SayText( const char *pszName, int iSize, void *pbuf ); | ||
|  | 	void SayTextPrint( const char *pszBuf, int iBufSize, int clientIndex = -1 ); | ||
|  | 	void EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ); | ||
|  | friend class CHudSpectator; | ||
|  | 
 | ||
|  | private: | ||
|  | 
 | ||
|  | 	struct cvar_s *	m_HUD_saytext; | ||
|  | 	struct cvar_s *	m_HUD_saytext_time; | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudBattery: public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw(float flTime); | ||
|  | 	int MsgFunc_Battery(const char *pszName,  int iSize, void *pbuf ); | ||
|  | 	 | ||
|  | private: | ||
|  | 	HSPRITE m_hSprite1; | ||
|  | 	HSPRITE m_hSprite2; | ||
|  | 	wrect_t *m_prc1; | ||
|  | 	wrect_t *m_prc2; | ||
|  | 	int	  m_iBat;	 | ||
|  | 	int	  m_iBatMax; | ||
|  | 	float m_fFade; | ||
|  | 	int	  m_iHeight;		// width of the battery innards
 | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudFlashlight: public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw(float flTime); | ||
|  | 	void Reset( void ); | ||
|  | 	int MsgFunc_Flashlight(const char *pszName,  int iSize, void *pbuf ); | ||
|  | 	int MsgFunc_FlashBat(const char *pszName,  int iSize, void *pbuf ); | ||
|  | 	 | ||
|  | private: | ||
|  | 	HSPRITE m_hSprite1; | ||
|  | 	HSPRITE m_hSprite2; | ||
|  | 	HSPRITE m_hBeam; | ||
|  | 	wrect_t *m_prc1; | ||
|  | 	wrect_t *m_prc2; | ||
|  | 	wrect_t *m_prcBeam; | ||
|  | 	float m_flBat;	 | ||
|  | 	int	  m_iBat;	 | ||
|  | 	int	  m_fOn; | ||
|  | 	float m_fFade; | ||
|  | 	int	  m_iWidth;		// width of the battery innards
 | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | const int maxHUDMessages = 16; | ||
|  | struct message_parms_t | ||
|  | { | ||
|  | 	client_textmessage_t	*pMessage; | ||
|  | 	float	time; | ||
|  | 	int x, y; | ||
|  | 	int	totalWidth, totalHeight; | ||
|  | 	int width; | ||
|  | 	int lines; | ||
|  | 	int lineLength; | ||
|  | 	int length; | ||
|  | 	int r, g, b; | ||
|  | 	int text; | ||
|  | 	int fadeBlend; | ||
|  | 	float charTime; | ||
|  | 	float fadeTime; | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | 
 | ||
|  | class CHudTextMessage: public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	static char *LocaliseTextString( const char *msg, char *dst_buffer, int buffer_size ); | ||
|  | 	static char *BufferedLocaliseTextString( const char *msg ); | ||
|  | 	char *LookupString( const char *msg_name, int *msg_dest = NULL ); | ||
|  | 	int MsgFunc_TextMsg(const char *pszName, int iSize, void *pbuf); | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | 
 | ||
|  | class CHudMessage: public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw(float flTime); | ||
|  | 	int MsgFunc_HudText(const char *pszName, int iSize, void *pbuf); | ||
|  | 	int MsgFunc_HudTextPro(const char *pszName, int iSize, void *pbuf); | ||
|  | 	int MsgFunc_GameTitle(const char *pszName, int iSize, void *pbuf); | ||
|  | 
 | ||
|  | 	float FadeBlend( float fadein, float fadeout, float hold, float localTime ); | ||
|  | 	int	XPosition( float x, int width, int lineWidth ); | ||
|  | 	int YPosition( float y, int height ); | ||
|  | 
 | ||
|  | 	void MessageAdd( const char *pName, float time ); | ||
|  | 	void MessageAdd(client_textmessage_t * newMessage ); | ||
|  | 	void MessageDrawScan( client_textmessage_t *pMessage, float time ); | ||
|  | 	void MessageScanStart( void ); | ||
|  | 	void MessageScanNextChar( void ); | ||
|  | 	void Reset( void ); | ||
|  | 
 | ||
|  | private: | ||
|  | 	client_textmessage_t		*m_pMessages[maxHUDMessages]; | ||
|  | 	float						m_startTime[maxHUDMessages]; | ||
|  | 	message_parms_t				m_parms; | ||
|  | 	float						m_gameTitleTime; | ||
|  | 	client_textmessage_t		*m_pGameTitle; | ||
|  | 
 | ||
|  | 	int m_HUD_title_life; | ||
|  | 	int m_HUD_title_half; | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | #define MAX_SPRITE_NAME_LENGTH	24
 | ||
|  | 
 | ||
|  | class CHudStatusIcons: public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	void Reset( void ); | ||
|  | 	int Draw(float flTime); | ||
|  | 	int MsgFunc_StatusIcon(const char *pszName, int iSize, void *pbuf); | ||
|  | 
 | ||
|  | 	enum {  | ||
|  | 		MAX_ICONSPRITENAME_LENGTH = MAX_SPRITE_NAME_LENGTH, | ||
|  | 		MAX_ICONSPRITES = 4, | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	 | ||
|  | 	//had to make these public so CHud could access them (to enable concussion icon)
 | ||
|  | 	//could use a friend declaration instead...
 | ||
|  | 	void EnableIcon( char *pszIconName, unsigned char red, unsigned char green, unsigned char blue ); | ||
|  | 	void DisableIcon( char *pszIconName ); | ||
|  | 
 | ||
|  | private: | ||
|  | 
 | ||
|  | 	typedef struct | ||
|  | 	{ | ||
|  | 		char szSpriteName[MAX_ICONSPRITENAME_LENGTH]; | ||
|  | 		HSPRITE spr; | ||
|  | 		wrect_t rc; | ||
|  | 		unsigned char r, g, b; | ||
|  | 	} icon_sprite_t; | ||
|  | 
 | ||
|  | 	icon_sprite_t m_IconList[MAX_ICONSPRITES]; | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | class CHudBenchmark : public CHudBase | ||
|  | { | ||
|  | public: | ||
|  | 	int Init( void ); | ||
|  | 	int VidInit( void ); | ||
|  | 	int Draw( float flTime ); | ||
|  | 
 | ||
|  | 	void SetScore( float score ); | ||
|  | 
 | ||
|  | 	void Think( void ); | ||
|  | 
 | ||
|  | 	void StartNextSection( int section ); | ||
|  | 
 | ||
|  | 	int MsgFunc_Bench(const char *pszName, int iSize, void *pbuf); | ||
|  | 
 | ||
|  | 	void CountFrame( float dt ); | ||
|  | 
 | ||
|  | 	int GetObjects( void ) { return m_nObjects; }; | ||
|  | 
 | ||
|  | 	void SetCompositeScore( void ); | ||
|  | 
 | ||
|  | 	void Restart( void ); | ||
|  | 
 | ||
|  | 	int Bench_ScoreForValue( int stage, float raw ); | ||
|  | 
 | ||
|  | private: | ||
|  | 	float	m_fDrawTime; | ||
|  | 	float	m_fDrawScore; | ||
|  | 	float	m_fAvgScore; | ||
|  | 
 | ||
|  | 	float   m_fSendTime; | ||
|  | 	float	m_fReceiveTime; | ||
|  | 
 | ||
|  | 	int		m_nFPSCount; | ||
|  | 	float	m_fAverageFT; | ||
|  | 	float	m_fAvgFrameRate; | ||
|  | 
 | ||
|  | 	int		m_nSentFinish; | ||
|  | 	float	m_fStageStarted; | ||
|  | 
 | ||
|  | 	float	m_StoredLatency; | ||
|  | 	float	m_StoredPacketLoss; | ||
|  | 	int		m_nStoredHopCount; | ||
|  | 	int		m_nTraceDone; | ||
|  | 
 | ||
|  | 	int		m_nObjects; | ||
|  | 
 | ||
|  | 	int		m_nScoreComputed; | ||
|  | 	int 	m_nCompositeScore; | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | //-----------------------------------------------------
 | ||
|  | //
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class CHud | ||
|  | { | ||
|  | private: | ||
|  | 	HUDLIST						*m_pHudList; | ||
|  | 	HSPRITE						m_hsprLogo; | ||
|  | 	int							m_iLogo; | ||
|  | 	client_sprite_t				*m_pSpriteList; | ||
|  | 	int							m_iSpriteCount; | ||
|  | 	int							m_iSpriteCountAllRes; | ||
|  | 	float						m_flMouseSensitivity; | ||
|  | 	int							m_iConcussionEffect;  | ||
|  | 
 | ||
|  | public: | ||
|  | 
 | ||
|  | 	HSPRITE						m_hsprCursor; | ||
|  | 	float m_flTime;	   // the current client time
 | ||
|  | 	float m_fOldTime;  // the time at which the HUD was last redrawn
 | ||
|  | 	double m_flTimeDelta; // the difference between flTime and fOldTime
 | ||
|  | 	Vector	m_vecOrigin; | ||
|  | 	Vector	m_vecAngles; | ||
|  | 	int		m_iKeyBits; | ||
|  | 	int		m_iHideHUDDisplay; | ||
|  | 	int		m_iFOV; | ||
|  | 	int		m_Teamplay; | ||
|  | 	int		m_iRes; | ||
|  | 	cvar_t  *m_pCvarStealMouse; | ||
|  | 	cvar_t	*m_pCvarDraw; | ||
|  | 
 | ||
|  | 	int m_iFontHeight; | ||
|  | 	int DrawHudNumber(int x, int y, int iFlags, int iNumber, int r, int g, int b ); | ||
|  | 	int DrawHudString(int x, int y, int iMaxX, char *szString, int r, int g, int b ); | ||
|  | 	int DrawHudStringReverse( int xpos, int ypos, int iMinX, char *szString, int r, int g, int b ); | ||
|  | 	int DrawHudNumberString( int xpos, int ypos, int iMinX, int iNumber, int r, int g, int b ); | ||
|  | 	int GetNumWidth(int iNumber, int iFlags); | ||
|  | 
 | ||
|  | private: | ||
|  | 	// the memory for these arrays are allocated in the first call to CHud::VidInit(), when the hud.txt and associated sprites are loaded.
 | ||
|  | 	// freed in ~CHud()
 | ||
|  | 	HSPRITE *m_rghSprites;	/*[HUD_SPRITE_COUNT]*/			// the sprites loaded from hud.txt
 | ||
|  | 	wrect_t *m_rgrcRects;	/*[HUD_SPRITE_COUNT]*/ | ||
|  | 	char *m_rgszSpriteNames; /*[HUD_SPRITE_COUNT][MAX_SPRITE_NAME_LENGTH]*/ | ||
|  | 
 | ||
|  | 	struct cvar_s *default_fov; | ||
|  | public: | ||
|  | 	HSPRITE GetSprite( int index )  | ||
|  | 	{ | ||
|  | 		return (index < 0) ? 0 : m_rghSprites[index]; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	wrect_t& GetSpriteRect( int index ) | ||
|  | 	{ | ||
|  | 		return m_rgrcRects[index]; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	 | ||
|  | 	int GetSpriteIndex( const char *SpriteName );	// gets a sprite index, for use in the m_rghSprites[] array
 | ||
|  | 
 | ||
|  | 	CHudAmmo		m_Ammo; | ||
|  | 	CHudHealth		m_Health; | ||
|  | 	CHudSpectator		m_Spectator; | ||
|  | 	CHudGeiger		m_Geiger; | ||
|  | 	CHudBattery		m_Battery; | ||
|  | 	CHudTrain		m_Train; | ||
|  | 	CHudFlashlight	m_Flash; | ||
|  | 	CHudMessage		m_Message; | ||
|  | 	CHudStatusBar   m_StatusBar; | ||
|  | 	CHudDeathNotice m_DeathNotice; | ||
|  | 	CHudSayText		m_SayText; | ||
|  | 	CHudMenu		m_Menu; | ||
|  | 	CHudAmmoSecondary	m_AmmoSecondary; | ||
|  | 	CHudTextMessage m_TextMessage; | ||
|  | 	CHudStatusIcons m_StatusIcons; | ||
|  | 	CHudBenchmark	m_Benchmark; | ||
|  | 
 | ||
|  | 	void Init( void ); | ||
|  | 	void VidInit( void ); | ||
|  | 	void Think(void); | ||
|  | 	int Redraw( float flTime, int intermission ); | ||
|  | 	int UpdateClientData( client_data_t *cdata, float time ); | ||
|  | 
 | ||
|  | 	CHud() : m_iSpriteCount(0), m_pHudList(NULL) {}   | ||
|  | 	~CHud();			// destructor, frees allocated memory
 | ||
|  | 
 | ||
|  | 	// user messages
 | ||
|  | 	int _cdecl MsgFunc_Damage(const char *pszName, int iSize, void *pbuf ); | ||
|  | 	int _cdecl MsgFunc_GameMode(const char *pszName, int iSize, void *pbuf ); | ||
|  | 	int _cdecl MsgFunc_Logo(const char *pszName,  int iSize, void *pbuf); | ||
|  | 	int _cdecl MsgFunc_ResetHUD(const char *pszName,  int iSize, void *pbuf); | ||
|  | 	void _cdecl MsgFunc_InitHUD( const char *pszName, int iSize, void *pbuf ); | ||
|  | 	void _cdecl MsgFunc_ViewMode( const char *pszName, int iSize, void *pbuf ); | ||
|  | 	int _cdecl MsgFunc_SetFOV(const char *pszName,  int iSize, void *pbuf); | ||
|  | 	int  _cdecl MsgFunc_Concuss( const char *pszName, int iSize, void *pbuf ); | ||
|  | 
 | ||
|  | 	// Screen information
 | ||
|  | 	SCREENINFO	m_scrinfo; | ||
|  | 
 | ||
|  | 	int	m_iWeaponBits; | ||
|  | 	int	m_fPlayerDead; | ||
|  | 	int m_iIntermission; | ||
|  | 
 | ||
|  | 	// sprite indexes
 | ||
|  | 	int m_HUD_number_0; | ||
|  | 
 | ||
|  | 
 | ||
|  | 	void AddHudElem(CHudBase *p); | ||
|  | 
 | ||
|  | 	float GetSensitivity(); | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | extern CHud gHUD; | ||
|  | 
 | ||
|  | extern int g_iPlayerClass; | ||
|  | extern int g_iTeamNumber; | ||
|  | extern int g_iUser1; | ||
|  | extern int g_iUser2; | ||
|  | extern int g_iUser3; | ||
|  | 
 |