Added extra controls for ParticleEffects.

This commit is contained in:
Robert Osfield
2005-03-23 17:05:21 +00:00
parent 60597f4bbb
commit aee1e88f15
10 changed files with 239 additions and 139 deletions

View File

@@ -15,6 +15,8 @@
#define OSGPARTICLE_EXPLOSIONEFFECT
#include <osgParticle/ParticleEffect>
#include <osgParticle/ModularEmitter>
#include <osgParticle/ModularProgram>
namespace osgParticle
{
@@ -23,18 +25,27 @@ namespace osgParticle
{
public:
ExplosionEffect();
ExplosionEffect(const osg::Vec3& position=osg::Vec3(0.0f,0.0f,0.0f), float scale=1.0f, float intensity=1.0f);
ExplosionEffect(const ExplosionEffect& copy, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
META_Node(osgParticle,ExplosionEffect);
virtual void setDefaults();
virtual void buildEffect();
virtual void setUpEmitterAndProgram();
virtual Emitter* getEmitter() { return _emitter.get(); }
virtual const Emitter* getEmitter() const { return _emitter.get(); }
virtual Program* getProgram() { return _program.get(); }
virtual const Program* getProgram() const { return _program.get(); }
protected:
osg::ref_ptr<ModularEmitter> _emitter;
osg::ref_ptr<ModularProgram> _program;
};
}

View File

@@ -15,6 +15,8 @@
#define OSGPARTICLE_FireEffect
#include <osgParticle/ParticleEffect>
#include <osgParticle/ModularEmitter>
#include <osgParticle/ModularProgram>
namespace osgParticle
{
@@ -23,7 +25,7 @@ namespace osgParticle
{
public:
FireEffect();
FireEffect(const osg::Vec3& position=osg::Vec3(0.0f,0.0f,0.0f), float scale=1.0f, float intensity=1.0f);
FireEffect(const FireEffect& copy, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
@@ -31,10 +33,20 @@ namespace osgParticle
virtual void setDefaults();
virtual void buildEffect();
virtual void setUpEmitterAndProgram();
virtual Emitter* getEmitter() { return _emitter.get(); }
virtual const Emitter* getEmitter() const { return _emitter.get(); }
virtual Program* getProgram() { return _program.get(); }
virtual const Program* getProgram() const { return _program.get(); }
protected:
osg::ref_ptr<ModularEmitter> _emitter;
osg::ref_ptr<ModularProgram> _program;
};
}

View File

@@ -24,35 +24,63 @@ namespace osgParticle
{
public:
ParticleEffect() {}
ParticleEffect():
_scale(1.0f),
_intensity(1.0f),
_startTime(0.0),
_duration(1.0),
_direction(0.0f,0.0f,1.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 setEmitter(Emitter* emitter) { _emitter = emitter; }
Emitter* getEmitter() { return _emitter.get(); }
const Emitter* getEmitter() const { return _emitter.get(); }
void setPosition(const osg::Vec3& position);
const osg::Vec3& getPosition() const { return _position; }
void setProgram(Program* program) { _program = program; }
Program* getProgram() { return _program.get(); }
const Program* getProgram() const { return _program.get(); }
void setScale(float scale);
float getScale() const { return _scale; }
void setIntensity(float intensity);
float getIntensity() const { return _intensity; }
void setParticleSystem(ParticleSystem* ps) { _particleSystem = ps; }
ParticleSystem* getParticleSystem() { return _particleSystem.get(); }
const ParticleSystem* getParticleSystem() const { return _particleSystem.get(); }
void setStartTime(double startTime);
double getStartTime() const { return _startTime; }
virtual void buildEffect() = 0;
void setDuration(double duration);
double getDuration() const { return _duration; }
virtual Emitter* getEmitter() = 0;
virtual const Emitter* getEmitter() const = 0;
virtual Program* getProgram() = 0;
virtual const Program* getProgram() const = 0;
virtual ParticleSystem* getParticleSystem() { return _particleSystem.get(); }
virtual const ParticleSystem* getParticleSystem() const { return _particleSystem.get(); }
virtual void setDefaults();
virtual void setUpEmitterAndProgram() = 0;
virtual void buildEffect();
protected:
osg::ref_ptr<Emitter> _emitter;
osg::ref_ptr<Program> _program;
osg::ref_ptr<ParticleSystem> _particleSystem;
osg::Vec3 _position;
float _scale;
float _intensity;
double _startTime;
double _duration;
osg::Vec3 _direction;
};
}

View File

@@ -124,8 +124,11 @@ namespace osgParticle
inline int getLastFrameNumber() const;
/// Get a reference to the default particle template.
inline const Particle &getDefaultParticleTemplate() const;
inline Particle &getDefaultParticleTemplate();
/// Get a const reference to the default particle template.
inline const Particle &getDefaultParticleTemplate() const;
/// Set the default particle template (particle is copied).
inline void setDefaultParticleTemplate(const Particle &p);
@@ -323,6 +326,11 @@ namespace osgParticle
}
}
inline Particle &ParticleSystem::getDefaultParticleTemplate()
{
return def_ptemp_;
}
inline const Particle &ParticleSystem::getDefaultParticleTemplate() const
{
return def_ptemp_;

View File

@@ -15,6 +15,8 @@
#define OSGPARTICLE_SmokeEffect
#include <osgParticle/ParticleEffect>
#include <osgParticle/ModularEmitter>
#include <osgParticle/ModularProgram>
namespace osgParticle
{
@@ -23,18 +25,27 @@ namespace osgParticle
{
public:
SmokeEffect();
SmokeEffect(const osg::Vec3& position=osg::Vec3(0.0f,0.0f,0.0f), float scale=1.0f, float intensity=1.0f);
SmokeEffect(const SmokeEffect& copy, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
META_Node(osgParticle,SmokeEffect);
virtual void setDefaults();
virtual void buildEffect();
virtual void setUpEmitterAndProgram();
virtual Emitter* getEmitter() { return _emitter.get(); }
virtual const Emitter* getEmitter() const { return _emitter.get(); }
virtual Program* getProgram() { return _program.get(); }
virtual const Program* getProgram() const { return _program.get(); }
protected:
osg::ref_ptr<ModularEmitter> _emitter;
osg::ref_ptr<ModularProgram> _program;
};
}