diff options
author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2016-05-17 16:06:27 -0400 |
---|---|---|
committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2016-05-17 16:06:27 -0400 |
commit | 82111ecbde4bacd4cbd5ae5d076876d0ddedd04d (patch) | |
tree | 197c9172917d24dd98cc611ae3f3753df2b2400d /indra | |
parent | d0dea44c010ec4e747b139ce55013e3203ba980a (diff) |
SL-315 - resetSkeleton() fixes, mostly to get better behavior with non-self avs
Diffstat (limited to 'indra')
-rwxr-xr-x | indra/llappearance/llavatarappearance.cpp | 2 | ||||
-rwxr-xr-x | indra/llappearance/lldriverparam.h | 4 | ||||
-rwxr-xr-x | indra/newview/character/avatar_lad.xml | 2 | ||||
-rwxr-xr-x | indra/newview/llvoavatar.cpp | 49 | ||||
-rwxr-xr-x | indra/newview/llvoavatar.h | 2 |
5 files changed, 26 insertions, 33 deletions
diff --git a/indra/llappearance/llavatarappearance.cpp b/indra/llappearance/llavatarappearance.cpp index 4f01665449..2ce43436db 100755 --- a/indra/llappearance/llavatarappearance.cpp +++ b/indra/llappearance/llavatarappearance.cpp @@ -601,7 +601,7 @@ BOOL LLAvatarAppearance::setupBone(const LLAvatarBoneInfo* info, LLJoint* parent } // add to parent - if (parent) + if (parent && (joint->getParent()!=parent)) { parent->addChild( joint ); } diff --git a/indra/llappearance/lldriverparam.h b/indra/llappearance/lldriverparam.h index f71c930e5e..05b4f2252e 100755 --- a/indra/llappearance/lldriverparam.h +++ b/indra/llappearance/lldriverparam.h @@ -128,6 +128,10 @@ public: S32 getDrivenParamsCount() const; const LLViewerVisualParam* getDrivenParam(S32 index) const; + typedef std::vector<LLDrivenEntry> entry_list_t; + entry_list_t& getDrivenList() { return mDriven; } + void setDrivenList(entry_list_t& driven_list) { mDriven = driven_list; } + protected: LLDriverParam(const LLDriverParam& pOther); F32 getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight); diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index 53faf1149b..fcb4709c6c 100755 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -3204,7 +3204,7 @@ id="30024" group="1" name="Wide_Eyes" - value_min="-2" + value_min="-1.5" value_max="2"> <param_skeleton> diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 9286a70886..23008839ee 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1806,7 +1806,7 @@ void LLVOAvatar::buildCharacter() //----------------------------------------------------------------------------- void LLVOAvatar::resetVisualParams() { - // SKELETAL DISTORTIONS + // Skeletal params { LLAvatarXmlInfo::skeletal_distortion_info_list_t::iterator iter; for (iter = sAvatarXmlInfo->mSkeletalDistortionInfoList.begin(); @@ -1823,35 +1823,23 @@ void LLVOAvatar::resetVisualParams() } } } -#if 0 - // avatar_lad.xml : <driver_parameters> + + // Driver parameters for (LLAvatarXmlInfo::driver_info_list_t::iterator iter = sAvatarXmlInfo->mDriverInfoList.begin(); iter != sAvatarXmlInfo->mDriverInfoList.end(); ++iter) { LLDriverParamInfo *info = *iter; - LLDriverParam* driver_param = new LLDriverParam( this ); - if (driver_param->setInfo(info)) - { - addVisualParam( driver_param ); - driver_param->setParamLocation(isSelf() ? LOC_AV_SELF : LOC_AV_OTHER); - LLVisualParam*(LLAvatarAppearance::*avatar_function)(S32)const = &LLAvatarAppearance::getVisualParam; - if( !driver_param->linkDrivenParams(boost::bind(avatar_function,(LLAvatarAppearance*)this,_1 ), false)) - { - LL_WARNS() << "could not link driven params for avatar " << getID().asString() << " param id: " << driver_param->getID() << LL_ENDL; - continue; - } - } - else - { - delete driver_param; - LL_WARNS() << "avatar file: driver_param->parseData() failed" << LL_ENDL; - return FALSE; - } + LLDriverParam *param = dynamic_cast<LLDriverParam*>(getVisualParam(info->getID())); + LLDriverParam::entry_list_t driven_list = param->getDrivenList(); + *param = LLDriverParam(this); + llassert(param); + if (!param->setInfo(info)) + { + llassert(false); + } + param->setDrivenList(driven_list); } -#endif - - } //----------------------------------------------------------------------------- @@ -1871,7 +1859,7 @@ void LLVOAvatar::resetSkeleton() // Clear all attachment pos overrides clearAttachmentPosOverrides(); - // Reset all params to default state, without propagating changes downstream. + // Reset some params to default state, without propagating changes downstream. resetVisualParams(); // Reset all bones and collision volumes to their initial skeleton state. @@ -1900,8 +1888,8 @@ void LLVOAvatar::resetSkeleton() } // Reset tweakable params to preserved state - // Apply params - applyParsedAppearanceMessage(*mLastProcessedAppearance); + bool slam_params = true; + applyParsedAppearanceMessage(*mLastProcessedAppearance, slam_params); updateVisualParams(); @@ -7837,10 +7825,11 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) mLastUpdateReceivedCOFVersion = this_update_cof_version; mLastProcessedAppearance = contents; - applyParsedAppearanceMessage(*contents); + bool slam_params = false; + applyParsedAppearanceMessage(*contents, slam_params); } -void LLVOAvatar::applyParsedAppearanceMessage(LLAppearanceMessageContents& contents) +void LLVOAvatar::applyParsedAppearanceMessage(LLAppearanceMessageContents& contents, bool slam_params) { S32 num_params = contents.mParamWeights.size(); ESex old_sex = getSex(); @@ -7900,7 +7889,7 @@ void LLVOAvatar::applyParsedAppearanceMessage(LLAppearanceMessageContents& conte params_changed = TRUE; params_changed_count++; - if(is_first_appearance_message) + if(is_first_appearance_message || slam_params) { //LL_DEBUGS("Avatar") << "param slam " << i << " " << newWeight << LL_ENDL; param->setWeight(newWeight); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 91de5c4217..cca9f0dd1a 100755 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -679,7 +679,7 @@ protected: public: void parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMessageContents& msg); void processAvatarAppearance(LLMessageSystem* mesgsys); - void applyParsedAppearanceMessage(LLAppearanceMessageContents& contents); + void applyParsedAppearanceMessage(LLAppearanceMessageContents& contents, bool slam_params); void hideSkirt(); void startAppearanceAnimation(); |