00001
00002
00003
00004
00005 #ifndef __I_PARTICLE_SYSTEM_SCENE_NODE_H_INCLUDED__
00006 #define __I_PARTICLE_SYSTEM_SCENE_NODE_H_INCLUDED__
00007
00008 #include "ISceneNode.h"
00009 #include "IParticleAnimatedMeshSceneNodeEmitter.h"
00010 #include "IParticleBoxEmitter.h"
00011 #include "IParticleCylinderEmitter.h"
00012 #include "IParticleMeshEmitter.h"
00013 #include "IParticleRingEmitter.h"
00014 #include "IParticleSphereEmitter.h"
00015 #include "IParticleAttractionAffector.h"
00016 #include "IParticleFadeOutAffector.h"
00017 #include "IParticleGravityAffector.h"
00018 #include "IParticleRotationAffector.h"
00019 #include "dimension2d.h"
00020
00021 namespace irr
00022 {
00023 namespace scene
00024 {
00025
00027
00046 class IParticleSystemSceneNode : public ISceneNode
00047 {
00048 public:
00049
00051 IParticleSystemSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
00052 const core::vector3df& position = core::vector3df(0,0,0),
00053 const core::vector3df& rotation = core::vector3df(0,0,0),
00054 const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
00055 : ISceneNode(parent, mgr, id, position, rotation, scale) {}
00056
00058 virtual void setParticleSize(
00059 const core::dimension2d<f32> &size = core::dimension2d<f32>(5.0f, 5.0f)) = 0;
00060
00062
00065 virtual void setParticlesAreGlobal(bool global=true) = 0;
00066
00068
00069 virtual IParticleEmitter* getEmitter() =0;
00070
00072
00078 virtual void setEmitter(IParticleEmitter* emitter) = 0;
00079
00081
00092 virtual void addAffector(IParticleAffector* affector) = 0;
00093
00095 virtual void removeAllAffectors() = 0;
00096
00098
00141 virtual IParticleAnimatedMeshSceneNodeEmitter* createAnimatedMeshSceneNodeEmitter(
00142 scene::IAnimatedMeshSceneNode* node, bool useNormalDirection = true,
00143 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00144 f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1,
00145 bool everyMeshVertex = false,
00146 u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10,
00147 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00148 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00149 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
00150 s32 maxAngleDegrees = 0,
00151 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00152 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00153
00155
00181 virtual IParticleBoxEmitter* createBoxEmitter(
00182 const core::aabbox3df& box = core::aabbox3df(-10,28,-10,10,30,10),
00183 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00184 u32 minParticlesPerSecond = 5,
00185 u32 maxParticlesPerSecond = 10,
00186 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00187 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00188 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
00189 s32 maxAngleDegrees=0,
00190 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00191 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00192
00194
00225 virtual IParticleCylinderEmitter* createCylinderEmitter(
00226 const core::vector3df& center, f32 radius,
00227 const core::vector3df& normal, f32 length,
00228 bool outlineOnly = false,
00229 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00230 u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10,
00231 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00232 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00233 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
00234 s32 maxAngleDegrees = 0,
00235 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00236 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00237
00239
00281 virtual IParticleMeshEmitter* createMeshEmitter(
00282 scene::IMesh* mesh, bool useNormalDirection = true,
00283 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00284 f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1,
00285 bool everyMeshVertex = false,
00286 u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10,
00287 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00288 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00289 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
00290 s32 maxAngleDegrees = 0,
00291 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00292 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00293
00295
00320 virtual IParticlePointEmitter* createPointEmitter(
00321 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00322 u32 minParticlesPerSecond = 5,
00323 u32 maxParticlesPerSecond = 10,
00324 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00325 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00326 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
00327 s32 maxAngleDegrees=0,
00328 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00329 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00330
00332
00362 virtual IParticleRingEmitter* createRingEmitter(
00363 const core::vector3df& center, f32 radius, f32 ringThickness,
00364 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00365 u32 minParticlesPerSecond = 5,
00366 u32 maxParticlesPerSecond = 10,
00367 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00368 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00369 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
00370 s32 maxAngleDegrees=0,
00371 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00372 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00373
00375
00402 virtual IParticleSphereEmitter* createSphereEmitter(
00403 const core::vector3df& center, f32 radius,
00404 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00405 u32 minParticlesPerSecond = 5,
00406 u32 maxParticlesPerSecond = 10,
00407 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00408 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00409 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
00410 s32 maxAngleDegrees=0,
00411 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00412 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00413
00415
00432 virtual IParticleAttractionAffector* createAttractionAffector(
00433 const core::vector3df& point, f32 speed = 1.0f, bool attract = true,
00434 bool affectX = true, bool affectY = true, bool affectZ = true) = 0;
00435
00437
00445 virtual IParticleAffector* createScaleParticleAffector(const core::dimension2df& scaleTo = core::dimension2df(1.0f, 1.0f)) = 0;
00446
00448
00460 virtual IParticleFadeOutAffector* createFadeOutParticleAffector(
00461 const video::SColor& targetColor = video::SColor(0,0,0,0),
00462 u32 timeNeededToFadeOut = 1000) = 0;
00463
00465
00477 virtual IParticleGravityAffector* createGravityAffector(
00478 const core::vector3df& gravity = core::vector3df(0.0f,-0.03f,0.0f),
00479 u32 timeForceLost = 1000) = 0;
00480
00482
00490 virtual IParticleRotationAffector* createRotationAffector(
00491 const core::vector3df& speed = core::vector3df(5.0f,5.0f,5.0f),
00492 const core::vector3df& pivotPoint = core::vector3df(0.0f,0.0f,0.0f) ) = 0;
00493 };
00494
00495 }
00496 }
00497
00498
00499 #endif
00500