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 virtual void clearParticles() = 0;
00069
00073 virtual void doParticleSystem(u32 time) = 0;
00074
00076
00077 virtual IParticleEmitter* getEmitter() =0;
00078
00080
00086 virtual void setEmitter(IParticleEmitter* emitter) = 0;
00087
00089
00100 virtual void addAffector(IParticleAffector* affector) = 0;
00101
00103
00104 virtual const core::list<IParticleAffector*>& getAffectors() const = 0;
00105
00107 virtual void removeAllAffectors() = 0;
00108
00110
00153 virtual IParticleAnimatedMeshSceneNodeEmitter* createAnimatedMeshSceneNodeEmitter(
00154 scene::IAnimatedMeshSceneNode* node, bool useNormalDirection = true,
00155 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00156 f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1,
00157 bool everyMeshVertex = false,
00158 u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10,
00159 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00160 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00161 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
00162 s32 maxAngleDegrees = 0,
00163 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00164 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00165
00167
00193 virtual IParticleBoxEmitter* createBoxEmitter(
00194 const core::aabbox3df& box = core::aabbox3df(-10,28,-10,10,30,10),
00195 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00196 u32 minParticlesPerSecond = 5,
00197 u32 maxParticlesPerSecond = 10,
00198 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00199 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00200 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
00201 s32 maxAngleDegrees=0,
00202 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00203 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00204
00206
00237 virtual IParticleCylinderEmitter* createCylinderEmitter(
00238 const core::vector3df& center, f32 radius,
00239 const core::vector3df& normal, f32 length,
00240 bool outlineOnly = false,
00241 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00242 u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10,
00243 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00244 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00245 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
00246 s32 maxAngleDegrees = 0,
00247 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00248 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00249
00251
00293 virtual IParticleMeshEmitter* createMeshEmitter(
00294 scene::IMesh* mesh, bool useNormalDirection = true,
00295 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00296 f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1,
00297 bool everyMeshVertex = false,
00298 u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10,
00299 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00300 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00301 u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000,
00302 s32 maxAngleDegrees = 0,
00303 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00304 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00305
00307
00332 virtual IParticlePointEmitter* createPointEmitter(
00333 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00334 u32 minParticlesPerSecond = 5,
00335 u32 maxParticlesPerSecond = 10,
00336 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00337 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00338 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
00339 s32 maxAngleDegrees=0,
00340 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00341 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00342
00344
00374 virtual IParticleRingEmitter* createRingEmitter(
00375 const core::vector3df& center, f32 radius, f32 ringThickness,
00376 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00377 u32 minParticlesPerSecond = 5,
00378 u32 maxParticlesPerSecond = 10,
00379 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00380 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00381 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
00382 s32 maxAngleDegrees=0,
00383 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00384 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00385
00387
00414 virtual IParticleSphereEmitter* createSphereEmitter(
00415 const core::vector3df& center, f32 radius,
00416 const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f),
00417 u32 minParticlesPerSecond = 5,
00418 u32 maxParticlesPerSecond = 10,
00419 const video::SColor& minStartColor = video::SColor(255,0,0,0),
00420 const video::SColor& maxStartColor = video::SColor(255,255,255,255),
00421 u32 lifeTimeMin=2000, u32 lifeTimeMax=4000,
00422 s32 maxAngleDegrees=0,
00423 const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f),
00424 const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0;
00425
00427
00444 virtual IParticleAttractionAffector* createAttractionAffector(
00445 const core::vector3df& point, f32 speed = 1.0f, bool attract = true,
00446 bool affectX = true, bool affectY = true, bool affectZ = true) = 0;
00447
00449
00457 virtual IParticleAffector* createScaleParticleAffector(const core::dimension2df& scaleTo = core::dimension2df(1.0f, 1.0f)) = 0;
00458
00460
00472 virtual IParticleFadeOutAffector* createFadeOutParticleAffector(
00473 const video::SColor& targetColor = video::SColor(0,0,0,0),
00474 u32 timeNeededToFadeOut = 1000) = 0;
00475
00477
00489 virtual IParticleGravityAffector* createGravityAffector(
00490 const core::vector3df& gravity = core::vector3df(0.0f,-0.03f,0.0f),
00491 u32 timeForceLost = 1000) = 0;
00492
00494
00502 virtual IParticleRotationAffector* createRotationAffector(
00503 const core::vector3df& speed = core::vector3df(5.0f,5.0f,5.0f),
00504 const core::vector3df& pivotPoint = core::vector3df(0.0f,0.0f,0.0f) ) = 0;
00505 };
00506
00507 }
00508 }
00509
00510
00511 #endif
00512