Bonjour a tous,
Je voudrai savoir comment faire pour ouvrir une porte, juste pour un test!
Ex: j'ai un joueur (camera en mode FPS), un monde modéliser en .X et j'ai ajouter une porte (en .X). Lorsque mon joueur s'approche de cette porte, j'aimerai qu'elle s'ouvre soit juste en s'approchant de celle-ci, soit en appuyant sur une touche.
J'ai deja essayer avec GetDistanceFrom, mais l'essai n'est pas tres concluant!!
Voila mon code actuel:
ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(0, 100, 150, -1, keyMap, 8);
camera->setPosition(core::vector3df(100,150,100));
core::vector3df camPos = camera->getAbsolutePosition();
///*************************************************************************************************
IAnimatedMesh* mesh1 = smgr->getMesh("JUJU2/murs.x");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh1 );
node->setMaterialFlag(video::EMF_LIGHTING, true);
//node->getMaterial(0).AmbientColor = SColor(255,0,0,0);
node->setScale(core::vector3df(10.0f,1.0f,10.0f));
scene::ITriangleSelector* selector = smgr->createOctTreeTriangleSelector(mesh1->getMesh(0),node);
node->setTriangleSelector(selector);
selector->drop();
///**************************************************************************************************
IAnimatedMesh* mesh2 = smgr->getMesh("JUJU2/porte.x");
IAnimatedMeshSceneNode* node2 = smgr->addAnimatedMeshSceneNode( mesh2 );
node2->setMaterialFlag(video::EMF_LIGHTING, true);
node2->setDebugDataVisible(true);
node2->setScale(core::vector3df(10.0f,1.0f,10.0f));
ITriangleSelector* doorSelector = smgr->createTriangleSelectorFromBoundingBox(node2);
scene::IMetaTriangleSelector* metaSelector = smgr->createMetaTriangleSelector();
metaSelector->addTriangleSelector(doorSelector);
metaSelector->addTriangleSelector(selector);
core::vector3df start = node2->getPosition();
core::vector3df end = start;
scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
metaSelector, camera, core::vector3df(10,50,10),
core::vector3df(0,-10.0f,0),//-200
core::vector3df(0,60,0), 0.00005f);
camera->addAnimator(anim);
anim->drop();
bool ouvert = false;//Booleen pour l'ouverture, fermeture
if (ouvert = true)
{
core::vector3df end = start;
end.Y = end.Y + 200;
ISceneNodeAnimator* anim1 = smgr->createFlyStraightAnimator(start, end, 3000, false);
node2->addAnimator(anim1);
anim1->drop();
//ouvert = false;
}
if( ouvert = false)
{
//core::vector3df end = start;
end.Y = end.Y - 200;
ISceneNodeAnimator* anim1 = smgr->createFlyStraightAnimator(start, end, 3000, false);
node2->addAnimator(anim1);
anim1->drop();
ouvert = true;
}
ISceneNode* node1 = 0;
node1 = smgr->addLightSceneNode(0, core::vector3df(0,150,0),
video::SColorf(1.0f, 0.6f, 0.7f, 1.0f), 800.0f);
IGUIStaticText* fpstext =
env->addStaticText(L"", core::rect<s32>(10,150,200,200), false, true, 0, -1, true);
int lastFPS = -1;
while(device->run())
{
driver->beginScene(true, true, SColor(0,20,20,20));
smgr->drawAll();
env->drawAll();
if( node2->getPosition().getDistanceFrom(camera->getPosition()) > 120)
ouvert = true;
else if( node2->getPosition().getDistanceFrom(camera->getPosition()) < 120)
ouvert = false;
driver->endScene();
Ma porte est soit toujours ouverte, soit fermé......
Merci de votre aide!!!!