ParticleEffect
Go to the documentation of this file.
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*/
#ifndef OSGPARTICLE_PARTICLEEFFECT
#define OSGPARTICLE_PARTICLEEFFECT
#include <osgParticle/Emitter>
#include <osgParticle/Program>
namespace osgParticle
{
class OSGPARTICLE_EXPORT ParticleEffect : public osg::Group
{
public:
explicit ParticleEffect(bool automaticSetup=true):
_automaticSetup(automaticSetup),
_useLocalParticleSystem(true),
_scale(1.0f),
_intensity(1.0f),
_startTime(0.0),
_emitterDuration(1.0),
_wind(0.0f,0.0f,0.0f)
{}
ParticleEffect(const ParticleEffect& copy, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
virtual const char* libraryName() const { return "osgParticle"; }
virtual const char* className() const { return "ParticleEffect"; }
virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const ParticleEffect*>(obj) != 0; }
virtual void accept(osg::NodeVisitor& nv) { if (nv.validNodeMask(*this)) { nv.pushOntoNodePath(this); nv.apply(*this); nv.popFromNodePath(); } }
void setAutomaticSetup(bool flag) { _automaticSetup = flag; }
bool getAutomaticSetup() const { return _automaticSetup; }
void setUseLocalParticleSystem(bool local);
bool getUseLocalParticleSystem() const { return _useLocalParticleSystem; }
void setTextureFileName(const std::string& filename);
const std::string& getTextureFileName() const { return _textureFileName; }
void setDefaultParticleTemplate(const Particle& p);
const Particle& getDefaultParticleTemplate() const { return _defaultParticleTemplate; }
void setPosition(const osg::Vec3& position);
const osg::Vec3& getPosition() const { return _position; }
void setScale(float scale);
float getScale() const { return _scale; }
void setIntensity(float intensity);
float getIntensity() const { return _intensity; }
void setStartTime(double startTime);
double getStartTime() const { return _startTime; }
void setEmitterDuration(double duration);
double getEmitterDuration() const { return _emitterDuration; }
void setParticleDuration(double duration);
double getParticleDuration() const { return _defaultParticleTemplate.getLifeTime(); }
void setWind(const osg::Vec3& wind);
const osg::Vec3& getWind() const { return _wind; }
bool areAllParticlesDead() const { return _particleSystem.valid()?_particleSystem->areAllParticlesDead():true; }
virtual Emitter* getEmitter() = 0;
virtual const Emitter* getEmitter() const = 0;
virtual Program* getProgram() = 0;
virtual const Program* getProgram() const = 0;
void setParticleSystem(ParticleSystem* ps);
template<class T> void setParticleSystem(const osg::ref_ptr<T>& ri) { setParticleSystem(ri.get()); }
inline ParticleSystem* getParticleSystem() { return _particleSystem.get(); }
inline const ParticleSystem* getParticleSystem() const { return _particleSystem.get(); }
virtual void setDefaults();
virtual void setUpEmitterAndProgram() = 0;
virtual void buildEffect();
protected:
virtual ~ParticleEffect() {}
bool _automaticSetup;
osg::ref_ptr<ParticleSystem> _particleSystem;
bool _useLocalParticleSystem;
std::string _textureFileName;
Particle _defaultParticleTemplate;
osg::Vec3 _position;
float _scale;
float _intensity;
double _startTime;
double _emitterDuration;
osg::Vec3 _wind;
};
}
#endif
Emitter
osgParticle::Emitter
Definition Emitter:35
osgParticle::ParticleEffect::_defaultParticleTemplate
Particle _defaultParticleTemplate
Definition ParticleEffect:109
osgParticle::ParticleEffect::getWind
const osg::Vec3 & getWind() const
Definition ParticleEffect:76
osgParticle::ParticleEffect::getDefaultParticleTemplate
const Particle & getDefaultParticleTemplate() const
Definition ParticleEffect:55
osgParticle::ParticleEffect::setAutomaticSetup
void setAutomaticSetup(bool flag)
Definition ParticleEffect:45
osgParticle::ParticleEffect::libraryName
virtual const char * libraryName() const
Definition ParticleEffect:40
osgParticle::ParticleEffect::getEmitter
virtual const Emitter * getEmitter() const =0
osgParticle::ParticleEffect::getUseLocalParticleSystem
bool getUseLocalParticleSystem() const
Definition ParticleEffect:49
osgParticle::ParticleEffect::getParticleDuration
double getParticleDuration() const
Definition ParticleEffect:73
osgParticle::ParticleEffect::areAllParticlesDead
bool areAllParticlesDead() const
Get whether all particles are dead.
Definition ParticleEffect:79
osgParticle::ParticleEffect::ParticleEffect
ParticleEffect(bool automaticSetup=true)
Definition ParticleEffect:27
osgParticle::ParticleEffect::setUpEmitterAndProgram
virtual void setUpEmitterAndProgram()=0
osgParticle::ParticleEffect::getParticleSystem
const ParticleSystem * getParticleSystem() const
Definition ParticleEffect:91
osgParticle::ParticleEffect::setTextureFileName
void setTextureFileName(const std::string &filename)
osgParticle::ParticleEffect::_textureFileName
std::string _textureFileName
Definition ParticleEffect:108
osgParticle::ParticleEffect::_emitterDuration
double _emitterDuration
Definition ParticleEffect:114
osgParticle::ParticleEffect::_wind
osg::Vec3 _wind
Definition ParticleEffect:115
osgParticle::ParticleEffect::setPosition
void setPosition(const osg::Vec3 &position)
osgParticle::ParticleEffect::setIntensity
void setIntensity(float intensity)
osgParticle::ParticleEffect::getStartTime
double getStartTime() const
Definition ParticleEffect:67
osgParticle::ParticleEffect::setEmitterDuration
void setEmitterDuration(double duration)
osgParticle::ParticleEffect::getProgram
virtual const Program * getProgram() const =0
osgParticle::ParticleEffect::getEmitterDuration
double getEmitterDuration() const
Definition ParticleEffect:70
osgParticle::ParticleEffect::setUseLocalParticleSystem
void setUseLocalParticleSystem(bool local)
osgParticle::ParticleEffect::setWind
void setWind(const osg::Vec3 &wind)
osgParticle::ParticleEffect::setDefaults
virtual void setDefaults()
osgParticle::ParticleEffect::getParticleSystem
ParticleSystem * getParticleSystem()
Definition ParticleEffect:90
osgParticle::ParticleEffect::buildEffect
virtual void buildEffect()
osgParticle::ParticleEffect::_particleSystem
osg::ref_ptr< ParticleSystem > _particleSystem
Definition ParticleEffect:105
osgParticle::ParticleEffect::getTextureFileName
const std::string & getTextureFileName() const
Definition ParticleEffect:52
osgParticle::ParticleEffect::_intensity
float _intensity
Definition ParticleEffect:112
osgParticle::ParticleEffect::_startTime
double _startTime
Definition ParticleEffect:113
osgParticle::ParticleEffect::setParticleDuration
void setParticleDuration(double duration)
osgParticle::ParticleEffect::setParticleSystem
void setParticleSystem(const osg::ref_ptr< T > &ri)
Definition ParticleEffect:88
osgParticle::ParticleEffect::getPosition
const osg::Vec3 & getPosition() const
Definition ParticleEffect:58
osgParticle::ParticleEffect::getAutomaticSetup
bool getAutomaticSetup() const
Definition ParticleEffect:46
osgParticle::ParticleEffect::getProgram
virtual Program * getProgram()=0
osgParticle::ParticleEffect::getIntensity
float getIntensity() const
Definition ParticleEffect:64
osgParticle::ParticleEffect::getEmitter
virtual Emitter * getEmitter()=0
osgParticle::ParticleEffect::setStartTime
void setStartTime(double startTime)
osgParticle::ParticleEffect::_automaticSetup
bool _automaticSetup
Definition ParticleEffect:103
osgParticle::ParticleEffect::_position
osg::Vec3 _position
Definition ParticleEffect:110
osgParticle::ParticleEffect::setParticleSystem
void setParticleSystem(ParticleSystem *ps)
osgParticle::ParticleEffect::accept
virtual void accept(osg::NodeVisitor &nv)
Definition ParticleEffect:43
osgParticle::ParticleEffect::isSameKindAs
virtual bool isSameKindAs(const osg::Object *obj) const
Definition ParticleEffect:42
osgParticle::ParticleEffect::getScale
float getScale() const
Definition ParticleEffect:61
osgParticle::ParticleEffect::setDefaultParticleTemplate
void setDefaultParticleTemplate(const Particle &p)
osgParticle::ParticleEffect::_scale
float _scale
Definition ParticleEffect:111
osgParticle::ParticleEffect::~ParticleEffect
virtual ~ParticleEffect()
Definition ParticleEffect:101
osgParticle::ParticleEffect::className
virtual const char * className() const
Definition ParticleEffect:41
osgParticle::ParticleEffect::ParticleEffect
ParticleEffect(const ParticleEffect &copy, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
osgParticle::ParticleEffect::setScale
void setScale(float scale)
osgParticle::ParticleEffect::_useLocalParticleSystem
bool _useLocalParticleSystem
Definition ParticleEffect:107
osgParticle::ParticleSystem
Definition ParticleSystem:54
osgParticle::Particle
Definition Particle:47
osgParticle::Program
Definition osgParticle/Program:36
osg::CopyOp
Definition CopyOp:41
osg::CopyOp::SHALLOW_COPY
@ SHALLOW_COPY
Definition CopyOp:47
osg::Group
Definition Group:29
osg::NodeVisitor
Definition NodeVisitor:82
osg::NodeVisitor::apply
virtual void apply(Drawable &drawable)
osg::NodeVisitor::pushOntoNodePath
void pushOntoNodePath(Node *node)
Definition NodeVisitor:287
osg::NodeVisitor::validNodeMask
bool validNodeMask(const osg::Node &node) const
Definition NodeVisitor:221
osg::NodeVisitor::popFromNodePath
void popFromNodePath()
Definition NodeVisitor:293
osg::Object
Definition Object:61
osg::ref_ptr
Definition ref_ptr:32
osg::ref_ptr::get
T * get() const
Definition ref_ptr:117
osgParticle
Definition AccelOperator:27
osg::Vec3
Vec3f Vec3
Definition Vec3:21
OSGPARTICLE_EXPORT
#define OSGPARTICLE_EXPORT
Definition osgParticle/Export:40
Program