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);
    }
}