1 | /* |
---|
2 | ----------------------------------------------------------------------------- |
---|
3 | This source file is part of OGRE |
---|
4 | (Object-oriented Graphics Rendering Engine) |
---|
5 | For the latest info, see http://www.ogre3d.org/ |
---|
6 | |
---|
7 | Copyright (c) 2000-2006 Torus Knot Software Ltd |
---|
8 | Also see acknowledgements in Readme.html |
---|
9 | |
---|
10 | This program is free software; you can redistribute it and/or modify it under |
---|
11 | the terms of the GNU Lesser General Public License as published by the Free Software |
---|
12 | Foundation; either version 2 of the License, or (at your option) any later |
---|
13 | version. |
---|
14 | |
---|
15 | This program is distributed in the hope that it will be useful, but WITHOUT |
---|
16 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
---|
17 | FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. |
---|
18 | |
---|
19 | You should have received a copy of the GNU Lesser General Public License along with |
---|
20 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
---|
21 | Place - Suite 330, Boston, MA 02111-1307, USA, or go to |
---|
22 | http://www.gnu.org/copyleft/lesser.txt. |
---|
23 | |
---|
24 | You may alternatively use this source under the terms of a specific version of |
---|
25 | the OGRE Unrestricted License provided you have obtained such a license from |
---|
26 | Torus Knot Software Ltd. |
---|
27 | ----------------------------------------------------------------------------- |
---|
28 | */ |
---|
29 | #ifndef __ParticleEmitter_H__ |
---|
30 | #define __ParticleEmitter_H__ |
---|
31 | |
---|
32 | #include "OgrePrerequisites.h" |
---|
33 | #include "OgreString.h" |
---|
34 | #include "OgreVector3.h" |
---|
35 | #include "OgreColourValue.h" |
---|
36 | #include "OgreStringInterface.h" |
---|
37 | #include "OgreParticleEmitterCommands.h" |
---|
38 | #include "OgreParticle.h" |
---|
39 | |
---|
40 | |
---|
41 | namespace Ogre { |
---|
42 | |
---|
43 | |
---|
44 | /** Abstract class defining the interface to be implemented by particle emitters. |
---|
45 | @remarks |
---|
46 | Particle emitters are the sources of particles in a particle system. |
---|
47 | This class defines the ParticleEmitter interface, and provides a basic implementation |
---|
48 | for tasks which most emitters will do (these are of course overridable). |
---|
49 | Particle emitters can be grouped into types, e.g. 'point' emitters, 'box' emitters etc; each type will |
---|
50 | create particles with a different starting point, direction and velocity (although |
---|
51 | within the types you can configure the ranges of these parameters). |
---|
52 | @par |
---|
53 | Because there are so many types of emitters you could use, OGRE chooses not to dictate |
---|
54 | the available types. It comes with some in-built, but allows plugins or applications to extend the emitter types available. |
---|
55 | This is done by subclassing ParticleEmitter to have the appropriate emission behaviour you want, |
---|
56 | and also creating a subclass of ParticleEmitterFactory which is responsible for creating instances |
---|
57 | of your new emitter type. You register this factory with the ParticleSystemManager using |
---|
58 | addEmitterFactory, and from then on emitters of this type can be created either from code or through |
---|
59 | text particle scripts by naming the type. |
---|
60 | @par |
---|
61 | This same approach is used for ParticleAffectors (which modify existing particles per frame). |
---|
62 | This means that OGRE is particularly flexible when it comes to creating particle system effects, |
---|
63 | with literally infinite combinations of emitter and affector types, and paramters within those |
---|
64 | types. |
---|
65 | */ |
---|
66 | class _OgreExport ParticleEmitter : public StringInterface, public Particle |
---|
67 | { |
---|
68 | protected: |
---|
69 | |
---|
70 | // Command object for setting / getting parameters |
---|
71 | static EmitterCommands::CmdAngle msAngleCmd; |
---|
72 | static EmitterCommands::CmdColour msColourCmd; |
---|
73 | static EmitterCommands::CmdColourRangeStart msColourRangeStartCmd; |
---|
74 | static EmitterCommands::CmdColourRangeEnd msColourRangeEndCmd; |
---|
75 | static EmitterCommands::CmdDirection msDirectionCmd; |
---|
76 | static EmitterCommands::CmdEmissionRate msEmissionRateCmd; |
---|
77 | static EmitterCommands::CmdMaxTTL msMaxTTLCmd; |
---|
78 | static EmitterCommands::CmdMaxVelocity msMaxVelocityCmd; |
---|
79 | static EmitterCommands::CmdMinTTL msMinTTLCmd; |
---|
80 | static EmitterCommands::CmdMinVelocity msMinVelocityCmd; |
---|
81 | static EmitterCommands::CmdPosition msPositionCmd; |
---|
82 | static EmitterCommands::CmdTTL msTTLCmd; |
---|
83 | static EmitterCommands::CmdVelocity msVelocityCmd; |
---|
84 | static EmitterCommands::CmdDuration msDurationCmd; |
---|
85 | static EmitterCommands::CmdMinDuration msMinDurationCmd; |
---|
86 | static EmitterCommands::CmdMaxDuration msMaxDurationCmd; |
---|
87 | static EmitterCommands::CmdRepeatDelay msRepeatDelayCmd; |
---|
88 | static EmitterCommands::CmdMinRepeatDelay msMinRepeatDelayCmd; |
---|
89 | static EmitterCommands::CmdMaxRepeatDelay msMaxRepeatDelayCmd; |
---|
90 | static EmitterCommands::CmdName msNameCmd; |
---|
91 | static EmitterCommands::CmdEmittedEmitter msEmittedEmitterCmd; |
---|
92 | |
---|
93 | |
---|
94 | /// Parent particle system |
---|
95 | ParticleSystem* mParent; |
---|
96 | /// Position relative to the center of the ParticleSystem |
---|
97 | Vector3 mPosition; |
---|
98 | /// Rate in particles per second at which this emitter wishes to emit particles |
---|
99 | Real mEmissionRate; |
---|
100 | /// Name of the type of emitter, MUST be initialised by subclasses |
---|
101 | String mType; |
---|
102 | /// Base direction of the emitter, may not be used by some emitters |
---|
103 | Vector3 mDirection; |
---|
104 | // Notional up vector, just used to speed up generation of variant directions |
---|
105 | Vector3 mUp; |
---|
106 | /// Angle around direction which particles may be emitted, internally radians but angleunits for interface |
---|
107 | Radian mAngle; |
---|
108 | /// Min speed of particles |
---|
109 | Real mMinSpeed; |
---|
110 | /// Max speed of particles |
---|
111 | Real mMaxSpeed; |
---|
112 | /// Initial time-to-live of particles (min) |
---|
113 | Real mMinTTL; |
---|
114 | /// Initial time-to-live of particles (max) |
---|
115 | Real mMaxTTL; |
---|
116 | /// Initial colour of particles (range start) |
---|
117 | ColourValue mColourRangeStart; |
---|
118 | /// Initial colour of particles (range end) |
---|
119 | ColourValue mColourRangeEnd; |
---|
120 | |
---|
121 | /// Whether this emitter is currently enabled (defaults to true) |
---|
122 | bool mEnabled; |
---|
123 | |
---|
124 | /// Start time (in seconds from start of first call to ParticleSystem to update) |
---|
125 | Real mStartTime; |
---|
126 | /// Minimum length of time emitter will run for (0 = forever) |
---|
127 | Real mDurationMin; |
---|
128 | /// Maximum length of time the emitter will run for (0 = forever) |
---|
129 | Real mDurationMax; |
---|
130 | /// Current duration remainder |
---|
131 | Real mDurationRemain; |
---|
132 | |
---|
133 | /// Time between each repeat |
---|
134 | Real mRepeatDelayMin; |
---|
135 | Real mRepeatDelayMax; |
---|
136 | /// Repeat delay left |
---|
137 | Real mRepeatDelayRemain; |
---|
138 | |
---|
139 | // Fractions of particles wanted to be emitted last time |
---|
140 | Real mRemainder; |
---|
141 | |
---|
142 | /// The name of the emitter. The name is optional unless it is used as an emitter that is emitted itself. |
---|
143 | String mName; |
---|
144 | |
---|
145 | /// The name of the emitter to be emitted (optional) |
---|
146 | String mEmittedEmitter; |
---|
147 | |
---|
148 | // If 'true', this emitter is emitted by another emitter. |
---|
149 | // NB. That doesn´t imply that the emitter itself emits other emitters (that could or could not be the case) |
---|
150 | bool mEmitted; |
---|
151 | |
---|
152 | // NB Method below here are to help out people implementing emitters by providing the |
---|
153 | // most commonly used approaches as piecemeal methods |
---|
154 | |
---|
155 | /** Internal utility method for generating particle exit direction |
---|
156 | @param destVector Reference to vector to complete with new direction (normalised) |
---|
157 | */ |
---|
158 | virtual void genEmissionDirection(Vector3& destVector); |
---|
159 | |
---|
160 | /** Internal utility method to apply velocity to a particle direction. |
---|
161 | @param destVector The vector to scale by a randomly generated scale between min and max speed. |
---|
162 | Assumed normalised already, and likely already oriented in the right direction. |
---|
163 | */ |
---|
164 | virtual void genEmissionVelocity(Vector3& destVector); |
---|
165 | |
---|
166 | /** Internal utility method for generating a time-to-live for a particle. */ |
---|
167 | virtual Real genEmissionTTL(void); |
---|
168 | |
---|
169 | /** Internal utility method for generating a colour for a particle. */ |
---|
170 | virtual void genEmissionColour(ColourValue& destColour); |
---|
171 | |
---|
172 | /** Internal utility method for generating an emission count based on a constant emission rate. */ |
---|
173 | virtual unsigned short genConstantEmissionCount(Real timeElapsed); |
---|
174 | |
---|
175 | /** Internal method for setting up the basic parameter definitions for a subclass. |
---|
176 | @remarks |
---|
177 | Because StringInterface holds a dictionary of parameters per class, subclasses need to |
---|
178 | call this to ask the base class to add it's parameters to their dictionary as well. |
---|
179 | Can't do this in the constructor because that runs in a non-virtual context. |
---|
180 | @par |
---|
181 | The subclass must have called it's own createParamDictionary before calling this method. |
---|
182 | */ |
---|
183 | void addBaseParameters(void); |
---|
184 | |
---|
185 | /** Internal method for initialising the duration & repeat of an emitter. */ |
---|
186 | void initDurationRepeat(void); |
---|
187 | |
---|
188 | |
---|
189 | public: |
---|
190 | ParticleEmitter(ParticleSystem* psys); |
---|
191 | /** Virtual destructor essential. */ |
---|
192 | virtual ~ParticleEmitter(); |
---|
193 | |
---|
194 | /** Sets the position of this emitter relative to the particle system center. */ |
---|
195 | virtual void setPosition(const Vector3& pos); |
---|
196 | |
---|
197 | /** Returns the position of this emitter relative to thte center of the particle system. */ |
---|
198 | virtual const Vector3& getPosition(void) const; |
---|
199 | |
---|
200 | /** Sets the direction of the emitter. |
---|
201 | @remarks |
---|
202 | Most emitters will have a base direction in which they emit particles (those which |
---|
203 | emit in all directions will ignore this parameter). They may not emit exactly along this |
---|
204 | vector for every particle, many will introduce a random scatter around this vector using |
---|
205 | the angle property. |
---|
206 | @param direction |
---|
207 | The base direction for particles emitted. |
---|
208 | */ |
---|
209 | virtual void setDirection(const Vector3& direction); |
---|
210 | |
---|
211 | /** Returns the base direction of the emitter. */ |
---|
212 | virtual const Vector3& getDirection(void) const; |
---|
213 | |
---|
214 | /** Sets the maximum angle away from the emitter direction which particle will be emitted. |
---|
215 | @remarks |
---|
216 | Whilst the direction property defines the general direction of emission for particles, |
---|
217 | this property defines how far the emission angle can deviate away from this base direction. |
---|
218 | This allows you to create a scatter effect - if set to 0, all particles will be emitted |
---|
219 | exactly along the emitters direction vector, wheras if you set it to 180 degrees or more, |
---|
220 | particles will be emitted in a sphere, i.e. in all directions. |
---|
221 | @param degrees |
---|
222 | Maximum angle which initial particle direction can deviate from the emitter base direction vector. |
---|
223 | */ |
---|
224 | virtual void setAngle(const Radian& angle); |
---|
225 | #ifndef OGRE_FORCE_ANGLE_TYPES |
---|
226 | inline void setAngle(Real angle) { |
---|
227 | setAngle ( Angle(angle) ); |
---|
228 | } |
---|
229 | #endif//OGRE_FORCE_ANGLE_TYPES |
---|
230 | |
---|
231 | /** Returns the maximum angle which the initial particle direction can deviate from the emitters base direction. */ |
---|
232 | virtual const Radian& getAngle(void) const; |
---|
233 | |
---|
234 | /** Sets the initial velocity of particles emitted. |
---|
235 | @remarks |
---|
236 | This method sets a constant speed for emitted particles. See the alternate version |
---|
237 | of this method which takes 2 parameters if you want a variable speed. |
---|
238 | @param |
---|
239 | speed The initial speed in world units per second which every particle emitted starts with. |
---|
240 | */ |
---|
241 | virtual void setParticleVelocity(Real speed); |
---|
242 | |
---|
243 | |
---|
244 | /** Sets the initial velocity range of particles emitted. |
---|
245 | @remarks |
---|
246 | This method sets the range of starting speeds for emitted particles. |
---|
247 | See the alternate version of this method which takes 1 parameter if you want a |
---|
248 | constant speed. This emitter will randomly choose a speed between the minimum and |
---|
249 | maximum for each particle. |
---|
250 | @param max The maximum speed in world units per second for the initial particle speed on emission. |
---|
251 | @param min The minimum speed in world units per second for the initial particle speed on emission. |
---|
252 | */ |
---|
253 | virtual void setParticleVelocity(Real min, Real max); |
---|
254 | /** Returns the minimum particle velocity. */ |
---|
255 | virtual void setMinParticleVelocity(Real min); |
---|
256 | /** Returns the maximum particle velocity. */ |
---|
257 | virtual void setMaxParticleVelocity(Real max); |
---|
258 | |
---|
259 | /** Returns the initial velocity of particles emitted. */ |
---|
260 | virtual Real getParticleVelocity(void) const; |
---|
261 | |
---|
262 | /** Returns the minimum particle velocity. */ |
---|
263 | virtual Real getMinParticleVelocity(void) const; |
---|
264 | |
---|
265 | /** Returns the maximum particle velocity. */ |
---|
266 | virtual Real getMaxParticleVelocity(void) const; |
---|
267 | |
---|
268 | /** Sets the emission rate for this emitter. |
---|
269 | @remarks |
---|
270 | This method tells the emitter how many particles per second should be emitted. The emitter |
---|
271 | subclass does not have to emit these in a continuous burst - this is a relative parameter |
---|
272 | and the emitter may choose to emit all of the second's worth of particles every half-second |
---|
273 | for example. This is controlled by the emitter's getEmissionCount method. |
---|
274 | @par |
---|
275 | Also, if the ParticleSystem's particle quota is exceeded, not all the particles requested |
---|
276 | may be actually emitted. |
---|
277 | @param |
---|
278 | particlesPerSecond The number of particles to be emitted every second. |
---|
279 | */ |
---|
280 | virtual void setEmissionRate(Real particlesPerSecond); |
---|
281 | |
---|
282 | /** Returns the emission rate set for this emitter. */ |
---|
283 | virtual Real getEmissionRate(void) const; |
---|
284 | |
---|
285 | /** Sets the lifetime of all particles emitted. |
---|
286 | @remarks |
---|
287 | The emitter initialises particles with a time-to-live (TTL), the number of seconds a particle |
---|
288 | will exist before being destroyed. This method sets a constant TTL for all particles emitted. |
---|
289 | Note that affectors are able to modify the TTL of particles later. |
---|
290 | @par |
---|
291 | Also see the alternate version of this method which takes a min and max TTL in order to |
---|
292 | have the TTL vary per particle. |
---|
293 | @param ttl The number of seconds each particle will live for. |
---|
294 | */ |
---|
295 | virtual void setTimeToLive(Real ttl); |
---|
296 | /** Sets the range of lifetime for particles emitted. |
---|
297 | @remarks |
---|
298 | The emitter initialises particles with a time-to-live (TTL), the number of seconds a particle |
---|
299 | will exist before being destroyed. This method sets a range for the TTL for all particles emitted; |
---|
300 | the ttl may be randomised between these 2 extremes or will vary some other way depending on the |
---|
301 | emitter. |
---|
302 | Note that affectors are able to modify the TTL of particles later. |
---|
303 | @par |
---|
304 | Also see the alternate version of this method which takes a single TTL in order to |
---|
305 | set a constant TTL for all particles. |
---|
306 | @param minTtl The minimum number of seconds each particle will live for. |
---|
307 | @param maxTtl The maximum number of seconds each particle will live for. |
---|
308 | */ |
---|
309 | virtual void setTimeToLive(Real minTtl, Real maxTtl); |
---|
310 | |
---|
311 | /** Sets the minimum time each particle will live for. */ |
---|
312 | virtual void setMinTimeToLive(Real min); |
---|
313 | /** Sets the maximum time each particle will live for. */ |
---|
314 | virtual void setMaxTimeToLive(Real max); |
---|
315 | |
---|
316 | /** Gets the time each particle will live for. */ |
---|
317 | virtual Real getTimeToLive(void) const; |
---|
318 | |
---|
319 | /** Gets the minimum time each particle will live for. */ |
---|
320 | virtual Real getMinTimeToLive(void) const; |
---|
321 | /** Gets the maximum time each particle will live for. */ |
---|
322 | virtual Real getMaxTimeToLive(void) const; |
---|
323 | |
---|
324 | /** Sets the initial colour of particles emitted. |
---|
325 | @remarks |
---|
326 | Particles have an initial colour on emission which the emitter sets. This method sets |
---|
327 | this colour. See the alternate version of this method which takes 2 colours in order to establish |
---|
328 | a range of colours to be assigned to particles. |
---|
329 | @param colour The colour which all particles will be given on emission. |
---|
330 | */ |
---|
331 | virtual void setColour(const ColourValue& colour); |
---|
332 | /** Sets the range of colours for emitted particles. |
---|
333 | @remarks |
---|
334 | Particles have an initial colour on emission which the emitter sets. This method sets |
---|
335 | the range of this colour. See the alternate version of this method which takes a single colour |
---|
336 | in order to set a constant colour for all particles. Emitters may choose to randomly assign |
---|
337 | a colour in this range, or may use some other method to vary the colour. |
---|
338 | @param colourStart The start of the colour range |
---|
339 | @param colourEnd The end of the colour range |
---|
340 | */ |
---|
341 | virtual void setColour(const ColourValue& colourStart, const ColourValue& colourEnd); |
---|
342 | /** Sets the minimum colour of particles to be emitted. */ |
---|
343 | virtual void setColourRangeStart(const ColourValue& colour); |
---|
344 | /** Sets the maximum colour of particles to be emitted. */ |
---|
345 | virtual void setColourRangeEnd(const ColourValue& colour); |
---|
346 | /** Gets the colour of particles to be emitted. */ |
---|
347 | virtual const ColourValue& getColour(void) const; |
---|
348 | /** Gets the minimum colour of particles to be emitted. */ |
---|
349 | virtual const ColourValue& getColourRangeStart(void) const; |
---|
350 | /** Gets the maximum colour of particles to be emitted. */ |
---|
351 | virtual const ColourValue& getColourRangeEnd(void) const; |
---|
352 | |
---|
353 | /** Gets the number of particles which this emitter would like to emit based on the time elapsed. |
---|
354 | @remarks |
---|
355 | For efficiency the emitter does not actually create new Particle instances (these are reused |
---|
356 | by the ParticleSystem as existing particles 'die'). The implementation for this method must |
---|
357 | return the number of particles the emitter would like to emit given the number of seconds which |
---|
358 | have elapsed (passed in as a parameter). |
---|
359 | @par |
---|
360 | Based on the return value from this method, the ParticleSystem class will call |
---|
361 | _initParticle once for each particle it chooses to allow to be emitted by this emitter. |
---|
362 | The emitter should not track these _initParticle calls, it should assume all emissions |
---|
363 | requested were made (even if they could not be because of particle quotas). |
---|
364 | */ |
---|
365 | virtual unsigned short _getEmissionCount(Real timeElapsed) = 0; |
---|
366 | |
---|
367 | /** Initialises a particle based on the emitter's approach and parameters. |
---|
368 | @remarks |
---|
369 | See the _getEmissionCount method for details of why there is a separation between |
---|
370 | 'requested' emissions and actual initialised particles. |
---|
371 | @param |
---|
372 | pParticle Pointer to a particle which must be initialised based on how this emitter |
---|
373 | starts particles. This is passed as a pointer rather than being created by the emitter so the |
---|
374 | ParticleSystem can reuse Particle instances, and can also set defaults itself. |
---|
375 | */ |
---|
376 | virtual void _initParticle(Particle* pParticle) { |
---|
377 | // Initialise size incase it's been altered |
---|
378 | pParticle->resetDimensions(); |
---|
379 | } |
---|
380 | |
---|
381 | |
---|
382 | /** Returns the name of the type of emitter. |
---|
383 | @remarks |
---|
384 | This property is useful for determining the type of emitter procedurally so another |
---|
385 | can be created. |
---|
386 | */ |
---|
387 | const String &getType(void) const { return mType; } |
---|
388 | |
---|
389 | /** Sets whether or not the emitter is enabled. |
---|
390 | @remarks |
---|
391 | You can turn an emitter off completely by setting this parameter to false. |
---|
392 | */ |
---|
393 | virtual void setEnabled(bool enabled); |
---|
394 | |
---|
395 | /** Gets the flag indicating if this emitter is enabled or not. */ |
---|
396 | virtual bool getEnabled(void) const; |
---|
397 | |
---|
398 | /** Sets the 'start time' of this emitter. |
---|
399 | @remarks |
---|
400 | By default an emitter starts straight away as soon as a ParticleSystem is first created, |
---|
401 | or also just after it is re-enabled. This parameter allows you to set a time delay so |
---|
402 | that the emitter does not 'kick in' until later. |
---|
403 | @param startTime The time in seconds from the creation or enabling of the emitter. |
---|
404 | */ |
---|
405 | virtual void setStartTime(Real startTime); |
---|
406 | /** Gets the start time of the emitter. */ |
---|
407 | virtual Real getStartTime(void) const; |
---|
408 | |
---|
409 | /** Sets the duration of the emitter. |
---|
410 | @remarks |
---|
411 | By default emitters run indefinitely (unless you manually disable them). By setting this |
---|
412 | parameter, you can make an emitter turn off on it's own after a set number of seconds. It |
---|
413 | will then remain disabled until either setEnabled(true) is called, or if the 'repeatAfter' parameter |
---|
414 | has been set it will also repeat after a number of seconds. |
---|
415 | @par |
---|
416 | Also see the alternative version of this method which allows you to set a min and max duration for |
---|
417 | a random variable duration. |
---|
418 | @param duration The duration in seconds. |
---|
419 | */ |
---|
420 | virtual void setDuration(Real duration); |
---|
421 | |
---|
422 | /** Gets the duration of the emitter from when it is created or re-enabled. */ |
---|
423 | virtual Real getDuration(void) const; |
---|
424 | |
---|
425 | /** Sets the range of random duration for this emitter. |
---|
426 | @remarks |
---|
427 | By default emitters run indefinitely (unless you manually disable them). By setting this |
---|
428 | parameter, you can make an emitter turn off on it's own after a random number of seconds. It |
---|
429 | will then remain disabled until either setEnabled(true) is called, or if the 'repeatAfter' parameter |
---|
430 | has been set it will also repeat after a number of seconds. |
---|
431 | @par |
---|
432 | Also see the alternative version of this method which allows you to set a constant duration. |
---|
433 | @param min The minimum duration in seconds. |
---|
434 | @param max The minimum duration in seconds. |
---|
435 | */ |
---|
436 | virtual void setDuration(Real min, Real max); |
---|
437 | /** Sets the minimum duration of this emitter in seconds (see setDuration for more details) */ |
---|
438 | virtual void setMinDuration(Real min); |
---|
439 | /** Sets the maximum duration of this emitter in seconds (see setDuration for more details) */ |
---|
440 | virtual void setMaxDuration(Real max); |
---|
441 | /** Gets the minimum duration of this emitter in seconds (see setDuration for more details) */ |
---|
442 | virtual Real getMinDuration(void) const; |
---|
443 | /** Gets the maximum duration of this emitter in seconds (see setDuration for more details) */ |
---|
444 | virtual Real getMaxDuration(void) const; |
---|
445 | |
---|
446 | /** Sets the time between repeats of the emitter. |
---|
447 | @remarks |
---|
448 | By default emitters run indefinitely (unless you manually disable them). However, if you manually |
---|
449 | disable the emitter (by calling setEnabled(false), or it's duration runs out, it will cease to emit |
---|
450 | @par |
---|
451 | Also see the alternative version of this method which allows you to set a min and max duration for |
---|
452 | a random variable duration. |
---|
453 | @param duration The duration in seconds. |
---|
454 | */ |
---|
455 | virtual void setRepeatDelay(Real duration); |
---|
456 | |
---|
457 | /** Gets the duration of the emitter from when it is created or re-enabled. */ |
---|
458 | virtual Real getRepeatDelay(void) const; |
---|
459 | |
---|
460 | /** Sets the range of random duration for this emitter. |
---|
461 | @remarks |
---|
462 | By default emitters run indefinitely (unless you manually disable them). By setting this |
---|
463 | parameter, you can make an emitter turn off on it's own after a random number of seconds. It |
---|
464 | will then remain disabled until either setEnabled(true) is called, or if the 'repeatAfter' parameter |
---|
465 | has been set it will also repeat after a number of seconds. |
---|
466 | @par |
---|
467 | Also see the alternative version of this method which allows you to set a constant duration. |
---|
468 | @param min The minimum duration in seconds. |
---|
469 | @param max The minimum duration in seconds. |
---|
470 | */ |
---|
471 | virtual void setRepeatDelay(Real min, Real max); |
---|
472 | /** Sets the minimum duration of this emitter in seconds (see setRepeatDelay for more details) */ |
---|
473 | virtual void setMinRepeatDelay(Real min); |
---|
474 | /** Sets the maximum duration of this emitter in seconds (see setRepeatDelay for more details) */ |
---|
475 | virtual void setMaxRepeatDelay(Real max); |
---|
476 | /** Gets the minimum duration of this emitter in seconds (see setRepeatDelay for more details) */ |
---|
477 | virtual Real getMinRepeatDelay(void) const; |
---|
478 | /** Gets the maximum duration of this emitter in seconds (see setRepeatDelay for more details) */ |
---|
479 | virtual Real getMaxRepeatDelay(void) const; |
---|
480 | |
---|
481 | /** Returns the name of the emitter */ |
---|
482 | const String &getName(void) const; |
---|
483 | |
---|
484 | /** Sets the name of the emitter */ |
---|
485 | virtual void setName(const String& newName); |
---|
486 | |
---|
487 | /** Returns the name of the emitter to be emitted */ |
---|
488 | const String &getEmittedEmitter(void) const; |
---|
489 | |
---|
490 | /** Sets the name of the emitter to be emitted*/ |
---|
491 | virtual void setEmittedEmitter(const String& emittedEmitter); |
---|
492 | |
---|
493 | /** Return ´true´ if the emitter is emitted by another emitter */ |
---|
494 | virtual bool isEmitted(void) const; |
---|
495 | |
---|
496 | /** Set the indication (true/false) to indicate that the emitter is emitted by another emitter */ |
---|
497 | virtual void setEmitted(bool emitted); |
---|
498 | |
---|
499 | |
---|
500 | }; |
---|
501 | |
---|
502 | } |
---|
503 | |
---|
504 | |
---|
505 | #endif |
---|
506 | |
---|