rev |
line source |
nuclear@0
|
1 #ifndef _PARTICLES_H_
|
nuclear@0
|
2 #define _PARTICLES_H_
|
nuclear@0
|
3
|
nuclear@0
|
4 #include <list>
|
nuclear@0
|
5 #include "n3dmath.h"
|
nuclear@0
|
6 #include "3dgeom.h"
|
nuclear@0
|
7 #include "objects.h"
|
nuclear@0
|
8
|
nuclear@0
|
9 enum BlendingFactor;
|
nuclear@0
|
10
|
nuclear@0
|
11 class Particle {
|
nuclear@0
|
12 public:
|
nuclear@0
|
13 Vector3 pos;
|
nuclear@0
|
14 Vector3 vel;
|
nuclear@0
|
15 unsigned int life;
|
nuclear@0
|
16
|
nuclear@0
|
17 Particle(int life=0);
|
nuclear@0
|
18 Particle(const Vector3 &pos, int life=0);
|
nuclear@0
|
19 Particle(const Vector3 &pos, const Vector3 &vel, int life=0);
|
nuclear@0
|
20
|
nuclear@0
|
21 void Update(const Vector3 &forces, float friction=0);
|
nuclear@0
|
22 };
|
nuclear@0
|
23
|
nuclear@0
|
24 class ParticleSystem {
|
nuclear@0
|
25 private:
|
nuclear@0
|
26 GraphicsContext *gc;
|
nuclear@0
|
27 bool FixedUpdateRate;
|
nuclear@0
|
28 float UpdateRate;
|
nuclear@0
|
29 float LastUpdate;
|
nuclear@0
|
30
|
nuclear@0
|
31 BlendingFactor SourceBlend, DestBlend;
|
nuclear@0
|
32
|
nuclear@0
|
33 Vector3 pos, prevpos; // position of the emmiter (world space)
|
nuclear@0
|
34 Vector3 ShootDirection; // an initial velocity vector for the particles
|
nuclear@0
|
35 std::list<Particle> particles; // a list of particles
|
nuclear@0
|
36 Vertex pquad[4]; // the basic particle quad vertices
|
nuclear@0
|
37 Triangle ptris[2]; // the basic particle quad triangles
|
nuclear@0
|
38 float size; // size of the particles
|
nuclear@0
|
39 float friction; // friction impeding particle movement
|
nuclear@0
|
40 int SpawnRate; // rate of particle generation
|
nuclear@0
|
41 float SpawnRadius; // spawning radius around the emmiter
|
nuclear@0
|
42 float GravForce; // Gravitual force
|
nuclear@0
|
43 float DispRads;
|
nuclear@0
|
44 int life; // particle life
|
nuclear@0
|
45 bool EmmiterAffectsParticleTrajectory; // ehm ... yeah
|
nuclear@0
|
46 float SpawnDiffDispersion;
|
nuclear@0
|
47 int SpawnRateChange; // if 0 then spawn rate constant
|
nuclear@0
|
48
|
nuclear@0
|
49 float StartRed, StartGreen, StartBlue;
|
nuclear@0
|
50 float EndRed, EndGreen, EndBlue;
|
nuclear@0
|
51
|
nuclear@0
|
52 int VertsToRender, TrianglesToRender;
|
nuclear@0
|
53 int vbsize, ibsize, maxprimitives;
|
nuclear@0
|
54 Texture *texture; // the particles' texture
|
nuclear@0
|
55 Object *obj; // the particles' mesh object (if present don't render quads)
|
nuclear@0
|
56 Vertex *varray; // secondary vertex array (ease of development)
|
nuclear@0
|
57 Triangle *tarray; // the triangles
|
nuclear@0
|
58
|
nuclear@0
|
59 int VertexCount, IndexCount, TriCount, ParticleCount;
|
nuclear@0
|
60
|
nuclear@0
|
61 public:
|
nuclear@0
|
62 Matrix4x4 Translation, OrbitRot;
|
nuclear@0
|
63
|
nuclear@0
|
64 ParticleSystem(GraphicsContext *gc);
|
nuclear@0
|
65 ~ParticleSystem();
|
nuclear@0
|
66
|
nuclear@0
|
67 void SetGraphicsContext(GraphicsContext *gc);
|
nuclear@0
|
68 void SetParticleSize(float psize);
|
nuclear@0
|
69 void SetParticleLife(int life);
|
nuclear@0
|
70 void SetFriction(float friction);
|
nuclear@0
|
71 void SetSpawnRate(float spawnrate);
|
nuclear@0
|
72 void SetSpawnRadius(float radius);
|
nuclear@0
|
73 void SetTexture(Texture *texture);
|
nuclear@0
|
74 void SetObject(Object *obj);
|
nuclear@0
|
75 void SetPosition(const Vector3 &pos);
|
nuclear@0
|
76 void SetShootDirection(const Vector3 &dir);
|
nuclear@0
|
77 void SetGravitualForce(float grav);
|
nuclear@0
|
78 void SetEmmiterDependence(bool dep);
|
nuclear@0
|
79 void SetMaxDispersionAngle(float maxdisp);
|
nuclear@0
|
80 void SetInitialColor(float r, float g, float b);
|
nuclear@0
|
81 void SetDeathColor(float r, float g, float b);
|
nuclear@0
|
82 void SetBlendingMode(BlendingFactor src, BlendingFactor dest);
|
nuclear@0
|
83 void SetSpawningDifferenceDispersion(float val);
|
nuclear@0
|
84 void SetSpawnRateChange(int change);
|
nuclear@0
|
85
|
nuclear@0
|
86 void Translate(float x, float y, float z);
|
nuclear@0
|
87 void Rotate(float x, float y, float z);
|
nuclear@0
|
88 void Rotate(const Vector3 &axis, float angle);
|
nuclear@0
|
89 void ResetTranslation();
|
nuclear@0
|
90 void ResetRotation();
|
nuclear@0
|
91
|
nuclear@0
|
92 int CountParticles();
|
nuclear@0
|
93
|
nuclear@0
|
94 void Update(float t = 0.0f);
|
nuclear@0
|
95 void Render();
|
nuclear@0
|
96 };
|
nuclear@0
|
97
|
nuclear@0
|
98
|
nuclear@0
|
99 #endif // _PARTICLES_H_
|