00001 00002 // SPARK particle engine // 00003 // Copyright (C) 2008-2009 - Julien Fryer - julienfryer@gmail.com // 00004 // // 00005 // This software is provided 'as-is', without any express or implied // 00006 // warranty. In no event will the authors be held liable for any damages // 00007 // arising from the use of this software. // 00008 // // 00009 // Permission is granted to anyone to use this software for any purpose, // 00010 // including commercial applications, and to alter it and redistribute it // 00011 // freely, subject to the following restrictions: // 00012 // // 00013 // 1. The origin of this software must not be misrepresented; you must not // 00014 // claim that you wrote the original software. If you use this software // 00015 // in a product, an acknowledgment in the product documentation would be // 00016 // appreciated but is not required. // 00017 // 2. Altered source versions must be plainly marked as such, and must not be // 00018 // misrepresented as being the original software. // 00019 // 3. This notice may not be removed or altered from any source distribution. // 00021 00022 00023 #ifndef H_SPK_STRAIGHEMITTER 00024 #define H_SPK_STRAIGHEMITTER 00025 00026 #include "Core/SPK_Emitter.h" 00027 #include "Core/SPK_Particle.h" 00028 00029 00030 namespace SPK 00031 { 00036 class SPK_PREFIX StraightEmitter : public Emitter 00037 { 00038 SPK_IMPLEMENT_REGISTERABLE(StraightEmitter) 00039 00040 public : 00041 00043 // Constructor // 00045 00050 StraightEmitter(const Vector3D& direction = Vector3D(0.0f,0.0f,-1.0f)); 00051 00057 static StraightEmitter* create(const Vector3D& direction = Vector3D(0.0f,0.0f,-1.0f)); 00058 00060 // Setters // 00062 00071 void setDirection(const Vector3D& direction); 00072 00074 // Getters // 00076 00081 const Vector3D& getDirection() const; 00082 00087 const Vector3D& getTransformedDirection() const; 00088 00089 protected : 00090 00091 virtual void innerUpdateTransform(); 00092 00093 private : 00094 00095 Vector3D direction; 00096 Vector3D tDirection; 00097 00098 virtual void generateVelocity(Particle& particle,float speed) const; 00099 }; 00100 00101 00102 inline StraightEmitter* StraightEmitter::create(const Vector3D& direction) 00103 { 00104 StraightEmitter* obj = new StraightEmitter(direction); 00105 registerObject(obj); 00106 return obj; 00107 } 00108 00109 inline const Vector3D& StraightEmitter::getDirection() const 00110 { 00111 return direction; 00112 } 00113 00114 inline const Vector3D& StraightEmitter::getTransformedDirection() const 00115 { 00116 return tDirection; 00117 } 00118 00119 inline void StraightEmitter::generateVelocity(Particle& particle,float speed) const 00120 { 00121 particle.velocity() = tDirection; 00122 particle.velocity() *= speed; 00123 } 00124 } 00125 00126 #endif