Duckcpp 2.1.0
Duckcpp is a high-performance c++ graphics engine.
Loading...
Searching...
No Matches
IParticleSystemSceneNode.hpp
1// Copyright (C) 2002-2012 Nikolaus Gebhardt
2// This file is part of the "Irrlicht Engine".
3// For conditions of distribution and use, see copyright notice in duckcpp/duckcpp.hpp
4
5#ifndef DCPP_I_PARTICLE_SYSTEM_SCENE_NODE_HPP_INCLUDED
6#define DCPP_I_PARTICLE_SYSTEM_SCENE_NODE_HPP_INCLUDED
7
8#include <duckcpp/core/engine/ISceneNode.hpp>
9#include <duckcpp/core/engine/IParticleAnimatedMeshSceneNodeEmitter.hpp>
10#include <duckcpp/core/engine/IParticleBoxEmitter.hpp>
11#include <duckcpp/core/engine/IParticleCylinderEmitter.hpp>
12#include <duckcpp/core/engine/IParticleMeshEmitter.hpp>
13#include <duckcpp/core/engine/IParticleRingEmitter.hpp>
14#include <duckcpp/core/engine/IParticleSphereEmitter.hpp>
15#include <duckcpp/core/engine/IParticleAttractionAffector.hpp>
16#include <duckcpp/core/engine/IParticleFadeOutAffector.hpp>
17#include <duckcpp/core/engine/IParticleGravityAffector.hpp>
18#include <duckcpp/core/engine/IParticleRotationAffector.hpp>
19#include <duckcpp/core/engine/dimension2d.hpp>
20
21namespace dcpp
22{
23namespace scene
24{
25
27
70
72{
73public:
74
77 const nub::vector3df& position = nub::vector3df(0,0,0),
78 const nub::vector3df& rotation = nub::vector3df(0,0,0),
79 const nub::vector3df& scale = nub::vector3df(1.0f, 1.0f, 1.0f))
80 : ISceneNode(parent, mgr, id, position, rotation, scale)
81 , ParticleBehavior(0)
82 {
83 }
84
86 virtual void setParticleSize(
87 const nub::dimension2d<f32> &size = nub::dimension2d<f32>(5.0f, 5.0f)) = 0;
88
90
93 virtual void setParticlesAreGlobal(bool global=true) = 0;
94
95
97
99 virtual void setParticleBehavior(dcpp::u32 flags)
100 {
101 ParticleBehavior = flags;
102 }
103
104
106
109 {
110 return ParticleBehavior;
111 }
112
114 virtual void clearParticles() = 0;
115
117
120 virtual void doParticleSystem(u32 time) = 0;
121
123
125
127
133 virtual void setEmitter(IParticleEmitter* emitter) = 0;
134
136
147 virtual void addAffector(IParticleAffector* affector) = 0;
148
150
151 virtual const nub::list<IParticleAffector*>& getAffectors() const = 0;
152
154 virtual void removeAllAffectors() = 0;
155
157
201 scene::IAnimatedMeshSceneNode* node, bool useNormalDirection = true,
202 const nub::vector3df& direction = nub::vector3df(0.0f,0.03f,0.0f),
203 f32 normalDirectionModifier = 100.0f, i32 mbNumber = -1,
204 bool everyMeshVertex = false,
205 u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10,
206 const video::SColor& minStartColor = video::SColor(255,0,0,0),
207 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
208 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
209 i32 maxAngleDegrees = 0,
210 const nub::dimension2df& minStartSize = nub::dimension2df(5.0f,5.0f),
211 const nub::dimension2df& maxStartSize = nub::dimension2df(5.0f,5.0f) ) = 0;
212
214
241 const nub::aabbox3df& box = nub::aabbox3df(-10,28,-10,10,30,10),
242 const nub::vector3df& direction = nub::vector3df(0.0f,0.03f,0.0f),
243 u32 minParticlesPerSecond = 5,
244 u32 maxParticlesPerSecond = 10,
245 const video::SColor& minStartColor = video::SColor(255,0,0,0),
246 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
247 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
248 i32 maxAngleDegrees=0,
249 const nub::dimension2df& minStartSize = nub::dimension2df(5.0f,5.0f),
250 const nub::dimension2df& maxStartSize = nub::dimension2df(5.0f,5.0f) ) = 0;
251
253
285 const nub::vector3df& center, f32 radius,
286 const nub::vector3df& normal, f32 length,
287 bool outlineOnly = false,
288 const nub::vector3df& direction = nub::vector3df(0.0f,0.03f,0.0f),
289 u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10,
290 const video::SColor& minStartColor = video::SColor(255,0,0,0),
291 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
292 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
293 i32 maxAngleDegrees = 0,
294 const nub::dimension2df& minStartSize = nub::dimension2df(5.0f,5.0f),
295 const nub::dimension2df& maxStartSize = nub::dimension2df(5.0f,5.0f) ) = 0;
296
298
341 scene::IMesh* mesh, bool useNormalDirection = true,
342 const nub::vector3df& direction = nub::vector3df(0.0f,0.03f,0.0f),
343 f32 normalDirectionModifier = 100.0f, i32 mbNumber = -1,
344 bool everyMeshVertex = false,
345 u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10,
346 const video::SColor& minStartColor = video::SColor(255,0,0,0),
347 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
348 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
349 i32 maxAngleDegrees = 0,
350 const nub::dimension2df& minStartSize = nub::dimension2df(5.0f,5.0f),
351 const nub::dimension2df& maxStartSize = nub::dimension2df(5.0f,5.0f) ) = 0;
352
354
380 const nub::vector3df& direction = nub::vector3df(0.0f,0.03f,0.0f),
381 u32 minParticlesPerSecond = 5,
382 u32 maxParticlesPerSecond = 10,
383 const video::SColor& minStartColor = video::SColor(255,0,0,0),
384 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
385 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
386 i32 maxAngleDegrees=0,
387 const nub::dimension2df& minStartSize = nub::dimension2df(5.0f,5.0f),
388 const nub::dimension2df& maxStartSize = nub::dimension2df(5.0f,5.0f) ) = 0;
389
391
422 const nub::vector3df& center, f32 radius, f32 ringThickness,
423 const nub::vector3df& direction = nub::vector3df(0.0f,0.03f,0.0f),
424 u32 minParticlesPerSecond = 5,
425 u32 maxParticlesPerSecond = 10,
426 const video::SColor& minStartColor = video::SColor(255,0,0,0),
427 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
428 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
429 i32 maxAngleDegrees=0,
430 const nub::dimension2df& minStartSize = nub::dimension2df(5.0f,5.0f),
431 const nub::dimension2df& maxStartSize = nub::dimension2df(5.0f,5.0f) ) = 0;
432
434
462 const nub::vector3df& center, f32 radius,
463 const nub::vector3df& direction = nub::vector3df(0.0f,0.03f,0.0f),
464 u32 minParticlesPerSecond = 5,
465 u32 maxParticlesPerSecond = 10,
466 const video::SColor& minStartColor = video::SColor(255,0,0,0),
467 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
468 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
469 i32 maxAngleDegrees=0,
470 const nub::dimension2df& minStartSize = nub::dimension2df(5.0f,5.0f),
471 const nub::dimension2df& maxStartSize = nub::dimension2df(5.0f,5.0f) ) = 0;
472
474
492 const nub::vector3df& point, f32 speed = 1.0f, bool attract = true,
493 bool affectX = true, bool affectY = true, bool affectZ = true) = 0;
494
496
505
507
520 const video::SColor& targetColor = video::SColor(0,0,0,0),
521 u32 timeNeededToFadeOut = 1000) = 0;
522
524
537 const nub::vector3df& gravity = nub::vector3df(0.0f,-0.03f,0.0f),
538 u32 timeForceLost = 1000) = 0;
539
541
550 const nub::vector3df& speed = nub::vector3df(5.0f,5.0f,5.0f),
551 const nub::vector3df& pivotPoint = nub::vector3df(0.0f,0.0f,0.0f) ) = 0;
552
554 virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const override
555 {
556 out->addInt("ParticleBehavior", ParticleBehavior);
557 }
558
561 {
562 ParticleBehavior = in->getAttributeAsInt("ParticleBehavior", ParticleBehavior);
563 }
564
565protected:
566 i32 ParticleBehavior;
567};
568
569} // end namespace scene
570} // end namespace dcpp
571
572#endif
Provides a generic interface for attributes and their values and the possibility to serialize them.
Definition IAttributes.hpp:42
virtual void addInt(const c8 *attributeName, i32 value)=0
Adds an attribute as integer.
virtual i32 getAttributeAsInt(const c8 *attributeName, dcpp::i32 defaultNotFound=0) const =0
class holding data describing options
Definition IAttributeExchangingObject.hpp:35
Axis aligned bounding box in 3d dimensional space.
Definition aabbox3d.hpp:22
Scene node capable of displaying an animated mesh.
Definition IAnimatedMeshSceneNode.hpp:52
Class which holds the geometry of an object.
Definition IMesh.hpp:72
A particle affector modifies particles.
Definition IParticleAffector.hpp:42
A particle emitter which emits particles from mesh vertices.
Definition IParticleAnimatedMeshSceneNodeEmitter.hpp:18
A particle affector which attracts or detracts particles.
Definition IParticleAttractionAffector.hpp:17
A particle emitter which emits particles from a box shaped space.
Definition IParticleBoxEmitter.hpp:18
A particle emitter which emits from a cylindrically shaped space.
Definition IParticleCylinderEmitter.hpp:17
A particle emitter for using with particle systems.
Definition IParticleEmitter.hpp:46
A particle affector which fades out the particles.
Definition IParticleFadeOutAffector.hpp:17
A particle affector which applies gravity to particles.
Definition IParticleGravityAffector.hpp:17
A particle emitter which emits from vertices of a mesh.
Definition IParticleMeshEmitter.hpp:18
A particle emitter which emits particles along a ring shaped area.
Definition IParticleRingEmitter.hpp:17
A particle affector which rotates the particle system.
Definition IParticleRotationAffector.hpp:17
A particle emitter which emits from a spherical space.
Definition IParticleSphereEmitter.hpp:17
Definition IParticleSystemSceneNode.hpp:72
virtual IParticleAffector * createScaleParticleAffector(const nub::dimension2df &scaleTo=nub::dimension2df(1.0f, 1.0f))=0
Creates a scale particle affector.
virtual IParticleAnimatedMeshSceneNodeEmitter * createAnimatedMeshSceneNodeEmitter(scene::IAnimatedMeshSceneNode *node, bool useNormalDirection=true, const nub::vector3df &direction=nub::vector3df(0.0f, 0.03f, 0.0f), f32 normalDirectionModifier=100.0f, i32 mbNumber=-1, bool everyMeshVertex=false, u32 minParticlesPerSecond=5, u32 maxParticlesPerSecond=10, const video::SColor &minStartColor=video::SColor(255, 0, 0, 0), const video::SColor &maxStartColor=video::SColor(255, 255, 255, 255), u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, i32 maxAngleDegrees=0, const nub::dimension2df &minStartSize=nub::dimension2df(5.0f, 5.0f), const nub::dimension2df &maxStartSize=nub::dimension2df(5.0f, 5.0f))=0
Creates a particle emitter for an animated mesh scene node.
virtual IParticleEmitter * getEmitter()=0
Gets the particle emitter, which creates the particles.
IParticleSystemSceneNode(ISceneNode *parent, ISceneManager *mgr, i32 id, const nub::vector3df &position=nub::vector3df(0, 0, 0), const nub::vector3df &rotation=nub::vector3df(0, 0, 0), const nub::vector3df &scale=nub::vector3df(1.0f, 1.0f, 1.0f))
Constructor.
Definition IParticleSystemSceneNode.hpp:76
virtual void deserializeAttributes(io::IAttributes *in, io::SAttributeReadWriteOptions *options) override
Reads attributes of the scene node.
Definition IParticleSystemSceneNode.hpp:560
virtual void removeAllAffectors()=0
Removes all particle affectors in the particle system.
virtual IParticleFadeOutAffector * createFadeOutParticleAffector(const video::SColor &targetColor=video::SColor(0, 0, 0, 0), u32 timeNeededToFadeOut=1000)=0
Creates a fade out particle affector.
virtual void setParticleBehavior(dcpp::u32 flags)
Bitflags to change the particle behavior.
Definition IParticleSystemSceneNode.hpp:99
virtual void setParticlesAreGlobal(bool global=true)=0
Sets if the particles should be global.
virtual IParticleBoxEmitter * createBoxEmitter(const nub::aabbox3df &box=nub::aabbox3df(-10, 28,-10, 10, 30, 10), const nub::vector3df &direction=nub::vector3df(0.0f, 0.03f, 0.0f), u32 minParticlesPerSecond=5, u32 maxParticlesPerSecond=10, const video::SColor &minStartColor=video::SColor(255, 0, 0, 0), const video::SColor &maxStartColor=video::SColor(255, 255, 255, 255), u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, i32 maxAngleDegrees=0, const nub::dimension2df &minStartSize=nub::dimension2df(5.0f, 5.0f), const nub::dimension2df &maxStartSize=nub::dimension2df(5.0f, 5.0f))=0
Creates a box particle emitter.
virtual void clearParticles()=0
Remove all currently visible particles.
virtual void addAffector(IParticleAffector *affector)=0
Adds new particle effector to the particle system.
virtual IParticleRingEmitter * createRingEmitter(const nub::vector3df &center, f32 radius, f32 ringThickness, const nub::vector3df &direction=nub::vector3df(0.0f, 0.03f, 0.0f), u32 minParticlesPerSecond=5, u32 maxParticlesPerSecond=10, const video::SColor &minStartColor=video::SColor(255, 0, 0, 0), const video::SColor &maxStartColor=video::SColor(255, 255, 255, 255), u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, i32 maxAngleDegrees=0, const nub::dimension2df &minStartSize=nub::dimension2df(5.0f, 5.0f), const nub::dimension2df &maxStartSize=nub::dimension2df(5.0f, 5.0f))=0
Creates a ring particle emitter.
virtual void setParticleSize(const nub::dimension2d< f32 > &size=nub::dimension2d< f32 >(5.0f, 5.0f))=0
Sets the size of all particles.
virtual IParticleMeshEmitter * createMeshEmitter(scene::IMesh *mesh, bool useNormalDirection=true, const nub::vector3df &direction=nub::vector3df(0.0f, 0.03f, 0.0f), f32 normalDirectionModifier=100.0f, i32 mbNumber=-1, bool everyMeshVertex=false, u32 minParticlesPerSecond=5, u32 maxParticlesPerSecond=10, const video::SColor &minStartColor=video::SColor(255, 0, 0, 0), const video::SColor &maxStartColor=video::SColor(255, 255, 255, 255), u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, i32 maxAngleDegrees=0, const nub::dimension2df &minStartSize=nub::dimension2df(5.0f, 5.0f), const nub::dimension2df &maxStartSize=nub::dimension2df(5.0f, 5.0f))=0
Creates a mesh particle emitter.
virtual void setEmitter(IParticleEmitter *emitter)=0
Sets the particle emitter, which creates the particles.
virtual IParticlePointEmitter * createPointEmitter(const nub::vector3df &direction=nub::vector3df(0.0f, 0.03f, 0.0f), u32 minParticlesPerSecond=5, u32 maxParticlesPerSecond=10, const video::SColor &minStartColor=video::SColor(255, 0, 0, 0), const video::SColor &maxStartColor=video::SColor(255, 255, 255, 255), u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, i32 maxAngleDegrees=0, const nub::dimension2df &minStartSize=nub::dimension2df(5.0f, 5.0f), const nub::dimension2df &maxStartSize=nub::dimension2df(5.0f, 5.0f))=0
Creates a point particle emitter.
virtual IParticleSphereEmitter * createSphereEmitter(const nub::vector3df &center, f32 radius, const nub::vector3df &direction=nub::vector3df(0.0f, 0.03f, 0.0f), u32 minParticlesPerSecond=5, u32 maxParticlesPerSecond=10, const video::SColor &minStartColor=video::SColor(255, 0, 0, 0), const video::SColor &maxStartColor=video::SColor(255, 255, 255, 255), u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, i32 maxAngleDegrees=0, const nub::dimension2df &minStartSize=nub::dimension2df(5.0f, 5.0f), const nub::dimension2df &maxStartSize=nub::dimension2df(5.0f, 5.0f))=0
Creates a sphere particle emitter.
virtual void doParticleSystem(u32 time)=0
Do manually update the particles.
virtual IParticleAttractionAffector * createAttractionAffector(const nub::vector3df &point, f32 speed=1.0f, bool attract=true, bool affectX=true, bool affectY=true, bool affectZ=true)=0
Creates a point attraction affector.
virtual IParticleGravityAffector * createGravityAffector(const nub::vector3df &gravity=nub::vector3df(0.0f,-0.03f, 0.0f), u32 timeForceLost=1000)=0
Creates a gravity affector.
virtual const nub::list< IParticleAffector * > & getAffectors() const =0
Get a list of all particle affectors.
virtual void serializeAttributes(io::IAttributes *out, io::SAttributeReadWriteOptions *options) const override
Writes attributes of the scene node.
Definition IParticleSystemSceneNode.hpp:554
virtual IParticleRotationAffector * createRotationAffector(const nub::vector3df &speed=nub::vector3df(5.0f, 5.0f, 5.0f), const nub::vector3df &pivotPoint=nub::vector3df(0.0f, 0.0f, 0.0f))=0
Creates a rotation affector.
virtual dcpp::u32 getParticleBehavior() const
Gets how particles behave in different situations.
Definition IParticleSystemSceneNode.hpp:108
virtual IParticleCylinderEmitter * createCylinderEmitter(const nub::vector3df &center, f32 radius, const nub::vector3df &normal, f32 length, bool outlineOnly=false, const nub::vector3df &direction=nub::vector3df(0.0f, 0.03f, 0.0f), u32 minParticlesPerSecond=5, u32 maxParticlesPerSecond=10, const video::SColor &minStartColor=video::SColor(255, 0, 0, 0), const video::SColor &maxStartColor=video::SColor(255, 255, 255, 255), u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, i32 maxAngleDegrees=0, const nub::dimension2df &minStartSize=nub::dimension2df(5.0f, 5.0f), const nub::dimension2df &maxStartSize=nub::dimension2df(5.0f, 5.0f))=0
Creates a particle emitter for emitting from a cylinder.
The Scene Manager manages scene nodes, mesh resources, cameras and all the other stuff.
Definition ISceneManager.hpp:160
Scene node interface.
Definition ISceneNode.hpp:43
Class representing a 32 bit ARGB color.
Definition SColor.hpp:317
EParticleBehavior
A particle system scene node for creating snow, fire, explosions, smoke...
Definition IParticleSystemSceneNode.hpp:48
@ EPB_INVISIBLE_EMITTING
Continue emitting new particles even when the node is invisible.
Definition IParticleSystemSceneNode.hpp:50
@ EPB_INVISIBLE_AFFECTING
Continue affecting particles even when the node is invisible.
Definition IParticleSystemSceneNode.hpp:53
@ EPB_EMITTER_VECTOR_IGNORE_ROTATION
Definition IParticleSystemSceneNode.hpp:63
@ EPB_EMITTER_FRAME_INTERPOLATION
Definition IParticleSystemSceneNode.hpp:68
@ EPB_CLEAR_ON_INVISIBLE
Clear all particles when node gets invisible.
Definition IParticleSystemSceneNode.hpp:59
@ EPB_INVISIBLE_ANIMATING
Continue updating particle positions or deleting them even when the node is invisible.
Definition IParticleSystemSceneNode.hpp:56
As of Duckcpp 1.6, position2d is a synonym for vector2d.
Definition vector3d.hpp:11
signed int i32
32 bit signed variable.
Definition irrTypes.hpp:72
float f32
32 bit floating point variable.
Definition irrTypes.hpp:110
unsigned int u32
32 bit unsigned variable.
Definition irrTypes.hpp:64

Duckcpp    @cppfx.xyz