Monstres::Monstres(irr::scene::ISceneManager *sceneManager, irr::video::IVideoDriver *driver, irr::scene::IMetaTriangleSelector* metaSelectorTerrain)
{
selector = 0;
scene::IMetaTriangleSelector* metaSelector = sceneManager->createMetaTriangleSelector();
int i=0,j=0;
for (i=0; i<Nombre_Monstres; i++)
{
for (j=0; j<Nombre_Monstres; j++)
{
m_Monstres[i][j] = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh ("Ressources/Mesh/Monstres.obj"),0,ID_IsMonster);
m_Monstres[i][j]->setScale(core::vector3df(0.25f));
m_Monstres[i][j]->setPosition(irr::core::vector3df(6-Taille_Terrain,0,0));
selector = sceneManager->createTriangleSelector(m_Monstres[i][j]);
m_Monstres[i][j]->setTriangleSelector(selector);
metaSelector->addTriangleSelector(selector);
selector->drop(); /////////////////////////////////////// drop pour chaque selector créé
scene::ISceneNodeAnimator* collision_Monstres = sceneManager->createCollisionResponseAnimator(metaSelector, m_Monstres[i][j], core::vector3df(0.25,0.25,0.25), core::vector3df(0,0,0));
scene::ISceneNodeAnimator* collision_Terrain = sceneManager->createCollisionResponseAnimator(metaSelectorTerrain, m_Monstres[i][j], core::vector3df(0.25,0.25,0.25), core::vector3df(0,0,0));
if(collision_Monstres && collision_Terrain)
{
m_Monstres[i][j]->addAnimator(collision_Monstres);
collision_Monstres->drop();
m_Monstres[i][j]->addAnimator(collision_Terrain);
collision_Terrain->drop();
}
}
}
}
void Monstres::Deplacement(irr::scene::ISceneManager *sceneManager, Terrain plateau_de_jeu, double frameDeltaTime)
{
int i=0,j=0;
core::vector3df position_monstre, postition2;
postition2 = m_Monstres[i][j]->getPosition();
for (i=0; i<Nombre_Monstres; i++)
{
for (j=0; j<Nombre_Monstres; j++)
{
if(m_Monstres[i][j] != 0)
{
position_monstre = m_Monstres[i][j]->getPosition();
position_monstre.X += 0.001f * frameDeltaTime; //////////////////////////////// coefficient modifié
m_Monstres[i][j]->setPosition(position_monstre);
}
}
}
}
// boucle de rendu
s32 fps=0; /////////////////////////// variables à l'extérieur de la boucle
u32 now=0;
f32 frameDeltaTime=0.f;
while (device->run() && driver)
{
// Calcul le temps delta d'une image.
now = device->getTimer()->getTime();
frameDeltaTime = now - then; // Temps en secondes
then = now;
driver->beginScene(true, true, irr::video::SColor(255,255,255,255)); // demarre le rendu // clear back-buffer // clear z-buffer // fond blanc
Entity_Monstres.Deplacement(sceneManager,plateau_de_jeu, frameDeltaTime);
sceneManager->drawAll(); // calcule le rendu
driver->endScene(); // affiche le rendu
fps = driver->getFPS();
if (lastFPS != fps)
{
core::stringw tmp(L"Ressources/Mesh/Monstres.obj");
tmp += driver->getName();
tmp += L"Movement Example - Irrlicht Engine [";
tmp += fps;
device->setWindowCaption(tmp.c_str());
lastFPS = fps;
}
}