123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /*!
- * \file include/Emitter.h
- * \brief Particle emitter class.
- *
- * \author Mongoose
- */
-
- #ifndef _EMITTER_H_
- #define _EMITTER_H_
-
- #include "Particle.h"
-
- /*!
- * \brief Particle emitter class.
- */
- class Emitter {
- public:
-
- /*!
- * \brief Flags an Emitter can have
- */
- typedef enum {
- fUseFrustumCulling = (1 << 0), //!< Use frustum culling
- fUseDepthSorting = (1 << 1) //!< Use depth sorting
- } EmitterFlags;
-
-
- /*!
- * \brief Constructs an object of Emitter
- * \param name valid C string
- * \param n greater than 0
- */
- Emitter(const char *name, int n);
-
- /*!
- * \brief Deconstructs an object of Emitter
- */
- ~Emitter();
-
- /*!
- * \brief Get the particles
- * \returns array of Particles
- */
- Particle *Particles();
-
- /*!
- * \brief Number of particles emitted
- * \returns Number of particles emitted
- */
- int Count();
-
- /*!
- * \brief Sets position of emitter in 3D space
- * \param x X coordinate
- * \param y Y coordinate
- * \param z Z coordinate
- */
- void Pos(float x, float y, float z);
-
- /*!
- * \brief Returns position of emitter in 3D space
- * \param x Where X coordinate will be stored
- * \param y Where Y coordinate will be stored
- * \param z Where Z coordinate will be stored
- */
- void Pos(float *x, float *y, float *z);
-
- /*!
- * \brief Sets orientation of emitter in 3D space
- * \param x X coordinate
- * \param y Y coordinate
- * \param z Z coordinate
- */
- void Orientation(float x, float y, float z);
-
- /*!
- * \brief Returns orientation of emitter in 3D space
- * \param x Where X coordinate will be stored
- * \param y Where Y coordinate will be stored
- * \param z Where Z coordinate will be stored
- */
- void Orientation(float *x, float *y, float *z);
-
- /*!
- * \brief Get the flags of this Emitter
- * \returns EmitterFlags
- */
- unsigned int Flags();
-
- /*!
- * \brief Set or Unset a flag
- * \param flag EmitterFlag to change
- * \param op new state (true - set)
- */
- void Flags(unsigned int flag, bool op);
-
- /*!
- * \brief Allocates the particle array and sets the count.
- * If the array has been allocated previously it will be
- * deallocated and a new one made.
- * \param n new size, greater than 0
- */
- void ParticleArray(int n);
-
- /*!
- * \brief Renders the particles
- */
- void Draw();
-
- /*!
- * \brief Sets the emitters name
- * \param name is a valid C string
- */
- void Name(const char *name);
-
- /*!
- * \brief Resets all particle texture ids
- * \param id new id
- * \sa Particle::TextureId()
- */
- void SetTextureId(int id);
-
- /*!
- * \brief Set the texture id for a range of particles in the array
- * \param particle_start start of range
- * \param particle_end end of range
- * \param id new id
- * \sa Particle::TextureId()
- */
- void TextureId(unsigned int particle_start, unsigned int particle_end, int id);
-
- /*!
- * \brief Set the color of a range of particles in the array
- * \param particle_start start of range
- * \param particle_end end of range
- * \param r new red part of color (0.0 to 1.0)
- * \param g new green part of color (0.0 to 1.0)
- * \param b new blue part of color (0.0 to 1.0)
- * \sa Particle::Color()
- */
- void Color(unsigned int particle_start, unsigned int particle_end, float r, float g, float b);
-
- /*!
- * \brief Set the speed of a range of particles in the array.
- * Take note that the speed starts out at 2000, and lower means faster.
- * \param particle_start start of range
- * \param particle_end end of range
- * \param x X speed
- * \param y Y speed
- * \param z Z speed
- * \sa Particle::Speed
- */
- void Speed(unsigned int particle_start, unsigned int particle_end, float x, float y, float z);
-
- /*!
- * \brief Let a force (eg. Gravity) act on a range of particles in the array
- * \param particle_start start of range
- * \param particle_end end of range
- * \param x X force
- * \param y Y force
- * \param z Z force
- * \sa Particle::Force()
- */
- void Force(unsigned int particle_start, unsigned int particle_end, float x, float y, float z);
-
- static vec_t mFrustum[6][4]; //!< View Volume copy
-
- private:
- static int compareParticleDist(const void *voidA, const void *voidB);
-
- char *_name; //!< Emitter name
- unsigned int _flags; //!< Emitter flags
- vec3_t _pos; //!< Position in 3D space
- vec3_t _mangle; //!< Oreintation in 3D space
- Particle *_particle; //!< Array of particles
- unsigned int _count; //!< Particle count
- };
-
- #endif
|