00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00021
00022
00023 #ifndef H_SPK_COLLISION
00024 #define H_SPK_COLLISION
00025
00026 #include "Core/SPK_Modifier.h"
00027 #include "Core/SPK_Particle.h"
00028
00029 namespace SPK
00030 {
00058 class SPK_PREFIX Collision : public Modifier
00059 {
00060 SPK_IMPLEMENT_REGISTERABLE(Collision)
00061
00062 public :
00063
00065
00067
00073 Collision(float scale = 1.0f,float elasticity = 1.0f);
00074
00081 static Collision* create(float scale = 1.0f,float elasticity = 1.0f);
00082
00084
00086
00095 void setScale(float scale);
00096
00105 void setElasticity(float elasticity);
00106
00108
00110
00115 float getElasticity() const;
00116
00121 float getScale() const;
00122
00123 private :
00124
00125 float elasticity;
00126 float scale;
00127
00128 virtual void modify(Particle& particle,float deltaTime) const;
00129
00130 static void getMinMax(const Vector3D& v0,const Vector3D& v1,Vector3D& min,Vector3D& max);
00131 static bool checkBoundingRect(const Vector3D& min1,const Vector3D& max1,const Vector3D& min2,const Vector3D& max2);
00132 };
00133
00134
00135 inline Collision* Collision::create(float scale,float elasticity)
00136 {
00137 Collision* obj = new Collision(scale,elasticity);
00138 registerObject(obj);
00139 return obj;
00140 }
00141
00142 inline void Collision::setElasticity(float elasticity)
00143 {
00144 if (elasticity >= 0.0f)
00145 this->elasticity = elasticity;
00146 }
00147
00148 inline void Collision::setScale(float scale)
00149 {
00150 this->scale = scale;
00151 }
00152
00153 inline float Collision::getElasticity() const
00154 {
00155 return elasticity;
00156 }
00157
00158 inline float Collision::getScale() const
00159 {
00160 return scale;
00161 }
00162 }
00163
00164 #endif
00165