5#ifndef DCPP_I_PARTICLE_SYSTEM_SCENE_NODE_HPP_INCLUDED
6#define DCPP_I_PARTICLE_SYSTEM_SCENE_NODE_HPP_INCLUDED
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>
80 :
ISceneNode(parent, mgr, id, position, rotation, scale)
101 ParticleBehavior = flags;
110 return ParticleBehavior;
204 bool everyMeshVertex =
false,
287 bool outlineOnly =
false,
344 bool everyMeshVertex =
false,
493 bool affectX =
true,
bool affectY =
true,
bool affectZ =
true) = 0;
556 out->
addInt(
"ParticleBehavior", ParticleBehavior);
Provides a generic interface for attributes and their values and the possibility to serialize them.
Definition IAttributes.hpp:42
virtual void addInt(const dcpp::char_kt *attributeName, dcpp::int32_kt value)=0
Adds an attribute as integer.
virtual dcpp::int32_kt getAttributeAsInt(const dcpp::char_kt *attributeName, dcpp::int32_kt 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
Specifies a 2 dimensional size.
Definition dimension2d.hpp:21
3d vector template class with lots of operators and methods.
Definition vector3d.hpp:32
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 dcpp::nub::dimension2df &scaleTo=dcpp::nub::dimension2df(1.0f, 1.0f))=0
Creates a scale particle affector.
virtual IParticleFadeOutAffector * createFadeOutParticleAffector(const dcpp::video::SColor &targetColor=dcpp::video::SColor(0, 0, 0, 0), dcpp::uint32_kt timeNeededToFadeOut=1000)=0
Creates a fade out particle affector.
virtual IParticleEmitter * getEmitter()=0
Gets the particle emitter, which creates the particles.
virtual void setParticleSize(const dcpp::nub::dimension2df &size=dcpp::nub::dimension2df(5.0f, 5.0f))=0
Sets the size of all particles.
virtual void removeAllAffectors()=0
Removes all particle affectors in the particle system.
virtual void deserializeAttributes(dcpp::io::IAttributes *in, dcpp::io::SAttributeReadWriteOptions *options) override
Reads attributes of the scene node.
Definition IParticleSystemSceneNode.hpp:560
virtual IParticleRotationAffector * createRotationAffector(const dcpp::nub::vector3df &speed=dcpp::nub::vector3df(5.0f, 5.0f, 5.0f), const dcpp::nub::vector3df &pivotPoint=dcpp::nub::vector3df(0.0f, 0.0f, 0.0f))=0
Creates a rotation affector.
virtual IParticleRingEmitter * createRingEmitter(const dcpp::nub::vector3df ¢er, dcpp::float32_kt radius, dcpp::float32_kt ringThickness, const dcpp::nub::vector3df &direction=dcpp::nub::vector3df(0.0f, 0.03f, 0.0f), dcpp::uint32_kt minParticlesPerSecond=5, dcpp::uint32_kt maxParticlesPerSecond=10, const dcpp::video::SColor &minStartColor=dcpp::video::SColor(255, 0, 0, 0), const dcpp::video::SColor &maxStartColor=dcpp::video::SColor(255, 255, 255, 255), dcpp::uint32_kt lifeTimeMin=2000, dcpp::uint32_kt lifeTimeMax=4000, dcpp::int32_kt maxAngleDegrees=0, const dcpp::nub::dimension2df &minStartSize=dcpp::nub::dimension2df(5.0f, 5.0f), const dcpp::nub::dimension2df &maxStartSize=dcpp::nub::dimension2df(5.0f, 5.0f))=0
Creates a ring particle emitter.
virtual const dcpp::nub::list< IParticleAffector * > & getAffectors() const =0
Get a list of all particle affectors.
virtual void setParticlesAreGlobal(bool global=true)=0
Sets if the particles should be global.
virtual void setParticleBehavior(dcpp::uint32_kt flags)
Bitflags to change the particle behavior.
Definition IParticleSystemSceneNode.hpp:99
virtual IParticleAnimatedMeshSceneNodeEmitter * createAnimatedMeshSceneNodeEmitter(dcpp::scene::IAnimatedMeshSceneNode *node, bool useNormalDirection=true, const dcpp::nub::vector3df &direction=dcpp::nub::vector3df(0.0f, 0.03f, 0.0f), dcpp::float32_kt normalDirectionModifier=100.0f, dcpp::int32_kt mbNumber=-1, bool everyMeshVertex=false, dcpp::uint32_kt minParticlesPerSecond=5, dcpp::uint32_kt maxParticlesPerSecond=10, const dcpp::video::SColor &minStartColor=dcpp::video::SColor(255, 0, 0, 0), const dcpp::video::SColor &maxStartColor=dcpp::video::SColor(255, 255, 255, 255), dcpp::uint32_kt lifeTimeMin=2000, dcpp::uint32_kt lifeTimeMax=4000, dcpp::int32_kt maxAngleDegrees=0, const dcpp::nub::dimension2df &minStartSize=dcpp::nub::dimension2df(5.0f, 5.0f), const dcpp::nub::dimension2df &maxStartSize=dcpp::nub::dimension2df(5.0f, 5.0f))=0
Creates a particle emitter for an animated mesh scene node.
virtual void clearParticles()=0
Remove all currently visible particles.
virtual void doParticleSystem(dcpp::uint32_kt time)=0
Do manually update the particles.
virtual void addAffector(IParticleAffector *affector)=0
Adds new particle effector to the particle system.
IParticleSystemSceneNode(ISceneNode *parent, ISceneManager *mgr, dcpp::int32_kt id, const dcpp::nub::vector3df &position=dcpp::nub::vector3df(0, 0, 0), const dcpp::nub::vector3df &rotation=dcpp::nub::vector3df(0, 0, 0), const dcpp::nub::vector3df &scale=dcpp::nub::vector3df(1.0f, 1.0f, 1.0f))
Constructor.
Definition IParticleSystemSceneNode.hpp:76
virtual IParticleCylinderEmitter * createCylinderEmitter(const dcpp::nub::vector3df ¢er, dcpp::float32_kt radius, const dcpp::nub::vector3df &normal, dcpp::float32_kt length, bool outlineOnly=false, const dcpp::nub::vector3df &direction=dcpp::nub::vector3df(0.0f, 0.03f, 0.0f), dcpp::uint32_kt minParticlesPerSecond=5, dcpp::uint32_kt maxParticlesPerSecond=10, const dcpp::video::SColor &minStartColor=dcpp::video::SColor(255, 0, 0, 0), const dcpp::video::SColor &maxStartColor=dcpp::video::SColor(255, 255, 255, 255), dcpp::uint32_kt lifeTimeMin=2000, dcpp::uint32_kt lifeTimeMax=4000, dcpp::int32_kt maxAngleDegrees=0, const dcpp::nub::dimension2df &minStartSize=dcpp::nub::dimension2df(5.0f, 5.0f), const dcpp::nub::dimension2df &maxStartSize=dcpp::nub::dimension2df(5.0f, 5.0f))=0
Creates a particle emitter for emitting from a cylinder.
virtual IParticleGravityAffector * createGravityAffector(const dcpp::nub::vector3df &gravity=dcpp::nub::vector3df(0.0f,-0.03f, 0.0f), dcpp::uint32_kt timeForceLost=1000)=0
Creates a gravity affector.
virtual IParticleAttractionAffector * createAttractionAffector(const dcpp::nub::vector3df &point, dcpp::float32_kt speed=1.0f, bool attract=true, bool affectX=true, bool affectY=true, bool affectZ=true)=0
Creates a point attraction affector.
virtual IParticleMeshEmitter * createMeshEmitter(dcpp::scene::IMesh *mesh, bool useNormalDirection=true, const dcpp::nub::vector3df &direction=dcpp::nub::vector3df(0.0f, 0.03f, 0.0f), dcpp::float32_kt normalDirectionModifier=100.0f, dcpp::int32_kt mbNumber=-1, bool everyMeshVertex=false, dcpp::uint32_kt minParticlesPerSecond=5, dcpp::uint32_kt maxParticlesPerSecond=10, const dcpp::video::SColor &minStartColor=dcpp::video::SColor(255, 0, 0, 0), const dcpp::video::SColor &maxStartColor=dcpp::video::SColor(255, 255, 255, 255), dcpp::uint32_kt lifeTimeMin=2000, dcpp::uint32_kt lifeTimeMax=4000, dcpp::int32_kt maxAngleDegrees=0, const dcpp::nub::dimension2df &minStartSize=dcpp::nub::dimension2df(5.0f, 5.0f), const dcpp::nub::dimension2df &maxStartSize=dcpp::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 IParticleBoxEmitter * createBoxEmitter(const dcpp::nub::aabbox3df &box=dcpp::nub::aabbox3df(-10, 28,-10, 10, 30, 10), const dcpp::nub::vector3df &direction=dcpp::nub::vector3df(0.0f, 0.03f, 0.0f), dcpp::uint32_kt minParticlesPerSecond=5, dcpp::uint32_kt maxParticlesPerSecond=10, const dcpp::video::SColor &minStartColor=dcpp::video::SColor(255, 0, 0, 0), const dcpp::video::SColor &maxStartColor=dcpp::video::SColor(255, 255, 255, 255), dcpp::uint32_kt lifeTimeMin=2000, dcpp::uint32_kt lifeTimeMax=4000, dcpp::int32_kt maxAngleDegrees=0, const dcpp::nub::dimension2df &minStartSize=dcpp::nub::dimension2df(5.0f, 5.0f), const dcpp::nub::dimension2df &maxStartSize=dcpp::nub::dimension2df(5.0f, 5.0f))=0
Creates a box particle emitter.
virtual IParticlePointEmitter * createPointEmitter(const dcpp::nub::vector3df &direction=dcpp::nub::vector3df(0.0f, 0.03f, 0.0f), dcpp::uint32_kt minParticlesPerSecond=5, dcpp::uint32_kt maxParticlesPerSecond=10, const dcpp::video::SColor &minStartColor=dcpp::video::SColor(255, 0, 0, 0), const dcpp::video::SColor &maxStartColor=dcpp::video::SColor(255, 255, 255, 255), dcpp::uint32_kt lifeTimeMin=2000, dcpp::uint32_kt lifeTimeMax=4000, dcpp::int32_kt maxAngleDegrees=0, const dcpp::nub::dimension2df &minStartSize=dcpp::nub::dimension2df(5.0f, 5.0f), const dcpp::nub::dimension2df &maxStartSize=dcpp::nub::dimension2df(5.0f, 5.0f))=0
Creates a point particle emitter.
virtual void serializeAttributes(dcpp::io::IAttributes *out, dcpp::io::SAttributeReadWriteOptions *options) const override
Writes attributes of the scene node.
Definition IParticleSystemSceneNode.hpp:554
virtual dcpp::uint32_kt getParticleBehavior() const
Gets how particles behave in different situations.
Definition IParticleSystemSceneNode.hpp:108
virtual IParticleSphereEmitter * createSphereEmitter(const dcpp::nub::vector3df ¢er, dcpp::float32_kt radius, const dcpp::nub::vector3df &direction=dcpp::nub::vector3df(0.0f, 0.03f, 0.0f), dcpp::uint32_kt minParticlesPerSecond=5, dcpp::uint32_kt maxParticlesPerSecond=10, const dcpp::video::SColor &minStartColor=dcpp::video::SColor(255, 0, 0, 0), const dcpp::video::SColor &maxStartColor=dcpp::video::SColor(255, 255, 255, 255), dcpp::uint32_kt lifeTimeMin=2000, dcpp::uint32_kt lifeTimeMax=4000, dcpp::int32_kt maxAngleDegrees=0, const dcpp::nub::dimension2df &minStartSize=dcpp::nub::dimension2df(5.0f, 5.0f), const dcpp::nub::dimension2df &maxStartSize=dcpp::nub::dimension2df(5.0f, 5.0f))=0
Creates a sphere particle emitter.
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 shared_device.hpp:34
unsigned int uint32_kt
32 bit unsigned variable.
Definition irrTypes.hpp:64
float float32_kt
32 bit floating point variable.
Definition irrTypes.hpp:108
signed int int32_kt
32 bit signed variable.
Definition irrTypes.hpp:72