|
IrrlichtEngine
|
00001 // Copyright (C) 2002-2011 Nikolaus Gebhardt 00002 // This file is part of the "Irrlicht Engine". 00003 // For conditions of distribution and use, see copyright notice in irrlicht.h 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 } // end namespace scene 00508 } // end namespace irr 00509 00510 00511 #endif 00512