summaryrefslogtreecommitdiffhomepage
path: root/nGenEx/Particles.h
blob: 794c075dde07b1f311dea987de202767d4820b10 (plain)
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
/*  Project nGenEx
	Destroyer Studios LLC
	Copyright © 1997-2004. All Rights Reserved.

	SUBSYSTEM:    nGenEx.lib
	FILE:         Particles.h
	AUTHOR:       John DiCamillo


	OVERVIEW
	========
	Particle burst class
*/

#ifndef Particles_h
#define Particles_h

#include "Types.h"
#include "Geometry.h"
#include "Graphic.h"
#include "Sprite.h"

// +--------------------------------------------------------------------+

class Particles : public Graphic
{
public:
	Particles(Bitmap* bitmap, 
	int     np, 
	const   Vec3& base_loc, 
	const   Vec3& vel,
	float   base_speed  = 500.0f, 
	float   drag        = 1.0f,
	float   scale       = 1.0f, 
	float   bloom       = 0.0f, 
	float   decay       = 100.0f, 
	float   release     = 1.0f, 
	bool    cont        = false, 
	bool    trail       = true,
	bool    rise        = false,
	int     blend       = 3,
	int     nframes     = 1);

	virtual ~Particles();

	virtual void   Render(Video* video, DWORD flags);
	virtual void   ExecFrame(double seconds);
	virtual void   TranslateBy(const Point& ref) { offset = ref; loc = loc - ref; }
	virtual bool   CheckVisibility(Projector& projector);

	virtual bool   IsEmitting()   const { return emitting;  }
	virtual void   StopEmitting()       { emitting = false; }

protected:
	int         nparts;
	int         nverts;
	int         blend;
	bool        continuous;
	bool        trailing;
	bool        rising;
	bool        emitting;

	float       base_speed;
	float       max_speed;
	float       drag;
	float       release_rate;
	float       decay;
	float       min_scale;
	float       max_scale;
	float       extra;

	Point       ref_loc;
	Point       offset;
	Point*      velocity;
	Point*      part_loc;
	Point*      release;
	float*      timestamp;
	float*      intensity;
	float*      scale;
	float*      angle;
	BYTE*       frame;

	Sprite*     point_sprite;
};

#endif Particles_h