Basically I have a basic level stored in a .pk3 file, but I want to be able to add meshscenenodes dynamically to it, for example so I can create a new random maze each time the game is loaded.
I have a basic meshscenenode for a wall segment stored in a file. The mesh displays fine, however when I try and add collision detection to my player, weird things start to happen! Am I going about this the right way? code outlined below.
Thanks in advance!
Code: Select all
//load basic map -----------------------------------
//unzip file
device->getFileSystem()->addZipFileArchive(mapfile);
//get mesh information
scene::IAnimatedMesh* worldMesh = smgr->getMesh(bspfile);
//create world node
scene::ISceneNode* worldNode = 0;
if (worldMesh)
worldNode = smgr->addOctTreeSceneNode(worldMesh->getMesh(0));
//triangle selector object used for collision detection
scene::ITriangleSelector* selector = 0;
if (worldNode)
{
mapSelector = smgr->createOctTreeTriangleSelector(worldMesh->getMesh(0), worldNode, 128);
//add the triangle mesh to map node
worldNode->setTriangleSelector(mapSelector);
}
//load wall mesh -------------------------
device->getFileSystem()->addZipFileArchive(wallfile);
//get mesh information
wallMesh = smgr->getMesh(wallbspfile);
scene::ISceneNode* wallNode = 0;
if (wallMesh)
wallNode = smgr->addOctTreeSceneNode(wallMesh->getMesh(0),smgr->getRootSceneNode());
//create triangle selector object used for collision detection
scene::ITriangleSelector* selector = 0;
if (wallNode)
{
wallNode->setPosition(core::vector3df(100,0,100));
scene::ITriangleSelector* wallSelector = smgr->createOctTreeTriangleSelector(wallMesh->getMesh(0), wallNode, 128);
//add the triangle mesh to map node
wallNode->setTriangleSelector(wallSelector);
}
//add collision detection animators to player ------------------
//create animator for map
scene::ISceneNodeAnimator* mapAnim = smgr->createCollisionResponseAnimator(
mapSelector,
player,
core::vector3df(10,10,10),
core::vector3df(0,-1,0),
core::vector3df(0,10,0)
);
player->addAnimator(mapAnim);
mapAnim->drop();
mapSelector->drop();
//create animator for wall
scene::ISceneNodeAnimator* wallAnim = smgr->createCollisionResponseAnimator(
wallSelector,
player,
core::vector3df(10,10,10),
core::vector3df(0,-1,0),
core::vector3df(0,10,0)
);
player->addAnimator(wallAnim);
wallAnim->drop();
wallSelector->drop();