From 65c20f128f8c6552da1707c072c23698a40d8364 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 16 Jul 2012 21:18:33 -0700 Subject: [PATCH] Build bones for non-NiNode nodes (NiTriShapes, etc) --- components/nifogre/ogre_nif_loader.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 29ead0461..c0f3c25d0 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -142,7 +142,7 @@ static void fail(const std::string &msg) } -void buildBones(Ogre::Skeleton *skel, Nif::NiNode *node, Ogre::Bone *parent=NULL) +void buildBones(Ogre::Skeleton *skel, const Nif::Node *node, Ogre::Bone *parent=NULL) { Ogre::Bone *bone; if(!skel->hasBone(node->name)) @@ -157,12 +157,15 @@ void buildBones(Ogre::Skeleton *skel, Nif::NiNode *node, Ogre::Bone *parent=NULL bone->setBindingPose(); bone->setInitialState(); - const Nif::NodeList &children = node->children; - for(size_t i = 0;i < children.length();i++) + const Nif::NiNode *ninode = dynamic_cast(node); + if(ninode) { - Nif::NiNode *next; - if(!children[i].empty() && (next=dynamic_cast(children[i].getPtr()))) - buildBones(skel, next, bone); + const Nif::NodeList &children = ninode->children; + for(size_t i = 0;i < children.length();i++) + { + if(!children[i].empty()) + buildBones(skel, children[i].getPtr(), bone); + } } } @@ -172,7 +175,7 @@ void loadResource(Ogre::Resource *resource) OgreAssert(skel, "Attempting to load a skeleton into a non-skeleton resource!"); Nif::NIFFile nif(skel->getName()); - Nif::NiNode *node = dynamic_cast(nif.getRecord(0)); + const Nif::Node *node = dynamic_cast(nif.getRecord(0)); buildBones(skel, node); }