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 ...@@ -18,7 +18,7 @@ namespace scene
class ISceneNode; class ISceneNode;
//! Interface to read and write user data to and from .irr files. //! 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. and write user data when reading or writing .irr files via ISceneManager.
To be used with ISceneManager::loadScene() and ISceneManager::saveScene() */ To be used with ISceneManager::loadScene() and ISceneManager::saveScene() */
class ISceneUserDataSerializer class ISceneUserDataSerializer
...@@ -27,6 +27,9 @@ public: ...@@ -27,6 +27,9 @@ public:
virtual ~ISceneUserDataSerializer() {} 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. //! Called when the scene manager read a scene node while loading a file.
/** The userData pointer contains a list of attributes with userData which /** The userData pointer contains a list of attributes with userData which
were attached to the scene node in the read scene file.*/ were attached to the scene node in the read scene file.*/
......
...@@ -1876,22 +1876,20 @@ void CSceneManager::readSceneNode(io::IXMLReader* reader, ISceneNode* parent, IS ...@@ -1876,22 +1876,20 @@ void CSceneManager::readSceneNode(io::IXMLReader* reader, ISceneNode* parent, IS
scene::ISceneNode* node = 0; scene::ISceneNode* node = 0;
if ((!parent && IRR_XML_FORMAT_SCENE==reader->getNodeName()) || if (!parent && IRR_XML_FORMAT_SCENE==reader->getNodeName())
( parent && IRR_XML_FORMAT_NODE==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) for (s32 i=(s32)SceneNodeFactoryList.size()-1; i>=0 && !node; --i)
node = SceneNodeFactoryList[i]->addSceneNode(attrName.c_str(), parent); node = SceneNodeFactoryList[i]->addSceneNode(attrName.c_str(), parent);
if (!node) if (!node)
os::Printer::log("Could not create scene node of unknown type", attrName.c_str()); os::Printer::log("Could not create scene node of unknown type", attrName.c_str());
} else if ( userDataSerializer )
else userDataSerializer->OnCreateNode(node);
node = this; // root
} }
// read attributes // 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