www.pudn.com > ATimeToKill.rar > Particles.h


/**************************************************************************** 
 Particles.h  Particle and particle system base classes. 
  
 Author   :   Dave Astle 
 Date     :   2/1/2001 
 
 Written for OpenGL Game Programming 
*****************************************************************************/ 
#ifndef __PARTICLES_H_INCLUDED__ 
#define __PARTICLES_H_INCLUDED__ 
 
 
/********************************* Includes *********************************/ 
#include  
#include  
#include  
#include  
#include "vector.h" 
 
//using namespace std; 
 
 
/***************************** Data structures ******************************/ 
class CParticleSystem; 
 
struct particle_t 
{ 
  CVector  m_pos;           // current position of the particle 
  CVector  m_prevPos;       // last position of the particle 
  CVector  m_velocity;      // direction and speed 
  CVector  m_acceleration;  // acceleration 
 
  float   m_energy;           // determines how long the particle is alive 
 
  float   m_size;             // size of particle 
  float   m_sizeDelta;        // amount to change the size over time 
 
  float   m_weight;           // determines how gravity affects the particle 
  float   m_weightDelta;      // change over time 
 
  float   m_color[4];         // current color of the particle 
  float   m_colorDelta[4];    // how the color changes with time 
}; 
 
 
class CParticleSystem 
{ 
public: 
     CParticleSystem(int maxParticles, CVector origin); 
 
  // abstract functions 
  virtual void  Update(float elapsedTime)     = 0; 
  virtual void  Render()                      = 0; 
 
  virtual int   Emit(int numParticles); 
 
  virtual void  InitializeSystem(); 
  virtual void  KillSystem(); 
 
protected: 
  virtual void  InitializeParticle(int index) = 0; 
  particle_t *m_particleList;    // particles for this emitter 
  int         m_maxParticles;     // maximum number of particles in total 
  int         m_numParticles;     // indicies of all free particles 
  CVector   m_origin;           // center of the particle system 
 
  float       m_accumulatedTime;  // used to track how long since the last particle was emitted 
 
  CVector   m_force;            // force (gravity, wind, etc.) acting on the particle system 
}; 
 
 
#endif // __PARTICLES_H_INCLUDED__