Commit 9cbeca1c authored by hybrid's avatar hybrid

Added node creation callback patch from fullmetalcoder. This allows a callback...

Added node creation callback patch from fullmetalcoder. This allows a callback per created scene node for .irr scene loading.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1429 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 846ea614
......@@ -18,7 +18,7 @@ namespace scene
class ISceneNode;
//! Interface to read and write user data to and from .irr files.
/** This interface is to be imlpemented by the user, to make it possible to read
/** This interface is to be implemented by the user, to make it possible to read
and write user data when reading or writing .irr files via ISceneManager.
To be used with ISceneManager::loadScene() and ISceneManager::saveScene() */
class ISceneUserDataSerializer
......@@ -27,6 +27,9 @@ public:
virtual ~ISceneUserDataSerializer() {}
//! Called when the scene manager create a scene node while loading a file.
virtual void OnCreateNode(ISceneNode* node) = 0;
//! Called when the scene manager read a scene node while loading a file.
/** The userData pointer contains a list of attributes with userData which
were attached to the scene node in the read scene file.*/
......
......@@ -1876,22 +1876,20 @@ void CSceneManager::readSceneNode(io::IXMLReader* reader, ISceneNode* parent, IS
scene::ISceneNode* node = 0;
if ((!parent && IRR_XML_FORMAT_SCENE==reader->getNodeName()) ||
( parent && IRR_XML_FORMAT_NODE==reader->getNodeName()))
if (!parent && IRR_XML_FORMAT_SCENE==reader->getNodeName())
node = this; // root
else if (parent && IRR_XML_FORMAT_NODE==reader->getNodeName())
{
if (parent)
{
// find node type and create it
core::stringc attrName = reader->getAttributeValue(IRR_XML_FORMAT_NODE_ATTR_TYPE.c_str());
// find node type and create it
core::stringc attrName = reader->getAttributeValue(IRR_XML_FORMAT_NODE_ATTR_TYPE.c_str());
for (int i=(int)SceneNodeFactoryList.size()-1; i>=0 && !node; --i)
node = SceneNodeFactoryList[i]->addSceneNode(attrName.c_str(), parent);
for (s32 i=(s32)SceneNodeFactoryList.size()-1; i>=0 && !node; --i)
node = SceneNodeFactoryList[i]->addSceneNode(attrName.c_str(), parent);
if (!node)
os::Printer::log("Could not create scene node of unknown type", attrName.c_str());
}
else
node = this; // root
if (!node)
os::Printer::log("Could not create scene node of unknown type", attrName.c_str());
else if ( userDataSerializer )
userDataSerializer->OnCreateNode(node);
}
// read attributes
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment