Pyrogenesis  trunk
ParticleEmitterType.h
Go to the documentation of this file.
1 /* Copyright (C) 2011 Wildfire Games.
2  * This file is part of 0 A.D.
3  *
4  * 0 A.D. is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * 0 A.D. is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef INCLUDED_PARTICLEEMITTERTYPE
19 #define INCLUDED_PARTICLEEMITTERTYPE
20 
21 #include "graphics/Texture.h"
22 #include "lib/ogl.h"
23 #include "lib/file/vfs/vfs_path.h"
25 
26 class CVector3D;
27 class CParticleEmitter;
28 class CParticleManager;
29 class IParticleVar;
30 class IParticleEffector;
31 
32 /**
33  * Particle emitter type - stores the common state data for all emitters of that
34  * type, and uses that data to update the emitter states.
35  *
36  * The data is initialised from XML files.
37  *
38  * Most of the emitter type data is represented as subclasses of IParticleVar,
39  * which will typically return a constant value or a random value each time it's
40  * evaluated. New subclasses can be added to support different random distributions,
41  * etc.
42  */
44 {
45  NONCOPYABLE(CParticleEmitterType); // reference member
46 public:
47  CParticleEmitterType(const VfsPath& path, CParticleManager& manager);
48 
49 private:
50  friend class CModelParticleEmitter;
51  friend class CParticleEmitter;
52  friend class CParticleVarConstant;
53  friend class CParticleVarUniform;
54  friend class CParticleVarCopy;
55  friend class ParticleRenderer;
56 
57  enum
58  {
75  };
76 
77  int GetVariableID(const std::string& name);
78 
79  bool LoadXML(const VfsPath& path);
80 
81  /**
82  * Update the state of an emitter's particles, by a potentially long time @p dt.
83  */
84  void UpdateEmitter(CParticleEmitter& emitter, float dt);
85 
86  /**
87  * Update the state of an emitter's particles, by a short time @p dt that can
88  * be computed in a single step.
89  */
90  void UpdateEmitterStep(CParticleEmitter& emitter, float dt);
91 
93 
95 
101 
105 
106  typedef shared_ptr<IParticleVar> IParticleVarPtr;
107  std::vector<IParticleVarPtr> m_Variables;
108 
109  typedef shared_ptr<IParticleEffector> IParticleEffectorPtr;
110  std::vector<IParticleEffectorPtr> m_Effectors;
111 
113 };
114 
115 typedef shared_ptr<CParticleEmitterType> CParticleEmitterTypePtr;
116 
117 #endif // INCLUDED_PARTICLEEMITTERTYPE
shared_ptr< IParticleEffector > IParticleEffectorPtr
Definition: ParticleEmitterType.h:109
Definition: ParticleEmitterType.h:72
Particle variable that returns a constant value.
Definition: ParticleEmitterType.cpp:83
Definition: ParticleEmitterType.h:68
Particle emitter.
Definition: ParticleEmitter.h:67
Definition: ParticleEmitterType.h:73
Particle emitter type - stores the common state data for all emitters of that type, and uses that data to update the emitter states.
Definition: ParticleEmitterType.h:43
Definition: ParticleEmitterType.h:62
Definition: ParticleEmitterType.h:69
shared_ptr< CParticleEmitterType > CParticleEmitterTypePtr
Definition: ParticleEmitterType.h:115
Definition: ParticleEmitterType.h:74
Definition: Vector3D.h:28
Definition: ParticleEmitterType.h:66
Definition: ParticleEmitterType.h:64
CTexturePtr m_Texture
Definition: ParticleEmitterType.h:94
bool m_UseRelativeVelocity
Definition: ParticleEmitterType.h:100
Particle variable that returns a uniformly-distributed random value.
Definition: ParticleEmitterType.cpp:113
Definition: ParticleEmitterType.h:65
void UpdateEmitterStep(CParticleEmitter &emitter, float dt)
Update the state of an emitter&#39;s particles, by a short time dt that can be computed in a single step...
Definition: ParticleEmitterType.cpp:512
Interface for particle effectors, which get evaluated every frame to update particles.
Definition: ParticleEmitterType.cpp:211
Render particles.
Definition: ParticleRenderer.h:30
shared_ptr< IParticleVar > IParticleVarPtr
Definition: ParticleEmitterType.h:106
Definition: ParticleEmitterType.h:71
float m_MaxLifetime
Definition: ParticleEmitterType.h:102
CBoundingBoxAligned CalculateBounds(CVector3D emitterPos, CBoundingBoxAligned emittedBounds)
Definition: ParticleEmitterType.cpp:600
void UpdateEmitter(CParticleEmitter &emitter, float dt)
Update the state of an emitter&#39;s particles, by a potentially long time dt.
Definition: ParticleEmitterType.cpp:491
Definition: path.h:77
Interface for particle state variables, which get evaluated for each newly constructed particle...
Definition: ParticleEmitterType.cpp:40
Definition: ParticleEmitterType.h:70
GLenum m_BlendEquation
Definition: ParticleEmitterType.h:96
Definition: ParticleManager.h:29
bool m_StartFull
Definition: ParticleEmitterType.h:99
NONCOPYABLE(CParticleEmitterType)
CParticleManager & m_Manager
Definition: ParticleEmitterType.h:112
CBoundingBoxAligned m_MaxBounds
Definition: ParticleEmitterType.h:104
size_t m_MaxParticles
Definition: ParticleEmitterType.h:103
std::shared_ptr< CTexture > CTexturePtr
Definition: Texture.h:22
Definition: BoundingBoxAligned.h:35
Particle variable that returns the same value as some other variable (assuming that variable was eval...
Definition: ParticleEmitterType.cpp:145
GLenum m_BlendFuncSrc
Definition: ParticleEmitterType.h:97
CParticleEmitterType(const VfsPath &path, CParticleManager &manager)
Definition: ParticleEmitterType.cpp:256
std::vector< IParticleEffectorPtr > m_Effectors
Definition: ParticleEmitterType.h:110
Particle emitter model, for attaching emitters as props on other models.
Definition: ParticleEmitter.h:176
Definition: ParticleEmitterType.h:67
std::vector< IParticleVarPtr > m_Variables
Definition: ParticleEmitterType.h:107
Definition: ParticleEmitterType.h:60
Definition: ParticleEmitterType.h:61
Definition: ParticleEmitterType.h:63
Definition: ParticleEmitterType.h:59
GLenum m_BlendFuncDst
Definition: ParticleEmitterType.h:98
int GetVariableID(const std::string &name)
Definition: ParticleEmitterType.cpp:315
bool LoadXML(const VfsPath &path)
Definition: ParticleEmitterType.cpp:336