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
|