Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

OgreAreaEmitter.cpp

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 ) 2002 Tels <http://bloodgate.com> Based on OgrreBoxEmitter
00008 Also see acknowledgements in Readme.html
00009 
00010 This program is free software; you can redistribute it and/or modify it under
00011 the terms of the GNU Lesser General Public License as published by the Free Software
00012 Foundation; either version 2 of the License, or (at your option) any later
00013 version.
00014 
00015 This program is distributed in the hope that it will be useful, but WITHOUT
00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public License along with
00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
00022 http://www.gnu.org/copyleft/lesser.txt.
00023 -----------------------------------------------------------------------------
00024 */
00025 #include "OgreAreaEmitter.h"
00026 #include "OgreParticle.h"
00027 #include "OgreQuaternion.h"
00028 #include "OgreException.h"
00029 #include "OgreStringConverter.h"
00030 
00031 
00032 
00033 namespace Ogre {
00034 
00035     // Instatiate statics
00036     AreaEmitter::CmdWidth AreaEmitter::msWidthCmd;
00037     AreaEmitter::CmdHeight AreaEmitter::msHeightCmd;
00038     AreaEmitter::CmdDepth AreaEmitter::msDepthCmd;
00039 
00040     //-----------------------------------------------------------------------
00041     bool AreaEmitter::initDefaults(const String& t)
00042     {
00043         // called by the constructor as initDefaults("Type")
00044 
00045         // Defaults
00046         mDirection = Vector3::UNIT_Z;
00047         mUp = Vector3::UNIT_Z;
00048         setSize(100,100,100);
00049         mType = t;
00050 
00051         // Set up parameters
00052         if (createParamDictionary(mType + "Emitter"))
00053         {
00054 
00055             addBaseParameters();
00056             ParamDictionary* dict = getParamDictionary();
00057 
00058             // Custom params
00059             dict->addParameter(ParameterDef("width", 
00060                 "Width of the shape in world coordinates.",
00061                 PT_REAL),&msWidthCmd);
00062             dict->addParameter(ParameterDef("height", 
00063                 "Height of the shape in world coordinates.",
00064                 PT_REAL),&msHeightCmd);
00065             dict->addParameter(ParameterDef("depth", 
00066                 "Depth of the shape in world coordinates.",
00067                 PT_REAL),&msDepthCmd);
00068             return true;
00069 
00070         }
00071         return false;
00072     }
00073 
00074     //-----------------------------------------------------------------------
00075     unsigned short AreaEmitter::_getEmissionCount(Real timeElapsed)
00076     {
00077         // Use basic constant emission 
00078         return genConstantEmissionCount(timeElapsed);
00079     }
00080     //-----------------------------------------------------------------------
00081     void AreaEmitter::setDirection( const Vector3& direction )
00082     {
00083         ParticleEmitter::setDirection( direction );
00084 
00085         // Update the ranges
00086         genAreaAxes();
00087 
00088         
00089     }
00090     //-----------------------------------------------------------------------
00091     void AreaEmitter::setSize(const Vector3& size)
00092     {
00093         mSize = size;
00094         genAreaAxes();
00095     }
00096     //-----------------------------------------------------------------------
00097     void AreaEmitter::setSize(Real x, Real y, Real z)
00098     {
00099         mSize.x = x;
00100         mSize.y = y;
00101         mSize.z = z;
00102         genAreaAxes();
00103     }
00104     //-----------------------------------------------------------------------
00105     void AreaEmitter::setWidth(Real width)
00106     {
00107         mSize.x = width;
00108         genAreaAxes();
00109     }
00110     //-----------------------------------------------------------------------
00111     Real AreaEmitter::getWidth(void) const
00112     {
00113         return mSize.x;
00114     }
00115     //-----------------------------------------------------------------------
00116     void AreaEmitter::setHeight(Real height)
00117     {
00118         mSize.y = height;
00119         genAreaAxes();
00120     }
00121     //-----------------------------------------------------------------------
00122     Real AreaEmitter::getHeight(void) const
00123     {
00124         return mSize.y;
00125     }
00126     //-----------------------------------------------------------------------
00127     void AreaEmitter::setDepth(Real depth)
00128     {
00129         mSize.z = depth;
00130         genAreaAxes();
00131     }
00132     //-----------------------------------------------------------------------
00133     Real AreaEmitter::getDepth(void) const
00134     {
00135         return mSize.z;
00136     }
00137     //-----------------------------------------------------------------------
00138     void AreaEmitter::genAreaAxes(void)
00139     {
00140         Vector3 mLeft = mUp.crossProduct(mDirection);
00141 
00142         mXRange = mLeft * (mSize.x * 0.5f);
00143         mYRange = mUp * (mSize.y * 0.5f);
00144         mZRange = mDirection * (mSize.z * 0.5f);
00145     }
00146 
00147     //-----------------------------------------------------------------------
00148     // Command objects
00149     //-----------------------------------------------------------------------
00150     //-----------------------------------------------------------------------
00151     String AreaEmitter::CmdWidth::doGet(const void* target) const
00152     {
00153         return StringConverter::toString(
00154             static_cast<const AreaEmitter*>(target)->getWidth() );
00155     }
00156     void AreaEmitter::CmdWidth::doSet(void* target, const String& val)
00157     {
00158         static_cast<AreaEmitter*>(target)->setWidth(StringConverter::parseReal(val));
00159     }
00160     //-----------------------------------------------------------------------
00161     String AreaEmitter::CmdHeight::doGet(const void* target) const
00162     {
00163         return StringConverter::toString(
00164             static_cast<const AreaEmitter*>(target)->getHeight() );
00165     }
00166     void AreaEmitter::CmdHeight::doSet(void* target, const String& val)
00167     {
00168         static_cast<AreaEmitter*>(target)->setHeight(StringConverter::parseReal(val));
00169     }
00170     //-----------------------------------------------------------------------
00171     String AreaEmitter::CmdDepth::doGet(const void* target) const
00172     {
00173         return StringConverter::toString(
00174             static_cast<const AreaEmitter*>(target)->getDepth() );
00175     }
00176     void AreaEmitter::CmdDepth::doSet(void* target, const String& val)
00177     {
00178         static_cast<AreaEmitter*>(target)->setDepth(StringConverter::parseReal(val));
00179     }
00180 
00181 
00182 
00183 }
00184 
00185 

Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:14 2004