diff options
Diffstat (limited to 'indra/newview/llviewerobject.cpp')
-rw-r--r-- | indra/newview/llviewerobject.cpp | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 5908d160e2..bde38029d0 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2969,24 +2969,25 @@ LLControlAvatar *LLViewerObject::getControlAvatar() const void LLViewerObject::updateControlAvatar() { LLViewerObject *root = getRootEdit(); - if (root->isAnimatedObject() && !root->getControlAvatar()) + bool any_rigged_mesh = root->isRiggedMesh(); + LLViewerObject::const_child_list_t& child_list = root->getChildren(); + for (LLViewerObject::const_child_list_t::const_iterator iter = child_list.begin(); + iter != child_list.end(); ++iter) { - bool any_rigged_mesh = root->isRiggedMesh(); - LLViewerObject::const_child_list_t& child_list = root->getChildren(); - for (LLViewerObject::const_child_list_t::const_iterator iter = child_list.begin(); - iter != child_list.end(); ++iter) - { - const LLViewerObject* child = *iter; - any_rigged_mesh = any_rigged_mesh || child->isRiggedMesh(); - } - if (any_rigged_mesh) - { - std::string vobj_name = llformat("Vol%p", root); - LL_DEBUGS("AnimatedObjects") << vobj_name << " calling linkControlAvatar()" << LL_ENDL; - root->linkControlAvatar(); - } + const LLViewerObject* child = *iter; + any_rigged_mesh = any_rigged_mesh || child->isRiggedMesh(); + } + + bool has_control_avatar = getControlAvatar(); + bool should_have_control_avatar = root->isAnimatedObject() && any_rigged_mesh; + + if (should_have_control_avatar && !has_control_avatar) + { + std::string vobj_name = llformat("Vol%p", root); + LL_DEBUGS("AnimatedObjects") << vobj_name << " calling linkControlAvatar()" << LL_ENDL; + root->linkControlAvatar(); } - if (!root->isAnimatedObject() && root->getControlAvatar()) + if (!should_have_control_avatar && has_control_avatar) { std::string vobj_name = llformat("Vol%p", root); LL_DEBUGS("AnimatedObjects") << vobj_name << " calling unlinkControlAvatar()" << LL_ENDL; |