Page principale   Liste des namespaces   Hiérarchie des classes   Liste par ordre alphabétique   Liste des composants   Liste des fichiers   Composants   Déclarations  

ExCInterface.cpp

Aller à la documentation de ce fichier.
00001 /*
00002  * ExNihilo 3D Engine
00003  * 
00004  *  This program is free software; you can redistribute it and/or modify
00005  *  it under the terms of the GNU General Public License as published by
00006  *  the Free Software Foundation; either version 2 of the License, or
00007  *  (at your option) any later version.
00008  *
00009  *  This program is distributed in the hope that it will be useful,
00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *  GNU Library General Public License for more details.
00013  *
00014  *  You should have received a copy of the GNU General Public License
00015  *  along with this program; if not, write to the Free Software
00016  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00017  *
00018  * Please read AUTHORS file !!!
00019  * 
00020  * $Id: ExCInterface.cpp,v 1.3 2002/08/01 19:37:50 binny Exp $
00021  *
00022  */
00023 
00024 #include "ExCInterface.h"
00025 
00026 ExCInterface::ExCInterface(void)
00027 {
00028 Guard(ExCInterface::ExCInterface(void))
00029         m_ShowRegion=true;
00030         m_State=true;
00031 UnGuard
00032 }
00033 
00034 ExCInterface::~ExCInterface(void)
00035 {
00036 Guard(ExCInterface::~ExCInterface(void))
00037 UnGuard
00038 }
00039 
00040 
00041 void ExCInterface::LoadTextureInterface(void)
00042 {
00043 Guard(void ExCInterface::LoadTextureInterface(void))
00044         ManagerTexture->AddTexture(m_Texture);
00045         ManagerTexture->AddTexture(m_TextureMask);
00046 UnGuard
00047 }
00048 
00049         
00050 bool ExCInterface::LoadInterface(const char * FileName)
00051 {
00052 Guard(bool ExCInterface::LoadInterface(const char * FileName))
00053         //-----------------------------------
00054         //structure of interface file .
00055         //-----------------------------------
00056         //#interface#                           type of file
00057         //800#600#                                      basic resolution 
00058         //bmp#                                          image interface
00059         //mask#                                         mask inetrface
00060         //int#int#string#int#int        1 int action
00061         //                                                      2 int command
00062         //                                                      3 argument
00063         //                                                      4 int posx mouse
00064         //                                                      5 int posy mouse
00065         //...
00066         //end of interface file#
00067 
00068         
00069         char                    ch;
00070         int                             RetVal;
00071         int                             FileSize;
00072         FILE                    *MyFile;
00073         bool                    endfile=false;
00074         //int                           tmp=0; // not used
00075         std::string             StBuffer;
00076         char                    buffer[255];
00077         ActionCommand   ActCom;
00078         
00079 #ifdef UNIX_SRC
00080         sprintf(buffer, PREFIX "/ExNihilo/Data/Interface/%s",FileName);
00081 #else
00082         sprintf(buffer,"../Data/Interface/%s",FileName);
00083 #endif
00084         m_InterfaceName=new char[strlen(FileName)];
00085         sprintf(m_InterfaceName,"%s",FileName);
00086     
00087         MyFile=fopen (buffer,"r");
00088         if(!MyFile)
00089         {
00090                 *Consol<<"INTERFACE >> File not found:"<<buffer<<std::endl;
00091                 return false;
00092         }else
00093         {
00094                 
00095                 *Consol<<"INTERFACE >>  Loading interface File "<<FileName<<std::endl;
00096                         
00097                 fseek(MyFile,0,SEEK_END);
00098                 FileSize=ftell(MyFile);
00099                 //Start of file
00100                 fseek(MyFile,0,SEEK_SET);
00101                 do
00102                 {
00103                         RetVal=fread(&ch,sizeof(char),1,MyFile);
00104                 }while(ch!='#');
00105                 //reading file type;
00106                 do
00107                 {
00108                         RetVal=fread(&ch,sizeof(char),1,MyFile);
00109                         StBuffer=StBuffer+ch;   
00110                 }while(ch!='#');
00111                 if(strcmp(StBuffer.data(),"interface#")==0)
00112                 {
00113                         //read default resolution
00114                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00115                         do
00116                         {
00117                                         RetVal=fread(&ch,sizeof(char),1,MyFile);
00118                                         StBuffer=StBuffer+ch;
00119                         }while(ch!='#');
00120                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00121                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00122                         try
00123                         {
00124                                 m_DefaultResolutionX=atoi(StBuffer.data());
00125                         }catch(...)
00126                         {
00127                                 m_DefaultResolutionX=0;
00128                         }
00129                         
00130                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00131                         do
00132                         {
00133                                         RetVal=fread(&ch,sizeof(char),1,MyFile);
00134                                         StBuffer=StBuffer+ch;
00135                         }while(ch!='#');
00136                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00137                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00138                         try
00139                         {
00140                                 m_DefaultResolutionY=atoi(StBuffer.data());
00141                         }catch(...)
00142                         {
00143                                 m_DefaultResolutionY=0; 
00144                         }
00145             //read image
00146                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00147                         do
00148                         {
00149                                         RetVal=fread(&ch,sizeof(char),1,MyFile);
00150                                         StBuffer=StBuffer+ch;
00151                         }while(ch!='#');
00152                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00153                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00154                         
00155                         m_Texture= new char[strlen(StBuffer.data())+18];
00156                         sprintf(m_Texture,"%s",StBuffer.data());
00157                         //read mask
00158                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00159                         do
00160                         {
00161                                         RetVal=fread(&ch,sizeof(char),1,MyFile);
00162                                         StBuffer=StBuffer+ch;
00163                         }while(ch!='#');
00164                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00165                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00166                         
00167                         m_TextureMask= new char[strlen(StBuffer.data())+18];
00168                         sprintf(m_TextureMask,"%s",StBuffer.data());
00169 
00170                         do
00171                         {
00172                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00173                                 do
00174                                 {
00175                                         RetVal=fread(&ch,sizeof(char),1,MyFile);
00176                                         StBuffer=StBuffer+ch;
00177                                 }while(ch!='#');
00178                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00179                                 StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00180                                 if(StBuffer.find("end of interface file")!=(unsigned)-1)
00181                                 {
00182                                         endfile=true;
00183                                 }else
00184                                 {
00185                                         //      action
00186                                         try
00187                                         {
00188                                                 ActCom.m_Action=atoi(StBuffer.data());
00189                                         }catch(...)
00190                                         {
00191                                                 ActCom.m_Action=NOTHING;        
00192                                         }
00193                                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00194                                         // command
00195                                         do
00196                                         {
00197                                                 RetVal=fread(&ch,sizeof(char),1,MyFile);
00198                                                 StBuffer=StBuffer+ch;
00199                                         }while(ch!='#');
00200                                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00201                                         try
00202                                         {
00203                                                 ActCom.m_Command=atoi(StBuffer.data());
00204                                         }catch(...)
00205                                         {
00206                                                 ActCom.m_Command=NOTHING;       
00207                                         }
00208                                         
00209                                         // param
00210                                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00211                                         do
00212                                         {
00213                                                 RetVal=fread(&ch,sizeof(char),1,MyFile);
00214                                                 StBuffer=StBuffer+ch;
00215                                         }while(ch!='#');
00216                                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00217                                         memset(ActCom.m_Param,0,255);
00218                                         sprintf(ActCom.m_Param," %s",StBuffer.data());
00219                                         // mousex
00220                                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00221                                         do
00222                                         {
00223                                                 RetVal=fread(&ch,sizeof(char),1,MyFile);
00224                                                 StBuffer=StBuffer+ch;
00225                                         }while(ch!='#');
00226                                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00227                                         try
00228                                         {
00229                                                 ActCom.m_MouseXup=atoi(StBuffer.data());
00230                                         }catch(...)
00231                                         {
00232                                                 ActCom.m_MouseXup=-1;   
00233                                         }
00234                                         
00235                                         // mousey
00236                                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00237                                         do
00238                                         {
00239                                                 RetVal=fread(&ch,sizeof(char),1,MyFile);
00240                                                 StBuffer=StBuffer+ch;
00241                                         }while(ch!='#');
00242                                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00243                                         try
00244                                         {
00245                                                 ActCom.m_MouseYup=atoi(StBuffer.data());
00246                                         }catch(...)
00247                                         {
00248                                                 ActCom.m_MouseYup=-1;   
00249                                         }
00250                                         // mousexd
00251                                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00252                                         do
00253                                         {
00254                                                 RetVal=fread(&ch,sizeof(char),1,MyFile);
00255                                                 StBuffer=StBuffer+ch;
00256                                         }while(ch!='#');
00257                                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00258                                         try
00259                                         {
00260                                                 ActCom.m_MouseXdown=atoi(StBuffer.data());
00261                                         }catch(...)
00262                                         {
00263                                                 ActCom.m_MouseXdown=-1; 
00264                                         }
00265                                         
00266                                         // mouseyd
00267                                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00268                                         do
00269                                         {
00270                                                 RetVal=fread(&ch,sizeof(char),1,MyFile);
00271                                                 StBuffer=StBuffer+ch;
00272                                         }while(ch!='#');
00273                                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00274                                         try
00275                                         {
00276                                                 ActCom.m_MouseYdown=atoi(StBuffer.data());
00277                                         }catch(...)
00278                                         {
00279                                                 ActCom.m_MouseYdown=-1; 
00280                                         }
00281                                 m_VecActionCommand.push_back(ActCom);   
00282                                 }
00283                         }while(!endfile);
00284                         fclose(MyFile);
00285                 LoadTextureInterface();
00286                         return true;
00287                 }else
00288                 {
00289                         *Consol<<FileName<<" is not a valide interface file"<<std::endl;
00290                         return false;
00291                 }
00292         }
00293 UnGuard
00294 }
00295 
00296 void ExCInterface::DrawInterface(void)
00297 {
00298 Guard(void ExCInterface::DrawInterface(void))
00299     glPushMatrix();
00300         ManagerWindow->EnterOrthoMode(0,0,ManagerWindow->GetResolutionX(),ManagerWindow->GetResolutionY());
00301         
00302         glEnable(GL_TEXTURE_2D);
00303         glDisable(GL_LIGHTING);
00304         glColor4f(1, 1, 1, 1);
00305         glDisable(GL_DEPTH_TEST);
00306         glBlendFunc(GL_DST_COLOR,GL_ZERO);
00307         glEnable(GL_BLEND);                                                                                     
00308         
00309         ManagerTexture->SetActiveTexture(m_TextureMask);
00310         
00311         glBegin(GL_QUADS);
00312                 glTexCoord2f(0.0f, 1.0f);       glVertex2f(0, 0);
00313                 glTexCoord2f(0.0f, 0.0f);       glVertex2f(0, ManagerWindow->GetResolutionY());
00314                 glTexCoord2f(1.0f, 0.0f);       glVertex2f(ManagerWindow->GetResolutionX(), ManagerWindow->GetResolutionY());
00315                 glTexCoord2f(1.0f, 1.0f);       glVertex2f(ManagerWindow->GetResolutionX(), 0);
00316         glEnd();        
00317 
00318         glBlendFunc(GL_ONE,GL_ONE);
00319         ManagerTexture->SetActiveTexture(m_Texture);
00320         
00321         glBegin(GL_QUADS);
00322                 glTexCoord2f(0.0f, 1.0f);       glVertex2f(0, 0);
00323                 glTexCoord2f(0.0f, 0.0f);       glVertex2f(0, ManagerWindow->GetResolutionY());
00324                 glTexCoord2f(1.0f, 0.0f);       glVertex2f(ManagerWindow->GetResolutionX(), ManagerWindow->GetResolutionY());
00325                 glTexCoord2f(1.0f, 1.0f);       glVertex2f(ManagerWindow->GetResolutionX(), 0);
00326     glEnd();    
00327         
00328         glDisable(GL_BLEND);
00329         glDisable(GL_TEXTURE_2D);
00330         glEnable(GL_DEPTH_TEST);
00331         
00332         
00333         if(m_ShowRegion)
00334         {
00335                 int i=0;
00336                 for(m_ItVecActionCommand=m_VecActionCommand.begin();m_ItVecActionCommand!=m_VecActionCommand.end();m_ItVecActionCommand++,i++)
00337                 {
00338                         
00339                         double Xup,Yup,Xdo,Ydo,cofx=1,cofy=1;
00340                         /*Xup=((double)m_ItVecActionCommand->m_MouseXup/m_DefaultResolutionX)*ManagerWindow->GetResolutionX();
00341                         Yup=((double)m_ItVecActionCommand->m_MouseYup/m_DefaultResolutionY)*ManagerWindow->GetResolutionY();
00342                         Xdo=((double)m_ItVecActionCommand->m_MouseXdown/m_DefaultResolutionX)*ManagerWindow->GetResolutionX();
00343                         Ydo=((double)m_ItVecActionCommand->m_MouseYdown/m_DefaultResolutionY)*ManagerWindow->GetResolutionY();
00344                         cout<<"Xup :"<<Xup<<endl;
00345                         cout<<"Yup :"<<Yup<<endl;
00346                         cout<<"Xdo :"<<Xdo<<endl;
00347                         cout<<"Ydo :"<<Ydo<<endl;*/
00348                         
00349                         
00350                         //cout<<"Current resolution X:"<<ManagerWindow->GetResolutionX()<<endl;
00351                         //cout<<"Current resolution Y:"<<ManagerWindow->GetResolutionY()<<endl;
00352                         //cout<<"Default X:"<<m_DefaultResolutionX<<endl;
00353                         //cout<<"Default Y:"<<m_DefaultResolutionY<<endl;
00354                         if(cofx==0)cofx=1;
00355                         if(cofy==0)cofy=1;
00356                         cofx=(ManagerWindow->GetResolutionX()/m_DefaultResolutionX);            
00357                         cofy=(ManagerWindow->GetResolutionY()/m_DefaultResolutionY);
00358                         //cout<<"cofx :"<<cofx<<endl;
00359                         //cout<<"cofy :"<<cofy<<endl;
00360                         
00361 
00362                         
00363                         
00364                         Xup=(m_ItVecActionCommand->m_MouseXup)*cofx;
00365                         Yup=(m_ItVecActionCommand->m_MouseYup)*cofy;
00366                         Xdo=(m_ItVecActionCommand->m_MouseXdown)*cofx;
00367                         Ydo=(m_ItVecActionCommand->m_MouseYdown)*cofy;
00368                         
00369                         if(i%1==0){glColor3f((float)i/10,1.0f-((float)i/10),1.0f);}
00370                         if(i%2==0){glColor3f(1.0f,1.0f-((float)i/10),(float)1/10);}
00371                         if(i%3==0){glColor3f(1.0f-((float)i/10),1.0f,(float)1/10);}
00372                         glBegin(GL_LINE_LOOP);
00373                                 glVertex2f(Xdo,Ydo);
00374                                 glVertex2f(Xdo,Yup);
00375                                 glVertex2f(Xup,Yup);
00376                                 glVertex2f(Xup,Ydo);
00377                         glEnd();
00378                 }
00379         }
00380         glEnable(GL_LIGHTING);
00381         ManagerWindow->LeaveOrthoMode();
00382         glPopMatrix();
00383 UnGuard
00384 }
00385 
00386 SAction ExCInterface::InputCommand(int command,int mousex,int mousey)
00387 {
00388 Guard(SAction ExCInterface::InputCommand(int command,int mousex,int mousey))
00389         int CntAct=0;
00390         SAction RetAct;
00391         
00392         for(m_ItVecActionCommand=m_VecActionCommand.begin();m_ItVecActionCommand!=m_VecActionCommand.end();m_ItVecActionCommand++)
00393         {
00394                 if(m_ItVecActionCommand->m_Command==command)
00395                 {
00396                         if(m_ItVecActionCommand->m_MouseXup<0)
00397                         {
00398                                 if(CntAct>0)
00399                                 {
00400                                         SAction *RecursifActA;
00401                                         SAction *RecursifActB;
00402                                         RecursifActA=&RetAct;
00403                                         for(int i=0;i<CntAct;i++)
00404                                         {
00405                                                 if(RecursifActA->m_NextAction==NULL)
00406                                                 {
00407                                                         RecursifActA->m_NextAction=new SAction;
00408                                                         RecursifActB=RecursifActA->m_NextAction;
00409                                                         RecursifActB->m_Action=m_ItVecActionCommand->m_Action;
00410                                                         RecursifActB->SetParam(m_ItVecActionCommand->m_Param);
00411                                                 }
00412                                                 RecursifActA=RecursifActA->m_NextAction;
00413                                         }
00414                                         CntAct++;
00415                                 }else
00416                                 {
00417                                         RetAct.m_Action=m_ItVecActionCommand->m_Action;
00418                                         RetAct.SetParam(m_ItVecActionCommand->m_Param);
00419                                         CntAct++;
00420                                 }
00421                         }else
00422                         {
00423                                 double Xup,Yup,Xdo,Ydo,Mx,My;
00424                                 Xup=((double)m_ItVecActionCommand->m_MouseXup/ManagerWindow->GetResolutionX());
00425                                 Yup=((double)m_ItVecActionCommand->m_MouseYup/ManagerWindow->GetResolutionY());
00426                                 Xdo=((double)m_ItVecActionCommand->m_MouseXdown/ManagerWindow->GetResolutionX());
00427                                 Ydo=((double)m_ItVecActionCommand->m_MouseYdown/ManagerWindow->GetResolutionY());
00428                                 Mx=((double)mousex/ManagerWindow->GetResolutionX());
00429                                 My=((double)mousey/ManagerWindow->GetResolutionY());
00430 
00431                                 /*cout<<"Resolution "<<ManagerWindow->GetResolutionX()<<" "<<ManagerWindow->GetResolutionY()<<endl;
00432                                 cout<<"Xup :"<<Xup<<endl;
00433                                 cout<<"Yup :"<<Yup<<endl;
00434                                 cout<<"Xdo :"<<Xdo<<endl;
00435                                 cout<<"Ydo :"<<Ydo<<endl;
00436                                 cout<<"Mx  :"<<Mx<<endl;
00437                                 cout<<"My  :"<<My<<endl;
00438                                 */
00439                                 
00440                                 if((Xup>Mx)&&(Xdo<Mx)&&(Ydo<My)&&(Yup>My))
00441                                 {
00442                                         std::cout<<"clik dedans"<<std::endl;
00443                                         if(CntAct>0)
00444                                         {
00445                                                 SAction *RecursifActA;
00446                                                 SAction *RecursifActB;
00447                                                 RecursifActA=&RetAct;
00448                                                 for(int i=0;i<CntAct;i++)
00449                                                 {
00450                                                         if(RecursifActA->m_NextAction==NULL)
00451                                                         {
00452                                                                 RecursifActA->m_NextAction=new SAction;
00453                                                                 RecursifActB=RecursifActA->m_NextAction;
00454                                                                 RecursifActB->m_Action=m_ItVecActionCommand->m_Action;
00455                                                                 RecursifActB->SetParam(m_ItVecActionCommand->m_Param);
00456                                                         }
00457                                                         RecursifActA=RecursifActA->m_NextAction;
00458                                                 }
00459                                                 CntAct++;
00460                                         }else
00461                                         {
00462                                                 RetAct.m_Action=m_ItVecActionCommand->m_Action;
00463                                                 RetAct.SetParam(m_ItVecActionCommand->m_Param);
00464                                                 CntAct++;
00465                                         }
00466                                 }else
00467                                 {
00468                                         std::cout<<"click hors coordonée"<<std::endl;
00469                                 }
00470                         }
00471                 }
00472         }
00473         if(CntAct==0)
00474         {
00475                 RetAct.m_Action=NOTHING;
00476                 RetAct.SetParam("NULL");
00477         }
00478 
00479         return RetAct;
00480 UnGuard
00481 }

Généré le Tue Aug 6 20:25:24 2002 pour ExNihilo par doxygen1.2.17