Filter out skinned shapes that don't match the bone name

This commit is contained in:
Chris Robinson 2012-07-18 12:47:16 -07:00
parent db948969c9
commit 3b29d280b9

View file

@ -926,12 +926,23 @@ EntityList NIFLoader::createEntities(Ogre::Entity *parent, const std::string &bo
if(meshes.size() == 0) if(meshes.size() == 0)
return entitylist; return entitylist;
std::string filter = "Tri "+bonename;
for(size_t i = 0;i < meshes.size();i++) for(size_t i = 0;i < meshes.size();i++)
{ {
entitylist.mEntities.push_back(sceneMgr->createEntity(meshes[i].first->getName())); Ogre::Entity *ent = sceneMgr->createEntity(meshes[i].first->getName());
Ogre::Entity *entity = entitylist.mEntities.back(); if(ent->hasSkeleton())
if(!entitylist.mSkelBase && entity->hasSkeleton()) {
entitylist.mSkelBase = entity; if(meshes[i].second.length() < filter.length() || filter.compare(meshes[i].second) != 0)
{
sceneMgr->destroyEntity(ent);
meshes.erase(meshes.begin()+i);
i--;
continue;
}
if(!entitylist.mSkelBase)
entitylist.mSkelBase = ent;
}
entitylist.mEntities.push_back(ent);
} }
if(entitylist.mSkelBase) if(entitylist.mSkelBase)
@ -946,7 +957,7 @@ EntityList NIFLoader::createEntities(Ogre::Entity *parent, const std::string &bo
parent->attachObjectToBone(bonename, entity); parent->attachObjectToBone(bonename, entity);
} }
else if(entity != entitylist.mSkelBase) else if(entity != entitylist.mSkelBase)
entitylist.mSkelBase->attachObjectToBone(meshes[i].second, entity); parent->attachObjectToBone(bonename, entity);
} }
} }
else else