#include "C:\\Users\\Dante\\Desktop\\projet rogrammation s6\\jeuDeGo\\include\\Display.h"
#include <irrlicht.h>
Display::Display()
{
IrrlichtDevice* device = createDevice(EDT_OPENGL,dimension2d<u32>(640,480),32);
IVideoDriver* driver = device->getVideoDriver ();
ISceneManager* sceneManager =device->getSceneManager ();
device->getCursorControl ()-> setVisible (true);
/* GOBAN */
IMeshSceneNode* 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\\\\9x9.png") );
/* STONE*/
IMeshSceneNode* sphere =sceneManager->addSphereSceneNode(0.4f,100,0,-1,vector3df(0,0.12,0),vector3df(0, 0, 0),vector3df(0.1, 0.06, 0.1));
sphere->setMaterialFlag(video::EMF_LIGHTING, false);
sphere->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\stone_black.png") );
/* CAMERA */
sceneManager->addCameraSceneNode (0,vector3df (0,0.8,0),vector3df (0,0.1,0));
/*gestion de l'evenement*/
Display::CEventReceiver receiver(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())
{
addStone(receiver.getXref(),0.8,receiver.getYref());
receiver.setM_isAdded(false);
}
receiver.majPosMesh();
sceneManager->drawAll (); // calcule le rendu
driver->endScene (); // affiche le rendu
}
device->drop (); // libere la memoire
}
Display::CEventReceiver::CEventReceiver(irr::scene::IMeshSceneNode* Nmodele)
{
//On pointe le mesh passe en parametre.
m_Nmodele = Nmodele;
//Par defaut on ne bouge pas
m_isMoving = false;
m_isAdded =false;
}
bool Display::CEventReceiver::OnEvent(const irr::SEvent &event){
//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){
std::cout<<"xref egal a "<<xref<<std::endl;
std::cout<<"Yref egal a "<<yref<<std::endl;
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(float x,float y,float z){
IMeshSceneNode* Stone =sceneManager->addSphereSceneNode(0.4f,1000,0,0,vector3df(x, 0.12, y),vector3df(0, 0, 0),vector3df(0.1, 0.06, 0.1));
Stone->setMaterialFlag(video::EMF_LIGHTING, false);
Stone->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\stone_black.png") );
}
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);
}
}