keep a cleanup falg and update it if cleanup is required.
and then cleanup at onece all the orphan animators.
when there are no orphan animators we don't have to walk the animators twice.
Change-Id: I9c2f7f2bef9a7655481743a22abdf366d8b12f21
const Vector2 playRange( mPlayRange * mDurationSeconds );
float elapsedSecondsClamped = Clamp( mElapsedSeconds, playRange.x, playRange.y );
const Vector2 playRange( mPlayRange * mDurationSeconds );
float elapsedSecondsClamped = Clamp( mElapsedSeconds, playRange.x, playRange.y );
- //Remove animators whose PropertyOwner has been destroyed
- mAnimators.Erase(std::remove_if(mAnimators.begin(),
- mAnimators.end(),
- [](auto animator) { return animator->Orphan(); }),
- mAnimators.end());
//Loop through all animators
for(auto& animator : mAnimators)
{
//Loop through all animators
for(auto& animator : mAnimators)
{
+ if(animator->Orphan())
+ {
+ cleanup = true;
+ continue;
+ }
+
bool applied(true);
if(animator->IsEnabled())
{
bool applied(true);
if(animator->IsEnabled())
{
INCREASE_COUNTER(PerformanceMonitor::ANIMATORS_APPLIED);
}
}
INCREASE_COUNTER(PerformanceMonitor::ANIMATORS_APPLIED);
}
}
+
+ if(cleanup)
+ {
+ //Remove animators whose PropertyOwner has been destroyed
+ mAnimators.Erase(std::remove_if(mAnimators.begin(),
+ mAnimators.end(),
+ [](auto& animator) { return animator->Orphan(); }),
+ mAnimators.end());
+ }
}
} // namespace SceneGraph
}
} // namespace SceneGraph