Display::Display()
{
game=new Game();
round =0;
device = createDevice(EDT_OPENGL,dimension2d<u32>(640,480),32);
driver = device->getVideoDriver ();
sceneManager =device->getSceneManager ();
device->getCursorControl ()-> setVisible (false);
irr::gui::IGUIEnvironment *gui = sceneManager->getGUIEnvironment();
/*les bouton qui posent probleme */
newPGame = gui->addButton(irr::core::rect<irr::s32>(10,10,120,50),0, 1, L"New Game(Player vs Player)");
newIaGame = gui->addButton(irr::core::rect<irr::s32>(10,60,120,100),0, 2, L"New Game(Player vs IA)");
leave = gui->addButton(irr::core::rect<irr::s32>(10,110,120,150),0, 3, L"Quit");
/* GOBAN */
cube =sceneManager->addCubeSceneNode(1,0,-1,vector3df(0,0,0),vector3df(0,0,0),vector3df(1,0.2,1));
cube->setMaterialFlag(video::EMF_LIGHTING, false);
cube->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\img\\\\13x13.png") );
/* STONE*/
sphere =sceneManager->addSphereSceneNode(0.4f,100,0,-1,vector3df(0,0.12,0),vector3df(0, 0, 0),vector3df(0.07, 0.04, 0.07));
sphere->setMaterialFlag(video::EMF_LIGHTING, false);
sphere->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\img\\\\stone_black.png") );
/* CAMERA */
sceneManager->addCameraSceneNode (0,vector3df (-0.6,0.8,0),vector3df (0,0.1,0));
/*gestion de l'evenement*/
receiver = new CEventReceiver(sphere);
device->setEventReceiver(receiver);
/* RENDU */
SColor color( // contient la couleur blanc
255, // composante A alpha (transparence)
255, // composante R rouge
255, // composante G verte
255); // composante B bleue
while (device->run() ){ // la boucle de rendu
driver->beginScene(true, true, color); // demarre le rendu
if(receiver->getM_isAdded())
{
receiver->setM_isAdded(false);
addStone(receiver->getnewX(),0.8,receiver->getnewY());
}
receiver->majPosMesh();
sceneManager->drawAll ();
gui->drawAll(); // calcule le rendu
driver->endScene (); // affiche le rendu
}
device->drop (); // libere la memoire
}
Display::CEventReceiver::CEventReceiver(irr::scene::IMeshSceneNode* sphere)
{
//On pointe le mesh passe en parametre.
m_Nmodele =sphere;
//Par defaut on ne bouge pas
m_isMoving = false;
m_isAdded =false;
}
bool Display::CEventReceiver::OnEvent(const irr::SEvent &event){
if(event.EventType == irr::EET_GUI_EVENT)cout<<"evenement declencher"<<endl;
//else cout<<"aucun evenement gui declencher";
//On verifie que le pointeur est ok et que cest un evenemetn liée a la souris
if(m_Nmodele != 0 && (event.EventType == irr::EET_MOUSE_INPUT_EVENT ))
{
m_isMoving = true;
//on recupereles coordonee exacte par rapport au goban
xref = -(event.MouseInput.Y-240)*0.002;
yref = -(event.MouseInput.X-320)*0.002;
if(event.MouseInput.Event== irr::EMIE_LMOUSE_PRESSED_DOWN && setCorrectPosition( xref,yref)){
m_isAdded=true;
}
//L'event est traite, on retourne true
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event
m_isMoving = false;
return false;
}
//on ajoute une pierre au goban
void Display::addStone(int x,float y,int z){
if(isCaseFree(x,z)){
IMeshSceneNode* Stone =sceneManager->addSphereSceneNode(0.4f,1000,0,0,vector3df(x*0.076, 0.12, z*0.076),vector3df(0, 0, 0),vector3df(0.07, 0.04, 0.07));
Stone->setMaterialFlag(video::EMF_LIGHTING, false);
int value=Game::NOBODY;
if(round%2==0){
Stone->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\img\\\\stone_black.png") );
value=Game::BLACK;
game->setBoardValue(abs(x-6),abs(z-6),value);
}
else{
Stone->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\img\\\\stone_white.png") );
value=Game::WHITE;
game->setBoardValue(abs(x-6),abs(z-6),value);
}
stones[round]=Stone;
round++;
if(game->getWinner()!=Game::NOBODY){
cout<<"il ya un vainquer la partie est terminer "<<endl;
game->setGameFinish(true);//!je voudrais pouvoir tester le choix de l'utilisateur une fois la partie fini
if(newPGame->isPressed()){//pour ca j'ai besoin de savoir comment savoir quand mon bouton a etai cliqué !
clear();
}
}
}
}
void Display::CEventReceiver::majPosMesh(){
//On verifie que le pointeur vers le mesh est
//ok et que la touche est enfoncee
if(m_Nmodele != 0 && m_isMoving == true)
{
//On commence par recuperer la position actuelle
irr::core::vector3df v = m_Nmodele->getPosition();
//On y ajoute la valeur de deplacement
v.X =xref;
v.Z= yref;
//On renvoie la nouvelle position
m_Nmodele->setPosition(v);
}
}
}