diff options
-rw-r--r-- | indra/llappearance/llpolyskeletaldistortion.cpp | 3 | ||||
-rwxr-xr-x | indra/llcharacter/lljoint.cpp | 16 | ||||
-rwxr-xr-x | indra/llcharacter/lljoint.h | 2 |
3 files changed, 18 insertions, 3 deletions
diff --git a/indra/llappearance/llpolyskeletaldistortion.cpp b/indra/llappearance/llpolyskeletaldistortion.cpp index 722965af28..484969a9d9 100644 --- a/indra/llappearance/llpolyskeletaldistortion.cpp +++ b/indra/llappearance/llpolyskeletaldistortion.cpp @@ -226,7 +226,8 @@ void LLPolySkeletalDistortion::apply( ESex avatar_sex ) LLVector3 positionDelta = iter->second; newPosition = newPosition + (effective_weight * positionDelta) - (mLastWeight * positionDelta); // SL-315 - joint->setPosition(newPosition); + // BENTO - allow attachment positions to override requests from the params. + joint->setPosition(newPosition, true); } if (mLastWeight != mCurWeight && !mIsAnimating) diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp index 3ad919072d..8365ab8eb1 100755 --- a/indra/llcharacter/lljoint.cpp +++ b/indra/llcharacter/lljoint.cpp @@ -336,8 +336,22 @@ bool do_debug_joint(const std::string& name) //-------------------------------------------------------------------- // setPosition() //-------------------------------------------------------------------- -void LLJoint::setPosition( const LLVector3& pos ) +void LLJoint::setPosition( const LLVector3& requested_pos, bool apply_attachment_overrides ) { + LLVector3 pos(requested_pos); + + LLVector3 active_override; + LLUUID mesh_id; + if (apply_attachment_overrides && m_attachmentOverrides.findActiveOverride(mesh_id,active_override)) + { + if (pos != active_override && do_debug_joint(getName())) + { + LLScopedContextString str("setPosition"); + LL_DEBUGS("Avatar") << " joint " << getName() << " requested_pos " << requested_pos + << " overriden by attachment " << active_override << LL_ENDL; + } + pos = active_override; + } if ((pos != getPosition()) && do_debug_joint(getName())) { LLScopedContextString str("setPosition"); diff --git a/indra/llcharacter/lljoint.h b/indra/llcharacter/lljoint.h index c967770cff..d2c573864b 100755 --- a/indra/llcharacter/lljoint.h +++ b/indra/llcharacter/lljoint.h @@ -209,7 +209,7 @@ public: // get/set local position const LLVector3& getPosition(); - void setPosition( const LLVector3& pos ); + void setPosition( const LLVector3& pos, bool apply_attachment_overrides = false ); // Tracks the default position defined by the skeleton void setDefaultPosition( const LLVector3& pos ); |