diff --git a/components/sceneutil/skeleton.cpp b/components/sceneutil/skeleton.cpp index 45ccefe6e5..5c8449a50d 100644 --- a/components/sceneutil/skeleton.cpp +++ b/components/sceneutil/skeleton.cpp @@ -5,6 +5,8 @@ #include #include +#include + namespace SceneUtil { @@ -75,24 +77,16 @@ Bone* Skeleton::getBone(const std::string &name) Bone* bone = mRootBone.get(); for (osg::MatrixTransform* matrixTransform : found->second) { - Bone* child = nullptr; - for (unsigned int i=0; imChildren.size(); ++i) - { - if (bone->mChildren[i]->mNode == matrixTransform) - { - child = bone->mChildren[i].get(); - break; - } - } + const auto it = std::find_if(bone->mChildren.begin(), bone->mChildren.end(), + [&] (const auto& v) { return v->mNode == matrixTransform; }); - if (child == nullptr) + if (it == bone->mChildren.end()) { - auto childBone = std::make_unique(); - child = childBone.get(); - bone->mChildren.push_back(std::move(childBone)); + bone = bone->mChildren.emplace_back(std::make_unique()).get(); mNeedToUpdateBoneMatrices = true; } - bone = child; + else + bone = it->get(); bone->mNode = matrixTransform; } @@ -111,8 +105,8 @@ void Skeleton::updateBoneMatrices(unsigned int traversalNumber) { if (mRootBone.get()) { - for (unsigned int i=0; imChildren.size(); ++i) - mRootBone->mChildren[i]->update(nullptr); + for (const auto& child : mRootBone->mChildren) + child->update(nullptr); } mNeedToUpdateBoneMatrices = false; @@ -178,10 +172,8 @@ void Bone::update(const osg::Matrixf* parentMatrixInSkeletonSpace) else mMatrixInSkeletonSpace = mNode->getMatrix(); - for (unsigned int i=0; iupdate(&mMatrixInSkeletonSpace); - } + for (const auto& child : mChildren) + child->update(&mMatrixInSkeletonSpace); } }