OgreParticleEmitter.h
Go to the documentation of this file.

    00001 /*
    00002 -----------------------------------------------------------------------------
    00003 This source file is part of OGRE
    00004 (Object-oriented Graphics Rendering Engine)
    00005 For the latest info, see http://www.ogre3d.org/
    00006
    00007 Copyright (c) 2000-2012 Torus Knot Software Ltd
    00008
    00009 Permission is hereby granted, free of charge, to any person obtaining a copy
    00010 of this software and associated documentation files (the "Software"), to deal
    00011 in the Software without restriction, including without limitation the rights
    00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    00013 copies of the Software, and to permit persons to whom the Software is
    00014 furnished to do so, subject to the following conditions:
    00015
    00016 The above copyright notice and this permission notice shall be included in
    00017 all copies or substantial portions of the Software.
    00018
    00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    00025 THE SOFTWARE.
    00026 -----------------------------------------------------------------------------
    00027 */
    00028 #ifndef __ParticleEmitter_H__
    00029 #define __ParticleEmitter_H__
    00030
    00031 #include "OgrePrerequisites.h"
    00032 #include "OgreString.h"
    00033 #include "OgreVector3.h"
    00034 #include "OgreColourValue.h"
    00035 #include "OgreStringInterface.h"
    00036 #include "OgreParticleEmitterCommands.h"
    00037 #include "OgreParticle.h"
    00038
    00039
    00040 namespace Ogre {
    00041
    00042
    00071     class _OgreExport ParticleEmitter : public StringInterface, public Particle
    00072     {
    00073     protected:
    00074
    00075         // Command object for setting / getting parameters
    00076         static EmitterCommands::CmdAngle msAngleCmd;
    00077         static EmitterCommands::CmdColour msColourCmd;
    00078         static EmitterCommands::CmdColourRangeStart msColourRangeStartCmd;
    00079         static EmitterCommands::CmdColourRangeEnd msColourRangeEndCmd;
    00080         static EmitterCommands::CmdDirection msDirectionCmd;
    00081         static EmitterCommands::CmdUp msUpCmd;
    00082         static EmitterCommands::CmdEmissionRate msEmissionRateCmd;
    00083         static EmitterCommands::CmdMaxTTL msMaxTTLCmd;
    00084         static EmitterCommands::CmdMaxVelocity msMaxVelocityCmd;
    00085         static EmitterCommands::CmdMinTTL msMinTTLCmd;
    00086         static EmitterCommands::CmdMinVelocity msMinVelocityCmd;
    00087         static EmitterCommands::CmdPosition msPositionCmd;
    00088         static EmitterCommands::CmdTTL msTTLCmd;
    00089         static EmitterCommands::CmdVelocity msVelocityCmd;
    00090         static EmitterCommands::CmdDuration msDurationCmd;
    00091         static EmitterCommands::CmdMinDuration msMinDurationCmd;
    00092         static EmitterCommands::CmdMaxDuration msMaxDurationCmd;
    00093         static EmitterCommands::CmdRepeatDelay msRepeatDelayCmd;
    00094         static EmitterCommands::CmdMinRepeatDelay msMinRepeatDelayCmd;
    00095         static EmitterCommands::CmdMaxRepeatDelay msMaxRepeatDelayCmd;
    00096         static EmitterCommands::CmdName msNameCmd;
    00097         static EmitterCommands::CmdEmittedEmitter msEmittedEmitterCmd;
    00098
    00099
    00101         ParticleSystem* mParent;
    00103         Vector3 mPosition;
    00105         Real mEmissionRate;
    00107         String mType;
    00109         Vector3 mDirection;
    00110         // Notional up vector, used to speed up generation of variant directions, and also to orient some emitters.
    00111         Vector3 mUp;
    00113         Radian mAngle;
    00115         Real mMinSpeed;
    00117         Real mMaxSpeed;
    00119         Real mMinTTL;
    00121         Real mMaxTTL;
    00123         ColourValue mColourRangeStart;
    00125         ColourValue mColourRangeEnd;
    00126
    00128         bool mEnabled;
    00129
    00131         Real mStartTime;
    00133         Real mDurationMin;
    00135         Real mDurationMax;
    00137         Real mDurationRemain;
    00138
    00140         Real mRepeatDelayMin;
    00141         Real mRepeatDelayMax;
    00143         Real mRepeatDelayRemain;
    00144
    00145         // Fractions of particles wanted to be emitted last time
    00146         Real mRemainder;
    00147
    00149         String mName;
    00150
    00152         String mEmittedEmitter;
    00153
    00154         // If 'true', this emitter is emitted by another emitter.
    00155         // NB. That doesn't imply that the emitter itself emits other emitters (that could or could not be the case)
    00156         bool mEmitted;
    00157
    00158         // NB Method below here are to help out people implementing emitters by providing the
    00159         // most commonly used approaches as piecemeal methods
    00160
    00164         virtual void genEmissionDirection(Vector3& destVector);
    00165
    00170         virtual void genEmissionVelocity(Vector3& destVector);
    00171
    00173         virtual Real genEmissionTTL(void);
    00174
    00176         virtual void genEmissionColour(ColourValue& destColour);
    00177
    00179         virtual unsigned short genConstantEmissionCount(Real timeElapsed);
    00180
    00189         void addBaseParameters(void);
    00190
    00192         void initDurationRepeat(void);
    00193
    00194
    00195     public:
    00196         ParticleEmitter(ParticleSystem* psys);
    00198         virtual ~ParticleEmitter();
    00199
    00201         virtual void setPosition(const Vector3& pos);
    00202
    00204         virtual const Vector3& getPosition(void) const;
    00205
    00217         virtual void setDirection(const Vector3& direction);
    00218
    00220         virtual const Vector3& getDirection(void) const;
    00221
    00230         virtual void setUp(const Vector3& up);
    00231
    00233         virtual const Vector3& getUp(void) const;
    00234
    00245         virtual void setAngle(const Radian& angle);
    00246
    00248         virtual const Radian& getAngle(void) const;
    00249
    00257         virtual void setParticleVelocity(Real speed);
    00258
    00259
    00269         virtual void setParticleVelocity(Real min, Real max);
    00271         virtual void setMinParticleVelocity(Real min);
    00273         virtual void setMaxParticleVelocity(Real max);
    00274
    00276         virtual Real getParticleVelocity(void) const;
    00277
    00279         virtual Real getMinParticleVelocity(void) const;
    00280
    00282         virtual Real getMaxParticleVelocity(void) const;
    00283
    00296         virtual void setEmissionRate(Real particlesPerSecond);
    00297
    00299         virtual Real getEmissionRate(void) const;
    00300
    00311         virtual void setTimeToLive(Real ttl);
    00325         virtual void setTimeToLive(Real minTtl, Real maxTtl);
    00326
    00328         virtual void setMinTimeToLive(Real min);
    00330         virtual void setMaxTimeToLive(Real max);
    00331
    00333         virtual Real getTimeToLive(void) const;
    00334
    00336         virtual Real getMinTimeToLive(void) const;
    00338         virtual Real getMaxTimeToLive(void) const;
    00339
    00347         virtual void setColour(const ColourValue& colour);
    00357         virtual void setColour(const ColourValue& colourStart, const ColourValue& colourEnd);
    00359         virtual void setColourRangeStart(const ColourValue& colour);
    00361         virtual void setColourRangeEnd(const ColourValue& colour);
    00363         virtual const ColourValue& getColour(void) const;
    00365         virtual const ColourValue& getColourRangeStart(void) const;
    00367         virtual const ColourValue& getColourRangeEnd(void) const;
    00368
    00381         virtual unsigned short _getEmissionCount(Real timeElapsed) = 0;
    00382
    00392         virtual void _initParticle(Particle* pParticle) {
    00393             // Initialise size in case it's been altered
    00394             pParticle->resetDimensions();
    00395         }
    00396
    00397
    00403         const String &getType(void) const { return mType; }
    00404
    00409         virtual void setEnabled(bool enabled);
    00410
    00412         virtual bool getEnabled(void) const;
    00413
    00421         virtual void setStartTime(Real startTime);
    00423         virtual Real getStartTime(void) const;
    00424
    00436         virtual void setDuration(Real duration);
    00437
    00439         virtual Real getDuration(void) const;
    00440
    00452         virtual void setDuration(Real min, Real max);
    00454         virtual void setMinDuration(Real min);
    00456         virtual void setMaxDuration(Real max);
    00458         virtual Real getMinDuration(void) const;
    00460         virtual Real getMaxDuration(void) const;
    00461
    00471         virtual void setRepeatDelay(Real duration);
    00472
    00474         virtual Real getRepeatDelay(void) const;
    00475
    00487         virtual void setRepeatDelay(Real min, Real max);
    00489         virtual void setMinRepeatDelay(Real min);
    00491         virtual void setMaxRepeatDelay(Real max);
    00493         virtual Real getMinRepeatDelay(void) const;
    00495         virtual Real getMaxRepeatDelay(void) const;
    00496
    00498         const String &getName(void) const;
    00499
    00501         virtual void setName(const String& newName);
    00502
    00504         const String &getEmittedEmitter(void) const;
    00505
    00507         virtual void setEmittedEmitter(const String& emittedEmitter);
    00508
    00510         virtual bool isEmitted(void) const;
    00511
    00513         virtual void setEmitted(bool emitted);
    00514
    00515
    00516     };
    00520 }
    00521
    00522
    00523 #endif
    00524

Copyright © 2012 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Sun Sep 2 2012 07:27:22