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