diff --git a/apps/openmw/mwrender/npcanimation.cpp b/apps/openmw/mwrender/npcanimation.cpp index eb5fceb0e..b4e39ff15 100644 --- a/apps/openmw/mwrender/npcanimation.cpp +++ b/apps/openmw/mwrender/npcanimation.cpp @@ -339,13 +339,13 @@ void NpcAnimation::updateParts() } } -std::vector NpcAnimation::insertBoundedPart(const std::string &mesh, const std::string &bonename) +NifOgre::EntityList NpcAnimation::insertBoundedPart(const std::string &mesh, const std::string &bonename) { NifOgre::EntityList entities = NIFLoader::createEntities(mInsert, mesh); std::vector &parts = entities.mEntities; for(size_t i = 0;i < parts.size();i++) parts[i]->setVisibilityFlags(RV_Actors); - return parts; + return entities; } void NpcAnimation::runAnimation(float timepassed) @@ -379,15 +379,19 @@ void NpcAnimation::runAnimation(float timepassed) } } -void NpcAnimation::removeEntities(std::vector &entities) +void NpcAnimation::removeEntities(NifOgre::EntityList &entities) { + assert(&entities != &mEntityList); + Ogre::SceneManager *sceneMgr = mInsert->getCreator(); - for(size_t i = 0;i < entities.size();i++) + for(size_t i = 0;i < entities.mEntities.size();i++) { - mEntityList.mSkelBase->detachObjectFromBone(entities[i]); - sceneMgr->destroyEntity(entities[i]); + mEntityList.mSkelBase->detachObjectFromBone(entities.mEntities[i]); + sceneMgr->destroyEntity(entities.mEntities[i]); } - entities.clear(); + entities.mEntities.clear(); + entities.mSkelBase = NULL; + entities.mRootNode = NULL; } void NpcAnimation::removeIndividualPart(int type) diff --git a/apps/openmw/mwrender/npcanimation.hpp b/apps/openmw/mwrender/npcanimation.hpp index 6fb549408..1eec1294f 100644 --- a/apps/openmw/mwrender/npcanimation.hpp +++ b/apps/openmw/mwrender/npcanimation.hpp @@ -19,26 +19,26 @@ private: int mPartPriorities[27]; //Bounded Parts - std::vector lclavicle; - std::vector rclavicle; - std::vector rupperArm; - std::vector lupperArm; - std::vector rUpperLeg; - std::vector lUpperLeg; - std::vector lForearm; - std::vector rForearm; - std::vector lWrist; - std::vector rWrist; - std::vector rKnee; - std::vector lKnee; - std::vector neck; - std::vector rAnkle; - std::vector lAnkle; - std::vector groin; - std::vector lfoot; - std::vector rfoot; - std::vector hair; - std::vector head; + NifOgre::EntityList lclavicle; + NifOgre::EntityList rclavicle; + NifOgre::EntityList rupperArm; + NifOgre::EntityList lupperArm; + NifOgre::EntityList rUpperLeg; + NifOgre::EntityList lUpperLeg; + NifOgre::EntityList lForearm; + NifOgre::EntityList rForearm; + NifOgre::EntityList lWrist; + NifOgre::EntityList rWrist; + NifOgre::EntityList rKnee; + NifOgre::EntityList lKnee; + NifOgre::EntityList neck; + NifOgre::EntityList rAnkle; + NifOgre::EntityList lAnkle; + NifOgre::EntityList groin; + NifOgre::EntityList lfoot; + NifOgre::EntityList rfoot; + NifOgre::EntityList hair; + NifOgre::EntityList head; bool isBeast; bool isFemale; @@ -63,10 +63,10 @@ private: public: NpcAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend, MWWorld::InventoryStore& _inv); virtual ~NpcAnimation(); - std::vector insertBoundedPart(const std::string &mesh, const std::string &bonename); + NifOgre::EntityList insertBoundedPart(const std::string &mesh, const std::string &bonename); virtual void runAnimation(float timepassed); void updateParts(); - void removeEntities(std::vector &entities); + void removeEntities(NifOgre::EntityList &entities); void removeIndividualPart(int type); void reserveIndividualPart(int type, int group, int priority);