absence_thelab

annotate src/3deng/particles.h @ 0:1cffe3409164

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 23 Oct 2014 01:46:07 +0300
parents
children
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_