Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/branches/particleEngine/src/lib/graphics/particles/particle_system.h @ 3951

Last change on this file since 3951 was 3951, checked in by bensch, 19 years ago

orxonox/branches/particleEngine: some minor fixes

File size: 3.1 KB
RevLine 
[3245]1/*!
[3925]2    \file particle_system.h
[3329]3
[3245]4*/
[1853]5
[3925]6#ifndef _PARTICLE_SYSTEM_H
7#define _PARTICLE_SYSTEM_H
[1853]8
[3543]9#include "base_object.h"
[3925]10#include "vector.h"
[3930]11
12//! An enumerator for the different types of particles.
13typedef enum PARTICLE_TYPE {PARTICLE_DOT,
14                            PARTICLE_SPRITE,
[3931]15                            PARTICLE_MULTI_SPRITE,
[3930]16                            PARTICLE_OBJECT,
[3931]17                            PARTICLE_MULTI_OBJECT,
[3930]18                            PARTICLE_PRIMITIVE};
19
[3942]20#define PARTICLE_DEFAULT_MAX_COUNT    200               //!< a default count of particles in the system.
21#define PARTICLE_DEFAULT_TYPE         PARTICLE_SPRITE   //!< A default type of the system.
[3930]22
[3925]23// FORWARD DEFINITION
[3926]24class Material;
[3930]25class ParticleEmitter;
[3543]26
[3926]27
[3925]28//! A struct for one Particle
29typedef struct Particle
30{
[3930]31  float timeToLive;           //!< The time this particle lives from NOW on.
32  Vector position;            //!< The current position of this particle.
33  Vector velocity;            //!< The current velocity of this particle.
34  Quaternion rotation;        //!< The current rotation of this particle.
[3931]35  float mass;                 //!< The mass of this particle.
[3932]36  float radius;               //!< The current size of this particle.
[3936]37  float radiusIt;             //!< The difference of the Size per second.
[3930]38
[3931]39  Particle* next;             //!< pointer to the next particle in the List. (NULL if no preceding one)
[3925]40};
[3543]41
[3925]42//! A class to handle particle Systems
43class ParticleSystem : public BaseObject {
[3932]44  friend class ParticleEmitter;
[2036]45
[1904]46 public:
[3934]47  ParticleSystem(unsigned int maxCount = PARTICLE_DEFAULT_MAX_COUNT, PARTICLE_TYPE type = PARTICLE_DEFAULT_TYPE);
[3925]48  virtual ~ParticleSystem();
[3944]49  void setName(const char* name);
50  const char* getName(void) const;
[1853]51
[3942]52  void setType(PARTICLE_TYPE particleType, int count = 0);
[3930]53  void setMaterial(Material* material);
[3938]54  void setInheritSpeed(float value);
[3931]55  void setLifeSpan(float lifeSpan, float randomLifeSpan = 0.0);
[3942]56  void setRadius(float startRadius, float endRadius, float randomStartRadius = 0.0, float randomEndRadius = 0.0);
[3932]57  void setConserve(float conserve);
58  void setMass(float mass, float randomMass);
[3245]59
[3931]60  void tick(float dt);
[3932]61  void draw(void);
[3931]62
[3944]63  void debug(void);
64
[3245]65 private:
[3944]66  char* name;                // the Name of the Particle System
67
[3931]68  float conserve;            //!< How much energy gets conserved to the next Tick.
69  float lifeSpan;            //!< Initial lifetime of a Particle.
70  float randomLifeSpan;
71  float startRadius;
72  float endRadius;
[3942]73  float randomStartRadius;
74  float randomEndRadius;
[3932]75  float initialMass;
76  float randomInitialMass;
[3938]77  float inheritSpeed;
78
[3931]79  // particles
[3934]80  int maxCount;              //!< The maximum count of Particles.
81  int count;                 //!< The current count of Particles.
[3931]82  PARTICLE_TYPE particleType;//!< A type for all the Particles
83  Material* material;        //!< A Material for all the Particles.
[3930]84  Particle* particles;       //!< A list of particles of this System.
[3932]85
[3942]86  GLuint* glID;              //!< A List of different gl-List-ID's
87  GLuint dialectCount;       //!< How many different types of particles are there in the Particle System
[3932]88
[3951]89  void addParticle(const Vector& position, const Vector& velocity, unsigned int data = 0);
[3932]90 
[1853]91};
92
[3925]93#endif /* _PARTICLE_SYSTEM_H */
Note: See TracBrowser for help on using the repository browser.