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 SetName("ExCInterface");
00032 SetType(typeid(this).name());
00033 UnGuard
00034 }
00035
00036 ExCInterface::ExCInterface(std::string FileName)
00037 {
00038 Guard(ExCInterface::ExCInterface(std::string FileName))
00039 m_ShowRegion=true;
00040 m_State=true;
00041 LoadFile(FileName);
00042 UnGuard
00043 }
00044
00045 ExCInterface::~ExCInterface(void)
00046 {
00047 Guard(ExCInterface::~ExCInterface(void))
00048 UnGuard
00049 }
00050
00051 bool ExCInterface::LoadFile(std::string FileName)
00052 {
00053 Guard(bool ExCInterface::LoadFile(std::string FileName))
00054 char buffer[255];
00055 #ifdef UNIX_SRC
00056 sprintf(buffer, PREFIX "/ExNihilo/Data/Interface/%s", FileName.data());
00057 #else
00058 sprintf(buffer, "../Data/Interface/%s", FileName.data());
00059 #endif
00060 std::ifstream fin;
00061 std::string buffstring;
00062 char b[256];
00063 fin.open(buffer,std::ios::in);
00064 if(fin.is_open())
00065 {
00066 try
00067 {
00068
00069 memset(b,0,255);
00070 fin.getline(b,256,'\n');
00071 m_Texture=ExNihilo::ExtracValueFromSring(b,"<Image>","<#Image>");
00072
00073 memset(b,0,255);
00074 fin.getline(b,256,'\n');
00075 m_TextureMask=ExNihilo::ExtracValueFromSring(b,"<Mask>","<#Mask>");
00076
00077 memset(b,0,255);
00078 fin.getline(b,256,'\n');
00079 buffstring=ExNihilo::ExtracValueFromSring(b,"<Mask>","<#Mask>");
00080 m_DefaultResolutionX=ExNihilo::ExtractIntValueFromSring(buffstring,"<X>","<#X>");
00081 m_DefaultResolutionY=ExNihilo::ExtractIntValueFromSring(buffstring,"<Y>","<#Y>");
00082
00083 do
00084 {
00085 memset(b,0,255);
00086 fin.getline(b,256,'\n');
00087 try
00088 {
00089 ActionCommand actcmd;
00090 buffstring=ExNihilo::ExtracValueFromSring(b,"<Interface_Action>","<#Interface_Action>");
00091 actcmd.m_Action=ExNihilo::ExtractIntValueFromSring(buffstring,"<Action>","<#Action>");
00092 actcmd.m_Command=ExNihilo::ExtractIntValueFromSring(buffstring,"<Command>","<#Command>");
00093 actcmd.m_Param=ExNihilo::ExtracValueFromSring(buffstring,"<Param>","<#Param>");
00094 actcmd.m_MouseXup=ExNihilo::ExtractIntValueFromSring(buffstring,"<TopX>","<#TopX>");
00095 actcmd.m_MouseYup=ExNihilo::ExtractIntValueFromSring(buffstring,"<TopY>","<#TopY>");
00096 actcmd.m_MouseXdown=ExNihilo::ExtractIntValueFromSring(buffstring,"<BottomX>","<#BottomX>");
00097 actcmd.m_MouseYdown=ExNihilo::ExtractIntValueFromSring(buffstring,"<BottomY>","<#BottomY>");
00098 m_VecActionCommand.push_back(actcmd);
00099 }catch(ExCExpStringNotFound){}
00100 }while(!fin.eof());
00101 fin.close();
00102 }catch(...){throw ExCExpFileReadError();}
00103 }else throw ExCExpFileNotFound();
00104 ManagerTexture->Add(m_Texture);
00105 ManagerTexture->Add(m_TextureMask);
00106 return true;
00107 UnGuard
00108 }
00109
00110 void ExCInterface::Draw(void)
00111 {
00112 Guard(void ExCInterface::Draw(void))
00113 glPushMatrix();
00114 ExNihilo::EnterOrthoMode();
00115
00116 glEnable(GL_TEXTURE_2D);
00117 glDisable(GL_LIGHTING);
00118 glColor4f(1, 1, 1, 1);
00119 glDisable(GL_DEPTH_TEST);
00120 glBlendFunc(GL_DST_COLOR,GL_ZERO);
00121 glEnable(GL_BLEND);
00122
00123 ManagerTexture->SetCurrentObject(m_TextureMask);
00124
00125 glBegin(GL_QUADS);
00126 glTexCoord2f(0.0f, 1.0f); glVertex2f(0, 0);
00127 glTexCoord2f(0.0f, 0.0f); glVertex2f(0,glutGet(GLUT_WINDOW_HEIGHT));
00128 glTexCoord2f(1.0f, 0.0f); glVertex2f(glutGet(GLUT_WINDOW_WIDTH),glutGet(GLUT_WINDOW_HEIGHT));
00129 glTexCoord2f(1.0f, 1.0f); glVertex2f(glutGet(GLUT_WINDOW_WIDTH), 0);
00130 glEnd();
00131
00132 glBlendFunc(GL_ONE,GL_ONE);
00133 ManagerTexture->SetCurrentObject(m_Texture);
00134
00135 glBegin(GL_QUADS);
00136 glTexCoord2f(0.0f, 1.0f); glVertex2f(0, 0);
00137 glTexCoord2f(0.0f, 0.0f); glVertex2f(0,glutGet(GLUT_WINDOW_HEIGHT));
00138 glTexCoord2f(1.0f, 0.0f); glVertex2f(glutGet(GLUT_WINDOW_WIDTH),glutGet(GLUT_WINDOW_HEIGHT));
00139 glTexCoord2f(1.0f, 1.0f); glVertex2f(glutGet(GLUT_WINDOW_WIDTH), 0);
00140 glEnd();
00141
00142 glDisable(GL_BLEND);
00143 glDisable(GL_TEXTURE_2D);
00144 glEnable(GL_DEPTH_TEST);
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192 ExNihilo::LeaveOrthoMode();
00193 glPopMatrix();
00194 UnGuard
00195 }
00196
00197 ExCAction ExCInterface::InputCommand(int command,int mousex,int mousey)
00198 {
00199 Guard(ExCAction ExCInterface::InputCommand(int command,int mousex,int mousey))
00200 int CntAct=0;
00201 ExCAction RetAct;
00202
00203 for(m_ItVecActionCommand=m_VecActionCommand.begin();m_ItVecActionCommand!=m_VecActionCommand.end();m_ItVecActionCommand++)
00204 {
00205 if(m_ItVecActionCommand->m_Command==command)
00206 {
00207 if(m_ItVecActionCommand->m_MouseXup<0)
00208 {
00209 if(CntAct>0)
00210 {
00211 ExCAction *RecursifActA;
00212 ExCAction *RecursifActB;
00213 RecursifActA=&RetAct;
00214 for(int i=0;i<CntAct;i++)
00215 {
00216 if(RecursifActA->m_NextAction==NULL)
00217 {
00218 RecursifActA->m_NextAction=new ExCAction;
00219 RecursifActB=RecursifActA->m_NextAction;
00220 RecursifActB->m_Action=m_ItVecActionCommand->m_Action;
00221 RecursifActB->SetParam(m_ItVecActionCommand->m_Param);
00222 }
00223 RecursifActA=RecursifActA->m_NextAction;
00224 }
00225 CntAct++;
00226 }else
00227 {
00228 RetAct.m_Action=m_ItVecActionCommand->m_Action;
00229 RetAct.SetParam(m_ItVecActionCommand->m_Param);
00230 CntAct++;
00231 }
00232 }else
00233 {
00234 double Xup,Yup,Xdo,Ydo,Mx,My;
00235 Xup=((double)m_ItVecActionCommand->m_MouseXup/ManagerWindow->GetResolutionX());
00236 Yup=((double)m_ItVecActionCommand->m_MouseYup/ManagerWindow->GetResolutionY());
00237 Xdo=((double)m_ItVecActionCommand->m_MouseXdown/ManagerWindow->GetResolutionX());
00238 Ydo=((double)m_ItVecActionCommand->m_MouseYdown/ManagerWindow->GetResolutionY());
00239 Mx=((double)mousex/ManagerWindow->GetResolutionX());
00240 My=((double)mousey/ManagerWindow->GetResolutionY());
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251 if((Xup>Mx)&&(Xdo<Mx)&&(Ydo<My)&&(Yup>My))
00252 {
00253 std::cout<<"clik dedans"<<std::endl;
00254 if(CntAct>0)
00255 {
00256 ExCAction *RecursifActA;
00257 ExCAction *RecursifActB;
00258 RecursifActA=&RetAct;
00259 for(int i=0;i<CntAct;i++)
00260 {
00261 if(RecursifActA->m_NextAction==NULL)
00262 {
00263 RecursifActA->m_NextAction=new ExCAction;
00264 RecursifActB=RecursifActA->m_NextAction;
00265 RecursifActB->m_Action=m_ItVecActionCommand->m_Action;
00266 RecursifActB->SetParam(m_ItVecActionCommand->m_Param);
00267 }
00268 RecursifActA=RecursifActA->m_NextAction;
00269 }
00270 CntAct++;
00271 }else
00272 {
00273 RetAct.m_Action=m_ItVecActionCommand->m_Action;
00274 RetAct.SetParam(m_ItVecActionCommand->m_Param);
00275 CntAct++;
00276 }
00277 }else
00278 {
00279 std::cout<<"click hors coordonée"<<std::endl;
00280 }
00281 }
00282 }
00283 }
00284 if(CntAct==0)
00285 {
00286 RetAct.m_Action=NOTHING;
00287 RetAct.SetParam("NULL");
00288 }
00289
00290 return RetAct;
00291 UnGuard
00292 }