aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/client/fx_explosion.h
blob: 5aa147a4ccd1402acb39c8b8923014523453408d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef FX_EXPLOSION_H
#define FX_EXPLOSION_H
#ifdef _WIN32
#pragma once
#endif

#include "particle_collision.h"
#include "glow_overlay.h"

//JDW: For now we're clamping this value
#define	EXPLOSION_FORCE_MAX	2
#define	EXPLOSION_FORCE_MIN	2

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
class C_BaseExplosionEffect
{
private:
	static C_BaseExplosionEffect	m_instance;

public:
			~C_BaseExplosionEffect( void ) {}

	static	C_BaseExplosionEffect &Instance( void )	{	return m_instance;	}

	virtual void	Create( const Vector &position, float force, float scale, int flags );

protected:
					C_BaseExplosionEffect( void );

	virtual void	PlaySound( void );

	virtual void	CreateCore( void );
	virtual void	CreateDebris( void );
	virtual void	CreateMisc( void );
	virtual void	CreateDynamicLight( void );

	float			ScaleForceByDeviation( Vector &deviant, Vector &source, float spread, float *force = NULL );

	float			Probe( const Vector &origin, Vector *direction, float strength );
	void			GetForceDirection( const Vector &origin, float magnitude, Vector *resultDirection, float *resultForce );

protected:

	Vector	m_vecOrigin;
	Vector	m_vecDirection;
	float	m_flForce;
	int		m_fFlags;

	PMaterialHandle	m_Material_Smoke;
	PMaterialHandle m_Material_Embers[2];
	PMaterialHandle m_Material_FireCloud;
};

//Singleton accessor
extern C_BaseExplosionEffect &BaseExplosionEffect( void );


//
// CExplosionOverlay
//

class CExplosionOverlay : public CWarpOverlay
{
public:
	
	virtual bool Update( void );

public:

	float	m_flLifetime;
	Vector	m_vBaseColors[MAX_SUN_LAYERS];

};

//-----------------------------------------------------------------------------
// Purpose: Water explosion
//-----------------------------------------------------------------------------
class C_WaterExplosionEffect : public C_BaseExplosionEffect
{
	typedef C_BaseExplosionEffect BaseClass;
public:
	static	C_WaterExplosionEffect &Instance( void )	{	return m_waterinstance;	}

	virtual void	Create( const Vector &position, float force, float scale, int flags );

protected:
	virtual void	CreateCore( void );
	virtual void	CreateDebris( void );
	virtual void	CreateMisc( void );
	virtual void	PlaySound( void );

private:
	Vector	m_vecWaterSurface;
	float	m_flDepth;				// Depth below the water surface (used for surface effect)
	Vector	m_vecColor;				// Lighting tint information
	float	m_flLuminosity;			// Luminosity information

	static C_WaterExplosionEffect	m_waterinstance;
};

//Singleton accessor
extern C_WaterExplosionEffect &WaterExplosionEffect( void );

//-----------------------------------------------------------------------------
// Purpose: Water explosion
//-----------------------------------------------------------------------------
class C_MegaBombExplosionEffect : public C_BaseExplosionEffect
{
	typedef C_BaseExplosionEffect BaseClass;
public:
	static	C_MegaBombExplosionEffect &Instance( void )	{	return m_megainstance;	}

protected:
	virtual void	CreateCore( void );

	virtual void	CreateDebris( void ) { };
	virtual void	CreateMisc( void ) { };
	virtual void	PlaySound( void ) { };

private:
	static C_MegaBombExplosionEffect	m_megainstance;
};

//Singleton accessor
extern C_MegaBombExplosionEffect &MegaBombExplosionEffect( void );

#endif // FX_EXPLOSION_H