<html> <head> <title>OgreAreaEmitter.cpp Source File - OGRE Documentation</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link type="text/css" rel="stylesheet" href="style.css"> </head> <body> <!-- Generated by Doxygen 1.2.16 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="namespacemembers.html">Namespace Members</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>OgreAreaEmitter.cpp</h1><a href="OgreAreaEmitter_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">/*</font> 00002 <font class="comment">-----------------------------------------------------------------------------</font> 00003 <font class="comment">This source file is part of OGRE</font> 00004 <font class="comment"> (Object-oriented Graphics Rendering Engine)</font> 00005 <font class="comment">For the latest info, see http://www.ogre3d.org/</font> 00006 <font class="comment"></font> 00007 <font class="comment">Copyright ) 2002 Tels <http://bloodgate.com> Based on OgrreBoxEmitter</font> 00008 <font class="comment">Also see acknowledgements in Readme.html</font> 00009 <font class="comment"></font> 00010 <font class="comment">This program is free software; you can redistribute it and/or modify it under</font> 00011 <font class="comment">the terms of the GNU Lesser General Public License as published by the Free Software</font> 00012 <font class="comment">Foundation; either version 2 of the License, or (at your option) any later</font> 00013 <font class="comment">version.</font> 00014 <font class="comment"></font> 00015 <font class="comment">This program is distributed in the hope that it will be useful, but WITHOUT</font> 00016 <font class="comment">ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</font> 00017 <font class="comment">FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</font> 00018 <font class="comment"></font> 00019 <font class="comment">You should have received a copy of the GNU Lesser General Public License along with</font> 00020 <font class="comment">this program; if not, write to the Free Software Foundation, Inc., 59 Temple</font> 00021 <font class="comment">Place - Suite 330, Boston, MA 02111-1307, USA, or go to</font> 00022 <font class="comment">http://www.gnu.org/copyleft/lesser.txt.</font> 00023 <font class="comment">-----------------------------------------------------------------------------</font> 00024 <font class="comment">*/</font> 00025 <font class="preprocessor">#include "<a class="code" href="OgreAreaEmitter_8h.html">OgreAreaEmitter.h</a>"</font> 00026 <font class="preprocessor">#include "<a class="code" href="OgreParticle_8h.html">OgreParticle.h</a>"</font> 00027 <font class="preprocessor">#include "<a class="code" href="OgreQuaternion_8h.html">OgreQuaternion.h</a>"</font> 00028 <font class="preprocessor">#include "<a class="code" href="OgreException_8h.html">OgreException.h</a>"</font> 00029 <font class="preprocessor">#include "<a class="code" href="OgreStringConverter_8h.html">OgreStringConverter.h</a>"</font> 00030 00031 00032 00033 <font class="keyword">namespace </font>Ogre { 00034 00035 <font class="comment">// Instatiate statics</font> <a name="l00036"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterq2">00036</a> <a class="code" href="classOgre_1_1AreaEmitter_1_1CmdWidth.html">AreaEmitter::CmdWidth</a> AreaEmitter::msWidthCmd; <a name="l00037"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterq3">00037</a> <a class="code" href="classOgre_1_1AreaEmitter_1_1CmdHeight.html">AreaEmitter::CmdHeight</a> AreaEmitter::msHeightCmd; <a name="l00038"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterq4">00038</a> <a class="code" href="classOgre_1_1AreaEmitter_1_1CmdDepth.html">AreaEmitter::CmdDepth</a> AreaEmitter::msDepthCmd; 00039 00040 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00041"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterb1">00041</a> <font class="keywordtype">void</font> AreaEmitter::initDefaults(<font class="keyword">const</font> <a class="code" href="classOgre_1_1String.html">String</a>& t) 00042 { 00043 <font class="comment">// called by the constructor as initDefaults("Type")</font> 00044 00045 <font class="comment">// Defaults</font> 00046 <a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmittern9">mDirection</a> = Vector3::UNIT_Z; 00047 <a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmittern10">mUp</a> = Vector3::UNIT_Z; 00048 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera9">setSize</a>(100,100,100); 00049 <a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmittern8">mType</a> = t; 00050 00051 <font class="comment">// Set up parameters</font> 00052 <font class="keywordflow">if</font> (<a class="code" href="classOgre_1_1StringInterface.html#Ogre_1_1TTYGuiElementb10">createParamDictionary</a>(<a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmittern8">mType</a> + <font class="stringliteral">"Emitter"</font>)) 00053 { 00054 00055 <a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmitterb7">addBaseParameters</a>(); 00056 <a class="code" href="classOgre_1_1ParamDictionary.html">ParamDictionary</a>* dict = <a class="code" href="classOgre_1_1StringInterface.html#Ogre_1_1TTYGuiElementa79">getParamDictionary</a>(); 00057 00058 <font class="comment">// Custom params</font> 00059 dict-><a class="code" href="classOgre_1_1ParamDictionary.html#Ogre_1_1ParamDictionarya1">addParameter</a>(<a class="code" href="classOgre_1_1ParameterDef.html">ParameterDef</a>(<font class="stringliteral">"width"</font>, 00060 <font class="stringliteral">"Width of the box in world coordinates."</font>, 00061 <a class="code" href="namespaceOgre.html#a646a423">PT_REAL</a>),&<a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterq2">msWidthCmd</a>); 00062 dict-><a class="code" href="classOgre_1_1ParamDictionary.html#Ogre_1_1ParamDictionarya1">addParameter</a>(<a class="code" href="classOgre_1_1ParameterDef.html">ParameterDef</a>(<font class="stringliteral">"height"</font>, 00063 <font class="stringliteral">"Height of the box in world coordinates."</font>, 00064 <a class="code" href="namespaceOgre.html#a646a423">PT_REAL</a>),&<a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterq3">msHeightCmd</a>); 00065 dict-><a class="code" href="classOgre_1_1ParamDictionary.html#Ogre_1_1ParamDictionarya1">addParameter</a>(<a class="code" href="classOgre_1_1ParameterDef.html">ParameterDef</a>(<font class="stringliteral">"depth"</font>, 00066 <font class="stringliteral">"Depth of the box in world coordinates."</font>, 00067 <a class="code" href="namespaceOgre.html#a646a423">PT_REAL</a>),&<a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterq4">msDepthCmd</a>); 00068 00069 } 00070 } 00071 00072 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00073"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera7">00073</a> <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> AreaEmitter::_getEmissionCount(<a class="code" href="namespaceOgre.html#a349">Real</a> timeElapsed) 00074 { 00075 <font class="comment">// Use basic constant emission </font> 00076 <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmitterb6">genConstantEmissionCount</a>(timeElapsed); 00077 } 00078 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00079"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera8">00079</a> <font class="keywordtype">void</font> AreaEmitter::setDirection( <font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>& direction ) 00080 { 00081 ParticleEmitter::setDirection( direction ); 00082 00083 <font class="comment">// Update the ranges</font> 00084 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterb0">genAreaAxes</a>(); 00085 00086 00087 } 00088 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00089"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera9">00089</a> <font class="keywordtype">void</font> AreaEmitter::setSize(<font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>& size) 00090 { 00091 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a> = size; 00092 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterb0">genAreaAxes</a>(); 00093 } 00094 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00095"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera10">00095</a> <font class="keywordtype">void</font> AreaEmitter::setSize(<a class="code" href="namespaceOgre.html#a349">Real</a> x, <a class="code" href="namespaceOgre.html#a349">Real</a> y, <a class="code" href="namespaceOgre.html#a349">Real</a> z) 00096 { 00097 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> = x; 00098 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> = y; 00099 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> = z; 00100 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterb0">genAreaAxes</a>(); 00101 } 00102 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00103"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera11">00103</a> <font class="keywordtype">void</font> AreaEmitter::setWidth(<a class="code" href="namespaceOgre.html#a349">Real</a> width) 00104 { 00105 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> = width; 00106 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterb0">genAreaAxes</a>(); 00107 } 00108 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00109"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera12">00109</a> <a class="code" href="namespaceOgre.html#a349">Real</a> AreaEmitter::getWidth(<font class="keywordtype">void</font>)<font class="keyword"> const</font> 00110 <font class="keyword"> </font>{ 00111 <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a>; 00112 } 00113 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00114"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera13">00114</a> <font class="keywordtype">void</font> AreaEmitter::setHeight(<a class="code" href="namespaceOgre.html#a349">Real</a> height) 00115 { 00116 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> = height; 00117 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterb0">genAreaAxes</a>(); 00118 } 00119 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00120"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera14">00120</a> <a class="code" href="namespaceOgre.html#a349">Real</a> AreaEmitter::getHeight(<font class="keywordtype">void</font>)<font class="keyword"> const</font> 00121 <font class="keyword"> </font>{ 00122 <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a>; 00123 } 00124 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00125"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera15">00125</a> <font class="keywordtype">void</font> AreaEmitter::setDepth(<a class="code" href="namespaceOgre.html#a349">Real</a> depth) 00126 { 00127 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> = depth; 00128 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterb0">genAreaAxes</a>(); 00129 } 00130 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00131"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera16">00131</a> <a class="code" href="namespaceOgre.html#a349">Real</a> AreaEmitter::getDepth(<font class="keywordtype">void</font>)<font class="keyword"> const</font> 00132 <font class="keyword"> </font>{ 00133 <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a>; 00134 } 00135 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00136"></a><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmitterb0">00136</a> <font class="keywordtype">void</font> AreaEmitter::genAreaAxes(<font class="keywordtype">void</font>) 00137 { 00138 <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> mLeft = <a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmittern10">mUp</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3a25">crossProduct</a>(<a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmittern9">mDirection</a>); 00139 00140 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern3">mXRange</a> = mLeft * (<a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> * 0.5f); 00141 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern4">mYRange</a> = <a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmittern10">mUp</a> * (<a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> * 0.5f); 00142 <a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern5">mZRange</a> = <a class="code" href="classOgre_1_1ParticleEmitter.html#Ogre_1_1RingEmittern9">mDirection</a> * (<a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittern2">mSize</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> * 0.5f); 00143 } 00144 00145 <font class="comment">//-----------------------------------------------------------------------</font> 00146 <font class="comment">// Command objects</font> 00147 <font class="comment">//-----------------------------------------------------------------------</font> 00148 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00149"></a><a class="code" href="classOgre_1_1AreaEmitter_1_1CmdWidth.html#Ogre_1_1AreaEmitter_1_1CmdWidtha0">00149</a> <a class="code" href="classOgre_1_1String.html">String</a> AreaEmitter::CmdWidth::doGet(<font class="keyword">const</font> <font class="keywordtype">void</font>* target)<font class="keyword"> const</font> 00150 <font class="keyword"> </font>{ 00151 <font class="keywordflow">return</font> StringConverter::toString( 00152 static_cast<const AreaEmitter*>(target)-><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera12">getWidth</a>() ); 00153 } <a name="l00154"></a><a class="code" href="classOgre_1_1AreaEmitter_1_1CmdWidth.html#Ogre_1_1AreaEmitter_1_1CmdWidtha1">00154</a> <font class="keywordtype">void</font> AreaEmitter::CmdWidth::doSet(<font class="keywordtype">void</font>* target, <font class="keyword">const</font> <a class="code" href="classOgre_1_1String.html">String</a>& val) 00155 { 00156 static_cast<AreaEmitter*>(target)->setWidth(StringConverter::parseReal(val)); 00157 } 00158 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00159"></a><a class="code" href="classOgre_1_1AreaEmitter_1_1CmdHeight.html#Ogre_1_1AreaEmitter_1_1CmdHeighta0">00159</a> <a class="code" href="classOgre_1_1String.html">String</a> AreaEmitter::CmdHeight::doGet(<font class="keyword">const</font> <font class="keywordtype">void</font>* target)<font class="keyword"> const</font> 00160 <font class="keyword"> </font>{ 00161 <font class="keywordflow">return</font> StringConverter::toString( 00162 static_cast<const AreaEmitter*>(target)-><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera14">getHeight</a>() ); 00163 } <a name="l00164"></a><a class="code" href="classOgre_1_1AreaEmitter_1_1CmdHeight.html#Ogre_1_1AreaEmitter_1_1CmdHeighta1">00164</a> <font class="keywordtype">void</font> AreaEmitter::CmdHeight::doSet(<font class="keywordtype">void</font>* target, <font class="keyword">const</font> <a class="code" href="classOgre_1_1String.html">String</a>& val) 00165 { 00166 static_cast<AreaEmitter*>(target)->setHeight(StringConverter::parseReal(val)); 00167 } 00168 <font class="comment">//-----------------------------------------------------------------------</font> <a name="l00169"></a><a class="code" href="classOgre_1_1AreaEmitter_1_1CmdDepth.html#Ogre_1_1AreaEmitter_1_1CmdDeptha0">00169</a> <a class="code" href="classOgre_1_1String.html">String</a> AreaEmitter::CmdDepth::doGet(<font class="keyword">const</font> <font class="keywordtype">void</font>* target)<font class="keyword"> const</font> 00170 <font class="keyword"> </font>{ 00171 <font class="keywordflow">return</font> StringConverter::toString( 00172 static_cast<const AreaEmitter*>(target)-><a class="code" href="classOgre_1_1AreaEmitter.html#Ogre_1_1RingEmittera16">getDepth</a>() ); 00173 } <a name="l00174"></a><a class="code" href="classOgre_1_1AreaEmitter_1_1CmdDepth.html#Ogre_1_1AreaEmitter_1_1CmdDeptha1">00174</a> <font class="keywordtype">void</font> AreaEmitter::CmdDepth::doSet(<font class="keywordtype">void</font>* target, <font class="keyword">const</font> <a class="code" href="classOgre_1_1String.html">String</a>& val) 00175 { 00176 static_cast<AreaEmitter*>(target)->setDepth(StringConverter::parseReal(val)); 00177 } 00178 00179 00180 00181 } 00182 00183 </pre></div><p> Copyright © 2002-2003 by The OGRE Team<br /> Last modified Wed Jan 21 00:10:02 2004 </p> </body> </html>