#pragma once
class CEntity;
class CVector;
enum eExplosionType
{
EXPLOSION_GRENADE,
EXPLOSION_MOLOTOV,
EXPLOSION_ROCKET,
EXPLOSION_CAR,
EXPLOSION_CAR_QUICK,
EXPLOSION_HELI,
EXPLOSION_MINE,
EXPLOSION_BARREL,
EXPLOSION_TANK_GRENADE,
EXPLOSION_HELI_BOMB
};
class CExplosion
{
eExplosionType m_ExplosionType;
CVector m_vecPosition;
float m_fRadius;
float m_fPropagationRate;
CEntity *m_pCreatorEntity;
CEntity *m_pVictimEntity;
float m_fStopTime;
uint8 m_nIteration;
uint8 m_nActiveCounter;
float m_fStartTime;
uint32 m_nParticlesExpireTime;
float m_fPower;
bool m_bIsBoat;
float m_fZshift;
public:
static void Initialise();
static void Shutdown();
static int8 GetExplosionActiveCounter(uint8 id);
static void ResetExplosionActiveCounter(uint8 id);
static uint8 GetExplosionType(uint8 id);
static CVector *GetExplosionPosition(uint8 id);
static bool AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type, const CVector &pos, uint32 lifetime);
static void Update();
static bool TestForExplosionInArea(eExplosionType type, float x1, float x2, float y1, float y2, float z1, float z2);
static void RemoveAllExplosionsInArea(CVector pos, float radius);
};
extern CExplosion (&gaExplosion)[NUM_EXPLOSIONS];