summaryrefslogtreecommitdiff
path: root/indra/newview/llviewerobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewerobject.cpp')
-rw-r--r--indra/newview/llviewerobject.cpp33
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;