Main Page   Namespace List   Class Hierarchy   Alphabetical List   Data Structures   File List   Namespace Members   Data Fields   Globals  

ExCSDKParticuleSyteme.cpp

Go to the documentation of this file.
00001 #include "StdAfx.h"
00002 #include "excsdkparticulesyteme.h"
00003 
00004 ExCSDKParticuleSyteme::ExCSDKParticuleSyteme(void)
00005 {
00006         m_MaxLifeSpan   = 1000;
00007         m_MinLifeSpan   = 100;
00008         m_MaxSize               = 0.3f;
00009         m_MinSize               = 0.00f;        
00010         m_MaxWeight             = 10;
00011         m_MinWeight             = 1;
00012         m_MaxColorR             = 255;
00013         m_MinColorR             = 0;
00014         m_MaxColorG             = 255;
00015         m_MinColorG             = 0;
00016         m_MaxColorB             = 255;
00017         m_MinColorB             = 0;
00018         m_MaxBlending   = 255;
00019         m_MinBlending   = 200;  
00020         m_MaxVelocity.SetValue(0.0f,1.0f,0.0f);
00021         m_MinVelocity.SetValue(0.0f,1.0f,0.0f); 
00022         m_MaxAcceleration.SetValue(0.0f,0.0f,0.0f);
00023         m_MinAcceleration.SetValue(0.0f,0.0f,0.0f);
00024         m_MaxGravity.SetValue(0.0f,0.0f,0.0f);
00025         m_MinGravity.SetValue(0.0f,0.0f,0.0f);
00026     m_Type                              = PARTICULE_POINT;
00027         m_TimeLastParticule=0;
00028 
00029         m_MaxParticule  =10000;
00030         m_EmissionRate  =10;//in particule by seconde
00031         m_Pause=false;
00032         m_State=true;
00033         m_angle=5;
00034         m_rayon=3.0f;
00035         m_ParticuleSystemeName = new char[20];
00036         m_TypeEmmeteur=EMMETEUR_DISQUE;
00037 
00038         m_P1.SetValue(0.0f,0.0f,0.0f);
00039         m_P2.SetValue(10.0f,0.0f,0.0f);
00040 
00041 }
00042 
00043 ExCSDKParticuleSyteme::~ExCSDKParticuleSyteme(void)
00044 {
00045 }
00046 
00047 void ExCSDKParticuleSyteme::SetParticuleSystemeName(char * name)
00048 {
00049         m_ParticuleSystemeName=new char[strlen(name)];
00050         strcpy(m_ParticuleSystemeName,name);
00051 }
00052 
00053 void ExCSDKParticuleSyteme::SetParticuleType(int type)
00054 {
00055         m_Type=type;
00056         if(m_Type>3)m_Type=1;
00057 }
00058 
00059 void ExCSDKParticuleSyteme::SetParticuleTexture(char *texture)
00060 {
00061         LoadTexture(texture);
00062 }
00063 
00064 void ExCSDKParticuleSyteme::Draw(void)
00065 {
00066 /*      ExCRandomNumber  Randomnum;
00067         double                   a,c;
00068         unsigned int    i;
00069 
00070         glPushMatrix();
00071                 
00072                 ExCVec3D Position;
00073                 
00074                 switch(m_TypeEmmeteur)
00075                 {
00076                 case EMMETEUR_POINT     :
00077                         Position=m_Position+m_P1;
00078                         break;
00079 
00080                 case EMMETEUR_LIGNE :
00081                 case EMMETEUR_RECTANGLE :
00082                 case EMMETEUR_CUBE :
00083                         Position.SetValue(Randomnum.getFloat(m_P1.m_Vector[0],m_P2.m_Vector[0]),
00084                                                                 Randomnum.getFloat(m_P1.m_Vector[1],m_P2.m_Vector[1]),
00085                                                                 Randomnum.getFloat(m_P1.m_Vector[2],m_P2.m_Vector[2]));
00086                         Position=m_Position+Position;
00087                         break;
00088 
00089                 case EMMETEUR_CERCLE :
00090                         a=Cos[m_angle]*m_rayon;
00091                         c=Sin[m_angle]*m_rayon;
00092                         m_angle=Randomnum.getInt(0,360);
00093                         Position.SetValue(a,0.0f,c);
00094                         Position=m_Position+Position;
00095                         break;
00096 
00097                 case EMMETEUR_DISQUE :
00098                         a=Cos[m_angle]*(Randomnum.getFloat(0.0f,m_rayon));
00099                         c=Sin[m_angle]*(Randomnum.getFloat(0.0f,m_rayon));
00100                         m_angle++;
00101                         if(m_angle>360)m_angle=0;
00102                         Position.SetValue(a,0.0f,c);
00103                         Position=m_Position+Position;
00104                         break;
00105 
00106                 case EMMETEUR_SPIRAL :
00107                         a=Cos[m_angle]*m_rayon;
00108                         c=Sin[m_angle]*m_rayon;
00109                         m_angle+=m_vitesseangle;
00110                         if(m_angle>360)m_angle=0;
00111                         Position.SetValue(a,0.0f,c);
00112                         Position=m_Position+Position;
00113                         break;
00114                 }
00115 
00116                 time_t ltime;
00117                 time( &ltime );
00118                 
00119                 // create new particule
00120                 if(!m_Pause)
00121                 {
00122                         if(m_TimeLastParticule<ltime)
00123                         {
00124                                 ExCSDKParticule Particule;
00125                                 ExCVec3D Velocity,Acceleration,Gravity;
00126                                 Particule.SetParticuleTexture(m_Texture);
00127                                 Particule.SetParticuleType(m_Type);
00128                                 Particule.SetParticulePosition(Position);
00129                                 Particule.SetParticuleLife(Randomnum.getInt(m_MinLifeSpan,m_MaxLifeSpan));
00130                                 Particule.SetParticuleWeight(Randomnum.getInt(m_MinWeight,m_MaxWeight));
00131                                 Particule.SetParticuleColorB(Randomnum.getInt(m_MinColorB,m_MaxColorB));
00132                                 Particule.SetParticuleColorG(Randomnum.getInt(m_MinColorG,m_MaxColorG));
00133                                 Particule.SetParticuleColorR(Randomnum.getInt(m_MinColorR,m_MaxColorR));
00134                                 Particule.SetParticuleBlending(Randomnum.getInt(m_MinBlending,m_MaxBlending));
00135                                 Particule.SetParticuleMass(1.0f);
00136                                 //Particule.SetParticuleSize(Randomnum.getFloat (m_MinSize,m_MaxSize));
00137                                 Velocity.m_Vector[0]=Randomnum.getFloat(m_MaxVelocity.m_Vector[0],m_MinVelocity.m_Vector[0]);
00138                                 Velocity.m_Vector[1]=Randomnum.getFloat(m_MaxVelocity.m_Vector[1],m_MinVelocity.m_Vector[1]);
00139                                 Velocity.m_Vector[2]=Randomnum.getFloat(m_MaxVelocity.m_Vector[2],m_MinVelocity.m_Vector[2]);
00140                                 Particule.SetParticuleVelocity(Velocity);
00141                                 Acceleration.m_Vector[0]=Randomnum.getFloat(m_MaxAcceleration.m_Vector[0],m_MinAcceleration.m_Vector[0]);
00142                                 Acceleration.m_Vector[1]=Randomnum.getFloat(m_MaxAcceleration.m_Vector[1],m_MinAcceleration.m_Vector[1]);
00143                                 Acceleration.m_Vector[2]=Randomnum.getFloat(m_MaxAcceleration.m_Vector[2],m_MinAcceleration.m_Vector[2]);
00144                                 Particule.SetParticuleAcceleration(Acceleration);
00145                                 Gravity.m_Vector[0]=Randomnum.getFloat(m_MaxGravity.m_Vector[0],m_MinGravity.m_Vector[0]);
00146                                 Gravity.m_Vector[1]=Randomnum.getFloat(m_MaxGravity.m_Vector[1],m_MinGravity.m_Vector[1]);
00147                                 Gravity.m_Vector[2]=Randomnum.getFloat(m_MaxGravity.m_Vector[2],m_MinGravity.m_Vector[2]);
00148                                 Particule.SetParticuleGravity(Gravity);
00149                                 Particule.PrecalculeParticuleTrajectory(0,Particule.GetParticuleLife());
00150                                 m_VecParticule.push_back(Particule);
00151                         }
00152                 }
00153         glPopMatrix();
00154         
00155         if(m_VecParticule.size()>0)
00156         {
00157                 
00158                 for(i=0,m_ItVecParticule=m_VecParticule.begin();i<m_VecParticule.size();m_ItVecParticule++,i++)
00159                 {
00160                         m_ItVecParticule->Draw();
00161                         if(!m_Pause)m_ItVecParticule->DecreaseLifeSpan();
00162                         if(!m_State)m_ItVecParticule->DecreaseLifeSpan();
00163                         if(m_ItVecParticule->GetParticuleLife()<0)
00164                         {
00165                                 m_VecParticule.erase(m_ItVecParticule);
00166                         }
00167                 }
00168         }*/
00169 }
00170 
00171 void ExCSDKParticuleSyteme::Start(void)
00172 {
00173         m_State=true;
00174         m_Pause=false;
00175 }
00176 
00177 void ExCSDKParticuleSyteme::Pause(void)
00178 {
00179         m_Pause=true;
00180 }
00181 
00182 void ExCSDKParticuleSyteme::Stop(void)
00183 {
00184         m_Pause=true;
00185         m_State=false;
00186 }
00187 
00188 bool ExCSDKParticuleSyteme::LoadTexture(const char * name)
00189 {
00190         return true;
00191 }
00192 bool ExCSDKParticuleSyteme::LoadParticuleSysteme(const char * FileName)
00193 {
00194 /*      SetParticuleTexture("star");
00195         m_Type=PARTICULE_TEXTURE;
00196 
00197         int i=0;
00198         char                            ch;
00199         int                                     FileSize;
00200         FILE                            *MyFile;
00201         bool                            endfile=false;
00202         std::string                     StBuffer;
00203         char                            buffer[255],bufferbis[255];
00204         std::vector<float>      vecvalue;
00205 
00206         
00207         sprintf(buffer,"../Data/ParticuleSystem/%s",FileName);
00208         m_ParticuleSystemeName=new char[strlen(FileName)];
00209         sprintf(m_ParticuleSystemeName,"%s",FileName);
00210     
00211         MyFile=fopen (buffer,"r");
00212         if(!MyFile)
00213         {
00214                 sprintf(bufferbis,"Particule syteme File not found:%s",buffer);
00215                 AfxMessageBox(bufferbis);
00216                 return false;
00217         }else
00218         {
00219                 sprintf(buffer,"Loading Particule systeme file :%s",FileName);
00220                 AfxMessageBox(buffer);
00221         
00222                 fseek(MyFile,0,SEEK_END);
00223                 FileSize=ftell(MyFile);
00224                 sprintf(bufferbis,"Size:%d",FileSize);
00225                 AfxMessageBox(bufferbis);
00226                 //Start of file
00227                 fseek(MyFile,0,SEEK_SET);
00228                 do
00229                 {
00230                         fread(&ch,sizeof(char),1,MyFile);
00231                 }while(ch!='#');
00232                 //reading file type;
00233                 do
00234                 {
00235                         fread(&ch,sizeof(char),1,MyFile);
00236                         StBuffer=StBuffer+ch;   
00237                 }while(ch!='#');
00238                 if(strcmp(StBuffer.data(),"particulesystem#")==0)
00239                 {
00240                         for(i=0;i<44;i++)
00241                         {
00242                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00243                                 do
00244                                 {
00245                                                 fread(&ch,sizeof(char),1,MyFile);
00246                                                 StBuffer=StBuffer+ch;
00247                                 }while(ch!='#');
00248                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00249                                 do
00250                                 {
00251                                                 fread(&ch,sizeof(char),1,MyFile);
00252                                                 StBuffer=StBuffer+ch;
00253                                 }while(ch!='#');
00254                                 
00255                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00256                                 
00257                                 try
00258                                 {
00259                                         vecvalue.push_back(atof(StBuffer.data()));
00260                                 }catch(...)
00261                                 {
00262                                         vecvalue.push_back(0);
00263                                 }
00264                         }
00265                         
00266                         
00267                         //read texture for particule
00268                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00269                         do
00270                         {
00271                                 fread(&ch,sizeof(char),1,MyFile);
00272                                 StBuffer=StBuffer+ch;
00273                         }while(ch!='#');
00274 
00275                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00276                         do
00277                         {
00278                                 fread(&ch,sizeof(char),1,MyFile);
00279                                 StBuffer=StBuffer+ch;
00280                         }while(ch!='#');
00281                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00282                         
00283                         SetParticuleTexture((char *)StBuffer.data());
00284                         //-----------------------------------
00285                         m_EmissionRate  =vecvalue.at(0);
00286                         m_MaxParticule  =vecvalue.at(1);
00287                         m_TypeEmmeteur=vecvalue.at(2);
00288                         m_P1.SetValue(vecvalue.at(3),vecvalue.at(4),vecvalue.at(5));
00289                         m_P2.SetValue(vecvalue.at(6),vecvalue.at(7),vecvalue.at(8));
00290                         m_rayon=vecvalue.at(9);
00291                         m_vitesseangle=vecvalue.at(10);
00292                         m_MaxLifeSpan   = vecvalue.at(11);
00293                         m_MinLifeSpan   = vecvalue.at(12);
00294                         m_MaxSize               = vecvalue.at(13);
00295                         m_MinSize               = vecvalue.at(14);      
00296                         m_MaxWeight             = vecvalue.at(15);
00297                         m_MinWeight             = vecvalue.at(16);
00298                         m_MaxColorR             = vecvalue.at(17);
00299                         m_MinColorR             = vecvalue.at(18);
00300                         m_MaxColorG             = vecvalue.at(19);
00301                         m_MinColorG             = vecvalue.at(20);
00302                         m_MaxColorB             = vecvalue.at(21);
00303                         m_MinColorB             = vecvalue.at(22);
00304                         m_MaxBlending   = vecvalue.at(23);
00305                         m_MinBlending   = vecvalue.at(24);      
00306                         m_MaxVelocity.SetValue(vecvalue.at(25),vecvalue.at(26),vecvalue.at(27));
00307                         m_MinVelocity.SetValue(vecvalue.at(28),vecvalue.at(29),vecvalue.at(30));        
00308                         m_MaxAcceleration.SetValue(vecvalue.at(31),vecvalue.at(32),vecvalue.at(33));
00309                         m_MinAcceleration.SetValue(vecvalue.at(34),vecvalue.at(35),vecvalue.at(36));
00310                         m_MaxGravity.SetValue(vecvalue.at(37),vecvalue.at(38),vecvalue.at(39));
00311                         m_MinGravity.SetValue(vecvalue.at(40),vecvalue.at(41),vecvalue.at(42));
00312                         
00313                         m_Type                          = vecvalue.at(43);
00314                         
00315                         return true;
00316                 }else
00317                 {
00318                         sprintf(buffer,"%s is not a valide particule syteme file",FileName);
00319                         AfxMessageBox(buffer);
00320                         return false;
00321                 }
00322                 fclose(MyFile);
00323         }*/
00324 return false;
00325 }

Generated on Tue Dec 10 18:20:05 2002 for ExNihilo by doxygen1.3-rc1