OGRE  1.9.0
OgreParticleEmitter.h
Go to the documentation of this file.
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4(Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2014 Torus Knot Software Ltd
8
9Permission is hereby granted, free of charge, to any person obtaining a copy
10of this software and associated documentation files (the "Software"), to deal
11in the Software without restriction, including without limitation the rights
12to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13copies of the Software, and to permit persons to whom the Software is
14furnished to do so, subject to the following conditions:
15
16The above copyright notice and this permission notice shall be included in
17all copies or substantial portions of the Software.
18
19THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25THE SOFTWARE.
26-----------------------------------------------------------------------------
27*/
28#ifndef __ParticleEmitter_H__
29#define __ParticleEmitter_H__
30
31#include "OgrePrerequisites.h"
32#include "OgreString.h"
33#include "OgreVector3.h"
34#include "OgreColourValue.h"
35#include "OgreStringInterface.h"
37#include "OgreParticle.h"
38#include "OgreHeaderPrefix.h"
39
40
41namespace Ogre {
42
43
73 {
74 protected:
75
76 // Command object for setting / getting parameters
100
101
116 /* Center position to tell in which direction will particles be emitted according to their position,
117 useful for explosions & implosions, some emitters (i.e. point emitter) may not need it. */
133
136
145
151
152 // Fractions of particles wanted to be emitted last time
154
157
160
161 // If 'true', this emitter is emitted by another emitter.
162 // NB. That doesn't imply that the emitter itself emits other emitters (that could or could not be the case)
164
165 // NB Method below here are to help out people implementing emitters by providing the
166 // most commonly used approaches as piecemeal methods
167
171 virtual void genEmissionDirection( const Vector3 &particlePos, Vector3& destVector );
172
177 virtual void genEmissionVelocity(Vector3& destVector);
178
180 virtual Real genEmissionTTL(void);
181
183 virtual void genEmissionColour(ColourValue& destColour);
184
186 virtual unsigned short genConstantEmissionCount(Real timeElapsed);
187
197
200
201
202 public:
206
208 virtual void setPosition(const Vector3& pos);
209
211 virtual const Vector3& getPosition(void) const;
212
224 virtual void setDirection(const Vector3& direction);
225
227 virtual const Vector3& getDirection(void) const;
228
237 virtual void setUp(const Vector3& up);
238
240 virtual const Vector3& getUp(void) const;
241
255 virtual void setDirPositionReference( const Vector3& position, bool enable );
256
258 virtual const Vector3& getDirPositionReference() const;
259
261 virtual bool getDirPositionReferenceEnabled() const;
262
273 virtual void setAngle(const Radian& angle);
274
276 virtual const Radian& getAngle(void) const;
277
285 virtual void setParticleVelocity(Real speed);
286
287
297 virtual void setParticleVelocity(Real min, Real max);
299 virtual void setMinParticleVelocity(Real min);
301 virtual void setMaxParticleVelocity(Real max);
302
304 virtual Real getParticleVelocity(void) const;
305
307 virtual Real getMinParticleVelocity(void) const;
308
310 virtual Real getMaxParticleVelocity(void) const;
311
324 virtual void setEmissionRate(Real particlesPerSecond);
325
327 virtual Real getEmissionRate(void) const;
328
339 virtual void setTimeToLive(Real ttl);
353 virtual void setTimeToLive(Real minTtl, Real maxTtl);
354
356 virtual void setMinTimeToLive(Real min);
358 virtual void setMaxTimeToLive(Real max);
359
361 virtual Real getTimeToLive(void) const;
362
364 virtual Real getMinTimeToLive(void) const;
366 virtual Real getMaxTimeToLive(void) const;
367
375 virtual void setColour(const ColourValue& colour);
385 virtual void setColour(const ColourValue& colourStart, const ColourValue& colourEnd);
391 virtual const ColourValue& getColour(void) const;
393 virtual const ColourValue& getColourRangeStart(void) const;
395 virtual const ColourValue& getColourRangeEnd(void) const;
396
409 virtual unsigned short _getEmissionCount(Real timeElapsed) = 0;
410
420 virtual void _initParticle(Particle* pParticle) {
421 // Initialise size in case it's been altered
422 pParticle->resetDimensions();
423 }
424
425
431 const String &getType(void) const { return mType; }
432
437 virtual void setEnabled(bool enabled);
438
440 virtual bool getEnabled(void) const;
441
449 virtual void setStartTime(Real startTime);
451 virtual Real getStartTime(void) const;
452
464 virtual void setDuration(Real duration);
465
467 virtual Real getDuration(void) const;
468
480 virtual void setDuration(Real min, Real max);
482 virtual void setMinDuration(Real min);
484 virtual void setMaxDuration(Real max);
486 virtual Real getMinDuration(void) const;
488 virtual Real getMaxDuration(void) const;
489
499 virtual void setRepeatDelay(Real duration);
500
502 virtual Real getRepeatDelay(void) const;
503
515 virtual void setRepeatDelay(Real min, Real max);
517 virtual void setMinRepeatDelay(Real min);
519 virtual void setMaxRepeatDelay(Real max);
521 virtual Real getMinRepeatDelay(void) const;
523 virtual Real getMaxRepeatDelay(void) const;
524
526 const String &getName(void) const;
527
529 virtual void setName(const String& newName);
530
532 const String &getEmittedEmitter(void) const;
533
535 virtual void setEmittedEmitter(const String& emittedEmitter);
536
538 virtual bool isEmitted(void) const;
539
541 virtual void setEmitted(bool emitted);
542
543
544 };
545
547
548}
549
550#include "OgreHeaderSuffix.h"
551
552#endif
553
#define _OgreExport
Class representing colour.
Command object for ParticleEmitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
Command object for particle emitter - see ParamCommand.
virtual const ColourValue & getColour(void) const
Gets the colour of particles to be emitted.
Real mMinTTL
Initial time-to-live of particles (min)
virtual void setTimeToLive(Real minTtl, Real maxTtl)
Sets the range of lifetime for particles emitted.
Vector3 mPosition
Position relative to the center of the ParticleSystem.
static EmitterCommands::CmdMaxTTL msMaxTTLCmd
String mType
Name of the type of emitter, MUST be initialised by subclasses.
static EmitterCommands::CmdEmissionRate msEmissionRateCmd
virtual void setEmitted(bool emitted)
Set the indication (true/false) to indicate that the emitter is emitted by another emitter.
static EmitterCommands::CmdMinTTL msMinTTLCmd
static EmitterCommands::CmdMinVelocity msMinVelocityCmd
virtual Real getStartTime(void) const
Gets the start time of the emitter.
virtual void setColourRangeStart(const ColourValue &colour)
Sets the minimum colour of particles to be emitted.
static EmitterCommands::CmdDirPositionRef msDirPositionRefCmd
virtual Real getDuration(void) const
Gets the duration of the emitter from when it is created or re-enabled.
virtual Real getMaxTimeToLive(void) const
Gets the maximum time each particle will live for.
Real mRepeatDelayRemain
Repeat delay left.
virtual void setMaxRepeatDelay(Real max)
Sets the maximum duration of this emitter in seconds (see setRepeatDelay for more details)
virtual Real getRepeatDelay(void) const
Gets the duration of the emitter from when it is created or re-enabled.
bool mEnabled
Whether this emitter is currently enabled (defaults to true)
virtual void genEmissionDirection(const Vector3 &particlePos, Vector3 &destVector)
Internal utility method for generating particle exit direction.
virtual void setDuration(Real min, Real max)
Sets the range of random duration for this emitter.
virtual Real getMinRepeatDelay(void) const
Gets the minimum duration of this emitter in seconds (see setRepeatDelay for more details)
Real mMaxTTL
Initial time-to-live of particles (max)
virtual const ColourValue & getColourRangeStart(void) const
Gets the minimum colour of particles to be emitted.
virtual bool getDirPositionReferenceEnabled() const
Returns whether direction or position reference is used.
virtual unsigned short genConstantEmissionCount(Real timeElapsed)
Internal utility method for generating an emission count based on a constant emission rate.
static EmitterCommands::CmdDirection msDirectionCmd
Real mRepeatDelayMin
Time between each repeat.
virtual void _initParticle(Particle *pParticle)
Initialises a particle based on the emitter's approach and parameters.
Vector3 mUp
Notional up vector, used to speed up generation of variant directions, and also to orient some emitte...
Real mDurationMax
Maximum length of time the emitter will run for (0 = forever)
static EmitterCommands::CmdName msNameCmd
Radian mAngle
Angle around direction which particles may be emitted, internally radians but angleunits for interfac...
virtual void setRepeatDelay(Real min, Real max)
Sets the range of random duration for this emitter.
static EmitterCommands::CmdMinRepeatDelay msMinRepeatDelayCmd
virtual Real getTimeToLive(void) const
Gets the time each particle will live for.
static EmitterCommands::CmdColour msColourCmd
virtual Real getMaxDuration(void) const
Gets the maximum duration of this emitter in seconds (see setDuration for more details)
ColourValue mColourRangeStart
Initial colour of particles (range start)
virtual void setUp(const Vector3 &up)
Sets the notional up vector of the emitter.
String mEmittedEmitter
The name of the emitter to be emitted (optional)
virtual Real getEmissionRate(void) const
Returns the emission rate set for this emitter.
Real mMinSpeed
Min speed of particles.
Real mStartTime
Start time (in seconds from start of first call to ParticleSystem to update)
virtual const Vector3 & getDirPositionReference() const
Returns the position reference to generate direction of emitted particles.
virtual bool isEmitted(void) const
Return true if the emitter is emitted by another emitter.
virtual void setParticleVelocity(Real speed)
Sets the initial velocity of particles emitted.
virtual Real getMinTimeToLive(void) const
Gets the minimum time each particle will live for.
virtual void setColourRangeEnd(const ColourValue &colour)
Sets the maximum colour of particles to be emitted.
static EmitterCommands::CmdUp msUpCmd
virtual const Vector3 & getPosition(void) const
Returns the position of this emitter relative to the center of the particle system.
virtual void setMinTimeToLive(Real min)
Sets the minimum time each particle will live for.
virtual void setDirPositionReference(const Vector3 &position, bool enable)
Sets the direction of the emitter.
virtual void setMinParticleVelocity(Real min)
Returns the minimum particle velocity.
virtual Real getMinDuration(void) const
Gets the minimum duration of this emitter in seconds (see setDuration for more details)
virtual void setMinDuration(Real min)
Sets the minimum duration of this emitter in seconds (see setDuration for more details)
ParticleSystem * mParent
Parent particle system.
ParticleEmitter(ParticleSystem *psys)
virtual unsigned short _getEmissionCount(Real timeElapsed)=0
Gets the number of particles which this emitter would like to emit based on the time elapsed.
static EmitterCommands::CmdMaxVelocity msMaxVelocityCmd
Real mMaxSpeed
Max speed of particles.
virtual void setDuration(Real duration)
Sets the duration of the emitter.
static EmitterCommands::CmdRepeatDelay msRepeatDelayCmd
virtual const Radian & getAngle(void) const
Returns the maximum angle which the initial particle direction can deviate from the emitters base dir...
virtual void setColour(const ColourValue &colourStart, const ColourValue &colourEnd)
Sets the range of colours for emitted particles.
const String & getType(void) const
Returns the name of the type of emitter.
virtual void setColour(const ColourValue &colour)
Sets the initial colour of particles emitted.
virtual const Vector3 & getUp(void) const
Returns the up vector of the emitter.
static EmitterCommands::CmdAngle msAngleCmd
Real mEmissionRate
Rate in particles per second at which this emitter wishes to emit particles.
void initDurationRepeat(void)
Internal method for initialising the duration & repeat of an emitter.
virtual ~ParticleEmitter()
Virtual destructor essential.
static EmitterCommands::CmdMinDuration msMinDurationCmd
virtual void setParticleVelocity(Real min, Real max)
Sets the initial velocity range of particles emitted.
virtual void setStartTime(Real startTime)
Sets the 'start time' of this emitter.
virtual void setMaxDuration(Real max)
Sets the maximum duration of this emitter in seconds (see setDuration for more details)
virtual void setRepeatDelay(Real duration)
Sets the time between repeats of the emitter.
virtual bool getEnabled(void) const
Gets the flag indicating if this emitter is enabled or not.
virtual Real getMaxParticleVelocity(void) const
Returns the maximum particle velocity.
virtual void setEnabled(bool enabled)
Sets whether or not the emitter is enabled.
Vector3 mDirection
Base direction of the emitter, may not be used by some emitters.
virtual void setTimeToLive(Real ttl)
Sets the lifetime of all particles emitted.
virtual void setName(const String &newName)
Sets the name of the emitter.
virtual const Vector3 & getDirection(void) const
Returns the base direction of the emitter.
static EmitterCommands::CmdColourRangeEnd msColourRangeEndCmd
virtual void setPosition(const Vector3 &pos)
Sets the position of this emitter relative to the particle system center.
virtual void genEmissionVelocity(Vector3 &destVector)
Internal utility method to apply velocity to a particle direction.
String mName
The name of the emitter. The name is optional unless it is used as an emitter that is emitted itself.
static EmitterCommands::CmdColourRangeStart msColourRangeStartCmd
static EmitterCommands::CmdMaxDuration msMaxDurationCmd
virtual Real getParticleVelocity(void) const
Returns the initial velocity of particles emitted.
virtual Real getMinParticleVelocity(void) const
Returns the minimum particle velocity.
virtual const ColourValue & getColourRangeEnd(void) const
Gets the maximum colour of particles to be emitted.
static EmitterCommands::CmdVelocity msVelocityCmd
static EmitterCommands::CmdPosition msPositionCmd
void addBaseParameters(void)
Internal method for setting up the basic parameter definitions for a subclass.
virtual void setMaxTimeToLive(Real max)
Sets the maximum time each particle will live for.
virtual void setEmissionRate(Real particlesPerSecond)
Sets the emission rate for this emitter.
ColourValue mColourRangeEnd
Initial colour of particles (range end)
static EmitterCommands::CmdEmittedEmitter msEmittedEmitterCmd
virtual void genEmissionColour(ColourValue &destColour)
Internal utility method for generating a colour for a particle.
bool mUseDirPositionRef
When true, mDirPositionRef is used instead of mDirection to generate particles.
Real mDurationRemain
Current duration remainder.
virtual Real getMaxRepeatDelay(void) const
Gets the maximum duration of this emitter in seconds (see setRepeatDelay for more details)
static EmitterCommands::CmdTTL msTTLCmd
virtual void setMaxParticleVelocity(Real max)
Returns the maximum particle velocity.
virtual void setAngle(const Radian &angle)
Sets the maximum angle away from the emitter direction which particle will be emitted.
virtual Real genEmissionTTL(void)
Internal utility method for generating a time-to-live for a particle.
static EmitterCommands::CmdDuration msDurationCmd
virtual void setMinRepeatDelay(Real min)
Sets the minimum duration of this emitter in seconds (see setRepeatDelay for more details)
virtual void setEmittedEmitter(const String &emittedEmitter)
Sets the name of the emitter to be emitted.
static EmitterCommands::CmdMaxRepeatDelay msMaxRepeatDelayCmd
virtual void setDirection(const Vector3 &direction)
Sets the direction of the emitter.
const String & getEmittedEmitter(void) const
Returns the name of the emitter to be emitted.
const String & getName(void) const
Returns the name of the emitter.
Real mDurationMin
Minimum length of time emitter will run for (0 = forever)
Class defining particle system based special effects.
Vector3 position
World position.
void resetDimensions(void)
Utility method to reset this particle.
Vector3 direction
Direction (and speed)
ColourValue colour
Current colour.
Wrapper class which indicates a given angle value is in Radians.
Definition OgreMath.h:48
Standard 3-dimensional vector.
Definition OgreVector3.h:52
float Real
Software floating point type.
_StringBase String