PhysicsRagDoll::PhysicsRagDoll(const Ogre::String& ragdollResource, Actor* actor) : mRootBone(NULL), mNode(NULL), mWorld(NULL), mMesh(NULL), mSkeleton(NULL) { mRootBone = NULL; mNode = actor->_getSceneNode(); mWorld = PhysicsManager::getSingleton()._getNewtonWorld(); if (!actor->getControlledObject()->isMeshObject()) Throw(IllegalArgumentException, "PhysicsRagDoll::PhysicsRagDoll needs a Mesh-Actor as argument!"); MeshObject* meshObj = static_cast<MeshObject*>(actor->getControlledObject()); // stop all animations meshObj->stopAllAnimations(); // get the skeleton. mSkeleton = meshObj->getEntity()->getSkeleton(); // get the mesh. mMesh = meshObj->getEntity()->getMesh(); LOG_MESSAGE(Logger::CORE, "Loading ragdoll '" + ragdollResource + "'"); TiXmlDocument* doc = loadDocument(ragdollResource); if (!doc) { LOG_ERROR(Logger::CORE, "Ragdoll resource '" + ragdollResource + "' not found"); } else { TiXmlElement* dataDocumentContent = doc->RootElement(); mRootBone =_addAllBones(NULL, getChildNamed(dataDocumentContent, "Bone"), actor); } }