aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/irrlicht-1.8/source/Irrlicht/CParticleSystemSceneNode.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libraries/irrlicht-1.8/source/Irrlicht/CParticleSystemSceneNode.h478
1 files changed, 239 insertions, 239 deletions
diff --git a/libraries/irrlicht-1.8/source/Irrlicht/CParticleSystemSceneNode.h b/libraries/irrlicht-1.8/source/Irrlicht/CParticleSystemSceneNode.h
index 24ae48c..cd98e7d 100644
--- a/libraries/irrlicht-1.8/source/Irrlicht/CParticleSystemSceneNode.h
+++ b/libraries/irrlicht-1.8/source/Irrlicht/CParticleSystemSceneNode.h
@@ -1,239 +1,239 @@
1// Copyright (C) 2002-2012 Nikolaus Gebhardt 1// Copyright (C) 2002-2012 Nikolaus Gebhardt
2// This file is part of the "Irrlicht Engine". 2// This file is part of the "Irrlicht Engine".
3// For conditions of distribution and use, see copyright notice in irrlicht.h 3// For conditions of distribution and use, see copyright notice in irrlicht.h
4 4
5#ifndef __C_PARTICLE_SYSTEM_SCENE_NODE_H_INCLUDED__ 5#ifndef __C_PARTICLE_SYSTEM_SCENE_NODE_H_INCLUDED__
6#define __C_PARTICLE_SYSTEM_SCENE_NODE_H_INCLUDED__ 6#define __C_PARTICLE_SYSTEM_SCENE_NODE_H_INCLUDED__
7 7
8#include "IParticleSystemSceneNode.h" 8#include "IParticleSystemSceneNode.h"
9#include "irrArray.h" 9#include "irrArray.h"
10#include "irrList.h" 10#include "irrList.h"
11#include "SMeshBuffer.h" 11#include "SMeshBuffer.h"
12 12
13namespace irr 13namespace irr
14{ 14{
15namespace scene 15namespace scene
16{ 16{
17 17
18//! A particle system scene node. 18//! A particle system scene node.
19/** A scene node controlling a particle system. The behavior of the particles 19/** A scene node controlling a particle system. The behavior of the particles
20can be controlled by setting the right particle emitters and affectors. 20can be controlled by setting the right particle emitters and affectors.
21*/ 21*/
22class CParticleSystemSceneNode : public IParticleSystemSceneNode 22class CParticleSystemSceneNode : public IParticleSystemSceneNode
23{ 23{
24public: 24public:
25 25
26 //! constructor 26 //! constructor
27 CParticleSystemSceneNode(bool createDefaultEmitter, 27 CParticleSystemSceneNode(bool createDefaultEmitter,
28 ISceneNode* parent, ISceneManager* mgr, s32 id, 28 ISceneNode* parent, ISceneManager* mgr, s32 id,
29 const core::vector3df& position, 29 const core::vector3df& position,
30 const core::vector3df& rotation, 30 const core::vector3df& rotation,
31 const core::vector3df& scale); 31 const core::vector3df& scale);
32 32
33 //! destructor 33 //! destructor
34 virtual ~CParticleSystemSceneNode(); 34 virtual ~CParticleSystemSceneNode();
35 35
36 //! Gets the particle emitter, which creates the particles. 36 //! Gets the particle emitter, which creates the particles.
37 virtual IParticleEmitter* getEmitter(); 37 virtual IParticleEmitter* getEmitter();
38 38
39 //! Sets the particle emitter, which creates the particles. 39 //! Sets the particle emitter, which creates the particles.
40 virtual void setEmitter(IParticleEmitter* emitter); 40 virtual void setEmitter(IParticleEmitter* emitter);
41 41
42 //! Adds new particle affector to the particle system. 42 //! Adds new particle affector to the particle system.
43 virtual void addAffector(IParticleAffector* affector); 43 virtual void addAffector(IParticleAffector* affector);
44 44
45 //! Get a list of all particle affectors. 45 //! Get a list of all particle affectors.
46 virtual const core::list<IParticleAffector*>& getAffectors() const; 46 virtual const core::list<IParticleAffector*>& getAffectors() const;
47 47
48 //! Removes all particle affectors in the particle system. 48 //! Removes all particle affectors in the particle system.
49 virtual void removeAllAffectors(); 49 virtual void removeAllAffectors();
50 50
51 //! Returns the material based on the zero based index i. 51 //! Returns the material based on the zero based index i.
52 virtual video::SMaterial& getMaterial(u32 i); 52 virtual video::SMaterial& getMaterial(u32 i);
53 53
54 //! Returns amount of materials used by this scene node. 54 //! Returns amount of materials used by this scene node.
55 virtual u32 getMaterialCount() const; 55 virtual u32 getMaterialCount() const;
56 56
57 //! pre render event 57 //! pre render event
58 virtual void OnRegisterSceneNode(); 58 virtual void OnRegisterSceneNode();
59 59
60 //! render 60 //! render
61 virtual void render(); 61 virtual void render();
62 62
63 //! returns the axis aligned bounding box of this node 63 //! returns the axis aligned bounding box of this node
64 virtual const core::aabbox3d<f32>& getBoundingBox() const; 64 virtual const core::aabbox3d<f32>& getBoundingBox() const;
65 65
66 //! Creates a particle emitter for an animated mesh scene node 66 //! Creates a particle emitter for an animated mesh scene node
67 virtual IParticleAnimatedMeshSceneNodeEmitter* createAnimatedMeshSceneNodeEmitter( 67 virtual IParticleAnimatedMeshSceneNodeEmitter* createAnimatedMeshSceneNodeEmitter(
68 scene::IAnimatedMeshSceneNode* node, bool useNormalDirection = true, 68 scene::IAnimatedMeshSceneNode* node, bool useNormalDirection = true,
69 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), 69 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
70 f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1, 70 f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1,
71 bool everyMeshVertex = false, u32 minParticlesPerSecond = 5, 71 bool everyMeshVertex = false, u32 minParticlesPerSecond = 5,
72 u32 maxParticlesPerSecond = 10, 72 u32 maxParticlesPerSecond = 10,
73 const video::SColor& minStartColor = video::SColor(255,0,0,0), 73 const video::SColor& minStartColor = video::SColor(255,0,0,0),
74 const video::SColor& maxStartColor = video::SColor(255,255,255,255), 74 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
75 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000, 75 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
76 s32 maxAngleDegrees = 0, 76 s32 maxAngleDegrees = 0,
77 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), 77 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
78 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ); 78 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) );
79 79
80 //! Creates a box particle emitter. 80 //! Creates a box particle emitter.
81 virtual IParticleBoxEmitter* createBoxEmitter( 81 virtual IParticleBoxEmitter* createBoxEmitter(
82 const core::aabbox3df& box = core::aabbox3d<f32>(-10,0,-10,5,30,10), 82 const core::aabbox3df& box = core::aabbox3d<f32>(-10,0,-10,5,30,10),
83 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), 83 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
84 u32 minParticlesPerSecond = 5, 84 u32 minParticlesPerSecond = 5,
85 u32 maxParticlesPerSecond = 10, 85 u32 maxParticlesPerSecond = 10,
86 const video::SColor& minStartColor = video::SColor(255,0,0,0), 86 const video::SColor& minStartColor = video::SColor(255,0,0,0),
87 const video::SColor& maxStartColor = video::SColor(255,255,255,255), 87 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
88 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, 88 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
89 s32 maxAngleDegrees=0, 89 s32 maxAngleDegrees=0,
90 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), 90 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
91 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ); 91 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) );
92 92
93 //! Creates a particle emitter for emitting from a cylinder 93 //! Creates a particle emitter for emitting from a cylinder
94 virtual IParticleCylinderEmitter* createCylinderEmitter( 94 virtual IParticleCylinderEmitter* createCylinderEmitter(
95 const core::vector3df& center, f32 radius, 95 const core::vector3df& center, f32 radius,
96 const core::vector3df& normal, f32 length, 96 const core::vector3df& normal, f32 length,
97 bool outlineOnly = false, const core::vector3df& direction = core::vector3df(0.0f,0.5f,0.0f), 97 bool outlineOnly = false, const core::vector3df& direction = core::vector3df(0.0f,0.5f,0.0f),
98 u32 minParticlesPerSecond = 5, u32 maxParticlesPersSecond = 10, 98 u32 minParticlesPerSecond = 5, u32 maxParticlesPersSecond = 10,
99 const video::SColor& minStartColor = video::SColor(255,0,0,0), 99 const video::SColor& minStartColor = video::SColor(255,0,0,0),
100 const video::SColor& maxStartColor = video::SColor(255,255,255,255), 100 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
101 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000, 101 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
102 s32 maxAngleDegrees = 0, 102 s32 maxAngleDegrees = 0,
103 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), 103 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
104 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ); 104 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) );
105 105
106 //! Creates a mesh particle emitter. 106 //! Creates a mesh particle emitter.
107 virtual IParticleMeshEmitter* createMeshEmitter( 107 virtual IParticleMeshEmitter* createMeshEmitter(
108 scene::IMesh* mesh, bool useNormalDirection = true, 108 scene::IMesh* mesh, bool useNormalDirection = true,
109 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), 109 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
110 f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1, 110 f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1,
111 bool everyMeshVertex = false, 111 bool everyMeshVertex = false,
112 u32 minParticlesPerSecond = 5, 112 u32 minParticlesPerSecond = 5,
113 u32 maxParticlesPerSecond = 10, 113 u32 maxParticlesPerSecond = 10,
114 const video::SColor& minStartColor = video::SColor(255,0,0,0), 114 const video::SColor& minStartColor = video::SColor(255,0,0,0),
115 const video::SColor& maxStartColor = video::SColor(255,255,255,255), 115 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
116 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000, 116 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
117 s32 maxAngleDegrees = 0, 117 s32 maxAngleDegrees = 0,
118 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), 118 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
119 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ); 119 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) );
120 120
121 //! Creates a point particle emitter. 121 //! Creates a point particle emitter.
122 virtual IParticlePointEmitter* createPointEmitter( 122 virtual IParticlePointEmitter* createPointEmitter(
123 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), 123 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
124 u32 minParticlesPerSecond = 5, 124 u32 minParticlesPerSecond = 5,
125 u32 maxParticlesPerSecond = 10, 125 u32 maxParticlesPerSecond = 10,
126 const video::SColor& minStartColor = video::SColor(255,0,0,0), 126 const video::SColor& minStartColor = video::SColor(255,0,0,0),
127 const video::SColor& maxStartColor = video::SColor(255,255,255,255), 127 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
128 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, 128 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
129 s32 maxAngleDegrees=0, 129 s32 maxAngleDegrees=0,
130 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), 130 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
131 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ); 131 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) );
132 132
133 //! Creates a ring particle emitter. 133 //! Creates a ring particle emitter.
134 virtual IParticleRingEmitter* createRingEmitter( 134 virtual IParticleRingEmitter* createRingEmitter(
135 const core::vector3df& center, f32 radius, f32 ringThickness, 135 const core::vector3df& center, f32 radius, f32 ringThickness,
136 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), 136 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
137 u32 minParticlesPerSecond = 5, 137 u32 minParticlesPerSecond = 5,
138 u32 maxParticlesPerSecond = 10, 138 u32 maxParticlesPerSecond = 10,
139 const video::SColor& minStartColor = video::SColor(255,0,0,0), 139 const video::SColor& minStartColor = video::SColor(255,0,0,0),
140 const video::SColor& maxStartColor = video::SColor(255,255,255,255), 140 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
141 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, 141 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
142 s32 maxAngleDegrees=0, 142 s32 maxAngleDegrees=0,
143 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), 143 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
144 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ); 144 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) );
145 145
146 //! Creates a sphere particle emitter. 146 //! Creates a sphere particle emitter.
147 virtual IParticleSphereEmitter* createSphereEmitter( 147 virtual IParticleSphereEmitter* createSphereEmitter(
148 const core::vector3df& center, f32 radius, 148 const core::vector3df& center, f32 radius,
149 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), 149 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
150 u32 minParticlesPerSecond = 5, 150 u32 minParticlesPerSecond = 5,
151 u32 maxParticlesPerSecond = 10, 151 u32 maxParticlesPerSecond = 10,
152 const video::SColor& minStartColor = video::SColor(255,0,0,0), 152 const video::SColor& minStartColor = video::SColor(255,0,0,0),
153 const video::SColor& maxStartColor = video::SColor(255,255,255,255), 153 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
154 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, 154 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
155 s32 maxAngleDegrees=0, 155 s32 maxAngleDegrees=0,
156 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), 156 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
157 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ); 157 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) );
158 158
159 //! Creates a point attraction affector. This affector modifies the positions of the 159 //! Creates a point attraction affector. This affector modifies the positions of the
160 //! particles and attracts them to a specified point at a specified speed per second. 160 //! particles and attracts them to a specified point at a specified speed per second.
161 virtual IParticleAttractionAffector* createAttractionAffector( 161 virtual IParticleAttractionAffector* createAttractionAffector(
162 const core::vector3df& point, f32 speed = 1.0f, bool attract = true, 162 const core::vector3df& point, f32 speed = 1.0f, bool attract = true,
163 bool affectX = true, bool affectY = true, bool affectZ = true); 163 bool affectX = true, bool affectY = true, bool affectZ = true);
164 164
165 //! Creates a scale particle affector. 165 //! Creates a scale particle affector.
166 virtual IParticleAffector* createScaleParticleAffector(const core::dimension2df& scaleTo = core::dimension2df(1.0f, 1.0f)); 166 virtual IParticleAffector* createScaleParticleAffector(const core::dimension2df& scaleTo = core::dimension2df(1.0f, 1.0f));
167 167
168 //! Creates a fade out particle affector. 168 //! Creates a fade out particle affector.
169 virtual IParticleFadeOutAffector* createFadeOutParticleAffector( 169 virtual IParticleFadeOutAffector* createFadeOutParticleAffector(
170 const video::SColor& targetColor = video::SColor(0,0,0,0), 170 const video::SColor& targetColor = video::SColor(0,0,0,0),
171 u32 timeNeededToFadeOut = 1000); 171 u32 timeNeededToFadeOut = 1000);
172 172
173 //! Creates a gravity affector. 173 //! Creates a gravity affector.
174 virtual IParticleGravityAffector* createGravityAffector( 174 virtual IParticleGravityAffector* createGravityAffector(
175 const core::vector3df& gravity = core::vector3df(0.0f,-0.03f,0.0f), 175 const core::vector3df& gravity = core::vector3df(0.0f,-0.03f,0.0f),
176 u32 timeForceLost = 1000); 176 u32 timeForceLost = 1000);
177 177
178 //! Creates a rotation affector. This affector rotates the particles 178 //! Creates a rotation affector. This affector rotates the particles
179 //! around a specified pivot point. The speed is in Degrees per second. 179 //! around a specified pivot point. The speed is in Degrees per second.
180 virtual IParticleRotationAffector* createRotationAffector( 180 virtual IParticleRotationAffector* createRotationAffector(
181 const core::vector3df& speed = core::vector3df(5.0f,5.0f,5.0f), 181 const core::vector3df& speed = core::vector3df(5.0f,5.0f,5.0f),
182 const core::vector3df& pivotPoint = core::vector3df(0.0f,0.0f,0.0f) ); 182 const core::vector3df& pivotPoint = core::vector3df(0.0f,0.0f,0.0f) );
183 183
184 //! Sets the size of all particles. 184 //! Sets the size of all particles.
185 virtual void setParticleSize( 185 virtual void setParticleSize(
186 const core::dimension2d<f32> &size = core::dimension2d<f32>(5.0f, 5.0f)); 186 const core::dimension2d<f32> &size = core::dimension2d<f32>(5.0f, 5.0f));
187 187
188 //! Sets if the particles should be global. If they are, the particles are affected by 188 //! Sets if the particles should be global. If they are, the particles are affected by
189 //! the movement of the particle system scene node too, otherwise they completely 189 //! the movement of the particle system scene node too, otherwise they completely
190 //! ignore it. Default is true. 190 //! ignore it. Default is true.
191 virtual void setParticlesAreGlobal(bool global=true); 191 virtual void setParticlesAreGlobal(bool global=true);
192 192
193 //! Remove all currently visible particles 193 //! Remove all currently visible particles
194 virtual void clearParticles(); 194 virtual void clearParticles();
195 195
196 //! Do manually update the particles. 196 //! Do manually update the particles.
197 //! This should only be called when you want to render the node outside the scenegraph, 197 //! This should only be called when you want to render the node outside the scenegraph,
198 //! as the node will care about this otherwise automatically. 198 //! as the node will care about this otherwise automatically.
199 virtual void doParticleSystem(u32 time); 199 virtual void doParticleSystem(u32 time);
200 200
201 //! Writes attributes of the scene node. 201 //! Writes attributes of the scene node.
202 virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const; 202 virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const;
203 203
204 //! Reads attributes of the scene node. 204 //! Reads attributes of the scene node.
205 virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0); 205 virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0);
206 206
207 //! Returns type of the scene node 207 //! Returns type of the scene node
208 virtual ESCENE_NODE_TYPE getType() const { return ESNT_PARTICLE_SYSTEM; } 208 virtual ESCENE_NODE_TYPE getType() const { return ESNT_PARTICLE_SYSTEM; }
209 209
210private: 210private:
211 211
212 void reallocateBuffers(); 212 void reallocateBuffers();
213 213
214 core::list<IParticleAffector*> AffectorList; 214 core::list<IParticleAffector*> AffectorList;
215 IParticleEmitter* Emitter; 215 IParticleEmitter* Emitter;
216 core::array<SParticle> Particles; 216 core::array<SParticle> Particles;
217 core::dimension2d<f32> ParticleSize; 217 core::dimension2d<f32> ParticleSize;
218 u32 LastEmitTime; 218 u32 LastEmitTime;
219 s32 MaxParticles; 219 s32 MaxParticles;
220 220
221 SMeshBuffer* Buffer; 221 SMeshBuffer* Buffer;
222 222
223 enum E_PARTICLES_PRIMITIVE 223 enum E_PARTICLES_PRIMITIVE
224 { 224 {
225 EPP_POINT=0, 225 EPP_POINT=0,
226 EPP_BILLBOARD, 226 EPP_BILLBOARD,
227 EPP_POINTSPRITE 227 EPP_POINTSPRITE
228 }; 228 };
229 E_PARTICLES_PRIMITIVE ParticlePrimitive; 229 E_PARTICLES_PRIMITIVE ParticlePrimitive;
230 230
231 bool ParticlesAreGlobal; 231 bool ParticlesAreGlobal;
232}; 232};
233 233
234} // end namespace scene 234} // end namespace scene
235} // end namespace irr 235} // end namespace irr
236 236
237 237
238#endif 238#endif
239 239