From 3efd2030e206099f613d99aadee3ddce3e959a6b Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 17 Jul 2012 14:11:07 -0700 Subject: [PATCH] Create entities when loading NIFs for creatures --- apps/openmw/mwrender/creatureanimation.cpp | 17 +++++++---------- components/nifogre/ogre_nif_loader.cpp | 3 +++ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwrender/creatureanimation.cpp b/apps/openmw/mwrender/creatureanimation.cpp index b42feec68..92930e8d4 100644 --- a/apps/openmw/mwrender/creatureanimation.cpp +++ b/apps/openmw/mwrender/creatureanimation.cpp @@ -26,17 +26,16 @@ CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::O { std::string mesh = "meshes\\" + ref->base->model; - NifOgre::MeshPairList meshes = NifOgre::NIFLoader::load(mesh); - for(size_t i = 0;i < meshes.size();i++) + NifOgre::EntityList entities = NifOgre::NIFLoader::createEntities(mInsert, mesh); + mBase = entities.mEntities; + for(size_t i = 0;i < mBase.size();i++) { - mBase.push_back(mRend.getScene()->createEntity(meshes[i].first->getName())); - Ogre::Entity *base = mBase.back(); - base->setVisibilityFlags(RV_Actors); + mBase[i]->setVisibilityFlags(RV_Actors); bool transparent = false; - for (unsigned int j=0;j < base->getNumSubEntities() && !transparent; ++j) + for (unsigned int j=0;j < mBase[i]->getNumSubEntities() && !transparent; ++j) { - Ogre::MaterialPtr mat = base->getSubEntity(j)->getMaterial(); + Ogre::MaterialPtr mat = mBase[i]->getSubEntity(j)->getMaterial(); Ogre::Material::TechniqueIterator techIt = mat->getTechniqueIterator(); while (techIt.hasMoreElements() && !transparent) { @@ -51,9 +50,7 @@ CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::O } } } - base->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); - - mInsert->attachObject(base); + mBase[i]->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); } } } diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index c90083619..79eaa6680 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -896,7 +896,10 @@ EntityList NIFLoader::createEntities(Ogre::SceneNode *parent, const std::string { Ogre::Entity *entity = entitylist.mEntities[i]; if(entity != entitylist.mSkelBase && entity->hasSkeleton()) + { entity->shareSkeletonInstanceWith(entitylist.mSkelBase); + parent->attachObject(entity); + } else if(entity != entitylist.mSkelBase) entitylist.mSkelBase->attachObjectToBone(meshes[i].second, entity); }