/***
*
*	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.
*
****/

#ifndef HEALTH_H
#define HEALTH_H

#define DMG_IMAGE_LIFE		2	// seconds that image is up

#define DMG_IMAGE_POISON	0
#define DMG_IMAGE_ACID		1
#define DMG_IMAGE_COLD		2
#define DMG_IMAGE_DROWN		3
#define DMG_IMAGE_BURN		4
#define DMG_IMAGE_NERVE		5
#define DMG_IMAGE_RAD		6
#define DMG_IMAGE_SHOCK		7
//tf defines
#define DMG_IMAGE_CALTROP	8
#define DMG_IMAGE_TRANQ		9
#define DMG_IMAGE_CONCUSS	10
#define DMG_IMAGE_HALLUC	11
#define NUM_DMG_TYPES		12
// instant damage

//// time-based damage
////mask off TF-specific stuff too
//#define DMG_TIMEBASED		(~(0xff003fff))	// mask for time-based damage
//
//
//#define DMG_DROWN			(1 << 14)	// Drowning
//#define DMG_FIRSTTIMEBASED  DMG_DROWN
//
//#define DMG_PARALYZE		(1 << 15)	// slows affected creature down
//#define DMG_NERVEGAS		(1 << 16)	// nerve toxins, very bad
//#define DMG_POISON			(1 << 17)	// blood poisioning
//#define DMG_RADIATION		(1 << 18)	// radiation exposure
//#define DMG_DROWNRECOVER	(1 << 19)	// drowning recovery
//#define DMG_ACID			(1 << 20)	// toxic chemicals or acid burns
//#define DMG_SLOWBURN		(1 << 21)	// in an oven
//#define DMG_SLOWFREEZE		(1 << 22)	// in a subzero freezer
//#define DMG_MORTAR			(1 << 23)	// Hit by air raid (done to distinguish grenade from mortar)
//
////TF ADDITIONS
//#define DMG_IGNITE			(1 << 24)	// Players hit by this begin to burn
//#define DMG_RADIUS_MAX		(1 << 25)	// Radius damage with this flag doesn't decrease over distance
//#define DMG_RADIUS_QUAKE	(1 << 26)	// Radius damage is done like Quake. 1/2 damage at 1/2 radius.
//#define DMG_IGNOREARMOR		(1 << 27)	// Damage ignores target's armor
//#define DMG_AIMED			(1 << 28)   // Does Hit location damage
//#define DMG_WALLPIERCING	(1 << 29)	// Blast Damages ents through walls
//
//#define DMG_CALTROP				(1<<30)
//#define DMG_HALLUC				(1<<31)
#include "common/damagetypes.h"

// TF Healing Additions for TakeHealth
#define DMG_IGNORE_MAXHEALTH	DMG_IGNITE
// TF Redefines since we never use the originals
#define DMG_NAIL				DMG_SLASH
#define DMG_NOT_SELF			DMG_FREEZE


#define DMG_TRANQ				DMG_MORTAR
#define DMG_CONCUSS				DMG_SONIC



typedef struct
{
	float fExpire;
	float fBaseline;
	int	x, y;
} DAMAGE_IMAGE;
	
//
//-----------------------------------------------------
//
class CHudHealth: public CHudBase
{
public:
	virtual int Init( void );
	virtual int VidInit( void );
	virtual int Draw(float fTime);
	virtual void Reset( void );
	int MsgFunc_Health(const char *pszName,  int iSize, void *pbuf);
	int MsgFunc_Damage(const char *pszName,  int iSize, void *pbuf);
	int m_iHealth;
	int m_HUD_dmg_bio;
	int m_HUD_cross;
	float m_fAttackFront, m_fAttackRear, m_fAttackLeft, m_fAttackRight;
	void GetPainColor( int &r, int &g, int &b );
	float m_fFade;

private:
	HSPRITE m_hSprite;
	HSPRITE m_hDamage;
	
	DAMAGE_IMAGE m_dmg[NUM_DMG_TYPES];
	int	m_bitsDamage;
	int DrawPain(float fTime);
	int DrawDamage(float fTime);
	void CalcDamageDirection(vec3_t vecFrom);
	void UpdateTiles(float fTime, long bits);
};	

#endif