00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 char ch;
00070 int RetVal;
00071 int FileSize;
00072 FILE *MyFile;
00073 bool endfile=false;
00074
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
00100 fseek(MyFile,0,SEEK_SET);
00101 do
00102 {
00103 RetVal=fread(&ch,sizeof(char),1,MyFile);
00104 }while(ch!='#');
00105
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
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
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
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
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
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
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
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
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
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
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
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
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
00359
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
00432
00433
00434
00435
00436
00437
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 }