Esempio n. 1
0
shared_ptr<Skeleton> Skeleton::Clone()
{
	shared_ptr<Skeleton> skeleton = std::make_shared<Skeleton>();

	skeleton->mBones.resize(mBones.size());
	for (size_t i = 0; i < mBones.size(); ++i)
	{
		Bone* newBone =  new Bone( mBones[i]->GetName(), i, nullptr);
		newBone->SetPosition(mBones[i]->GetPosition());
		newBone->SetRotation(mBones[i]->GetRotation());
		newBone->SetScale(mBones[i]->GetScale());
		newBone->mOffsetMatrix = mBones[i]->mOffsetMatrix;

		skeleton->mBones[i] = newBone;
	}

	for (size_t i = 0; i < mBones.size(); ++i)
	{
		Bone* parentBone = (static_cast<Bone*>(mBones[i]->GetParent()));
		if (parentBone)
		{
			uint32_t parentIndex =  parentBone->GetBoneIndex();
			skeleton->mBones[parentIndex]->AttachChild(skeleton->mBones[i]);
		}
	}

	return skeleton;
}