Changing resources in SceneManager

If you are a new Irrlicht Engine user, and have a newbie-question, this is the forum for you. You may also post general programming questions here.
Post Reply
Apoptyzm
Posts: 19
Joined: Tue Sep 23, 2008 7:53 pm

Changing resources in SceneManager

Post by Apoptyzm »

Hello,
im wondering how does Irrlicht deal with resources in SceneManager.

Lets say i have a game level loaded from .irr and after loading all nodes and Collision selectors and stuff i want to change level - what then?

Do i have to make new SceneManager or just load new .irr with stuff on top of the last level, or is there somewhere a interface to delete all loaded nodes and elements in SceneManager from last level?

thx for answer.
BlindSide
Admin
Posts: 2821
Joined: Thu Dec 08, 2005 9:09 am
Location: NZ!

Post by BlindSide »

Hi,

You can use SceneManager->clear().
ShadowMapping for Irrlicht!: Get it here
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
Apoptyzm
Posts: 19
Joined: Tue Sep 23, 2008 7:53 pm

Post by Apoptyzm »

Thanks for quick reply, but im missing something.

after calling SceneManager->clear();

and loading another scene i cant register CollisionSelectors for Camera with the code trake from the tutorial:

Code: Select all

	scene::IMetaTriangleSelector * meta = smgr->createMetaTriangleSelector();

	core::array<scene::ISceneNode *> nodes;
	smgr->getSceneNodesFromType(scene::ESNT_ANY, nodes); 

	//debug:
	int nodess = nodes.size();

	for (u32 i=0; i < nodes.size(); ++i)
	{
		scene::ISceneNode * node = nodes[i];
		scene::ITriangleSelector * selector = 0;

		switch(node->getType())
		{
		case scene::ESNT_CUBE:
		case scene::ESNT_ANIMATED_MESH:
						// Because the selector won't animate with the mesh,
						// and is only being used for camera collision, we'll just use an approximate
						// bounding box instead of ((scene::IAnimatedMeshSceneNode*)node)->getMesh(0)
			selector = smgr->createTriangleSelectorFromBoundingBox(node);
		break;

		case scene::ESNT_MESH:
		case scene::ESNT_SPHERE: // Derived from IMeshSceneNode
			selector = smgr->createTriangleSelector(((scene::IMeshSceneNode*)node)->getMesh(), node);
			break;

		case scene::ESNT_TERRAIN:
			selector = smgr->createTerrainTriangleSelector((scene::ITerrainSceneNode*)node);
			break;

		case scene::ESNT_OCTREE:
			selector = smgr->createOctreeTriangleSelector(((scene::IMeshSceneNode*)node)->getMesh(), node);
			break;

		default:
			
			break;
		}

		if(selector)
		{
			meta->addTriangleSelector(selector);
			selector->drop();
		}
	}

	scene::ISceneNodeAnimator* anim = ID->getSceneManager()->createCollisionResponseAnimator(
		meta, ID->getCamera(), core::vector3df(20,20,20),
		core::vector3df(0,-10.f,0)); //null calls inside of Irr.lib

	meta->drop(); 

	ID->getCamera()->addAnimator(anim);
	anim->drop(); 
Post Reply