diff options
| author | Nyx (Neal Orman) <nyx@lindenlab.com> | 2009-10-29 15:17:39 -0400 | 
|---|---|---|
| committer | Nyx (Neal Orman) <nyx@lindenlab.com> | 2009-10-29 15:17:39 -0400 | 
| commit | 1c0faee6e7711dcf0c8a13e4dbc5f75e95b1bf4d (patch) | |
| tree | f86343eebe9bac35eb2ba21c4a4e5b8d51a79903 /indra/newview | |
| parent | d28e37b9fc0413a24e75a2a7c78a109abbe67330 (diff) | |
| parent | 011f3786b34904d2197817151600dd876679dbbe (diff) | |
Automated merge with ssh://hg.lindenlab.com/viewer/viewer-2-0/
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llagentwearables.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llagentwearables.h | 2 | ||||
| -rw-r--r-- | indra/newview/lldriverparam.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/lltexlayerparams.cpp | 17 | ||||
| -rw-r--r-- | indra/newview/lltexlayerparams.h | 1 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 47 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.h | 5 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.cpp | 40 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.h | 2 | ||||
| -rw-r--r-- | indra/newview/llwearable.cpp | 31 | ||||
| -rw-r--r-- | indra/newview/llwearable.h | 1 | 
11 files changed, 108 insertions, 50 deletions
| diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index b9a0b4293d..d764dc4f3a 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1985,6 +1985,17 @@ bool LLAgentWearables::canWearableBeRemoved(const LLWearable* wearable) const  	return !(((type == WT_SHAPE) || (type == WT_SKIN) || (type == WT_HAIR) || (type == WT_EYES))  			 && (getWearableCount(type) <= 1) );		    } +void LLAgentWearables::animateAllWearableParams(F32 delta, BOOL set_by_user) +{ +	for( S32 type = 0; type < WT_COUNT; ++type ) +	{ +		for (S32 count = 0; count < getWearableCount((EWearableType)type); ++count) +		{ +			LLWearable *wearable = getWearable((EWearableType)type,count); +			wearable->animateParams(delta, set_by_user); +		} +	} +}  void LLAgentWearables::updateServer()  { diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 667cb94552..97de785c87 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -79,6 +79,8 @@ public:  	// Note: False for shape, skin, eyes, and hair, unless you have MORE than 1.  	bool			canWearableBeRemoved(const LLWearable* wearable) const; + +	void			animateAllWearableParams(F32 delta, BOOL set_by_user);  	//--------------------------------------------------------------------  	// Accessors diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp index 45f4b4fbd0..527656ab6b 100644 --- a/indra/newview/lldriverparam.cpp +++ b/indra/newview/lldriverparam.cpp @@ -224,6 +224,7 @@ void LLDriverParam::setAvatar(LLVOAvatar *avatarp)  		}  	}  	*new_param = *this; +	new_param->setIsDummy(FALSE);  	return new_param;  } diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp index e1643af71d..74e0fa077e 100644 --- a/indra/newview/lltexlayerparams.cpp +++ b/indra/newview/lltexlayerparams.cpp @@ -42,8 +42,7 @@  //-----------------------------------------------------------------------------  LLTexLayerParam::LLTexLayerParam(LLTexLayerInterface *layer) :  	mTexLayer(layer), -	mAvatar(NULL), -	mIsWearableParam(TRUE) +	mAvatar(NULL)  {  	if (mTexLayer != NULL)  	{ @@ -56,8 +55,7 @@ LLTexLayerParam::LLTexLayerParam(LLTexLayerInterface *layer) :  }  LLTexLayerParam::LLTexLayerParam(LLVOAvatar *avatar) : -	mTexLayer(NULL), -	mIsWearableParam(FALSE) +	mTexLayer(NULL)  {  	mAvatar = avatar;  } @@ -177,7 +175,7 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user)  	{  		mCurWeight = new_weight; -		if ((mAvatar->getSex() & getSex()) && !mIsWearableParam) // only trigger a baked texture update if we're changing a wearable's visual param. +		if ((mAvatar->getSex() & getSex()) && (mAvatar->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param.  		{  			if (gAgent.cameraCustomizeAvatar())  			{ @@ -192,6 +190,13 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user)  void LLTexLayerParamAlpha::setAnimationTarget(F32 target_value, BOOL set_by_user)  {  +	// do not animate dummy parameters +	if (mIsDummy) +	{ +		setWeight(target_value, set_by_user); +		return; +	} +  	mTargetWeight = target_value;   	setWeight(target_value, set_by_user);   	mIsAnimating = TRUE; @@ -468,7 +473,7 @@ void LLTexLayerParamColor::setWeight(F32 weight, BOOL set_by_user)  			return;  		} -		if ((mAvatar->getSex() & getSex()) && !mIsWearableParam) // only trigger a baked texture update if we're changing a wearable's visual param. +		if ((mAvatar->getSex() & getSex()) && (mAvatar->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param.  		{  			onGlobalColorChanged(set_by_user);  			if (mTexLayer) diff --git a/indra/newview/lltexlayerparams.h b/indra/newview/lltexlayerparams.h index dcb108bbf6..98365864f9 100644 --- a/indra/newview/lltexlayerparams.h +++ b/indra/newview/lltexlayerparams.h @@ -49,7 +49,6 @@ public:  protected:  	LLTexLayerInterface*	mTexLayer;  	LLVOAvatar*             mAvatar; -	BOOL					mIsWearableParam;  };  //----------------------------------------------------------------------------- diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index f9c95afc31..4bf66ba17e 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2448,28 +2448,20 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()  		}  		else  		{ -			F32 blend_frac = calc_bouncy_animation(appearance_anim_time / APPEARANCE_MORPH_TIME); -			F32 last_blend_frac = calc_bouncy_animation(mLastAppearanceBlendTime / APPEARANCE_MORPH_TIME); -			F32 morph_amt; -			if (last_blend_frac == 1.f) -			{ -				morph_amt = 1.f; -			} -			else -			{ -				morph_amt = (blend_frac - last_blend_frac) / (1.f - last_blend_frac); -			} - +			F32 morph_amt = calcMorphAmount();  			LLVisualParam *param; -			// animate only top level params -			for (param = getFirstVisualParam(); -				 param; -				 param = getNextVisualParam()) +			if (!isSelf())  			{ -				if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +				// animate only top level params for non-self avatars +				for (param = getFirstVisualParam(); +					 param; +					 param = getNextVisualParam())  				{ -					param->animate(morph_amt, mAppearanceAnimSetByUser); +					if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +					{ +						param->animate(morph_amt, mAppearanceAnimSetByUser); +					}  				}  			} @@ -2487,6 +2479,25 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()  	}  } +F32 LLVOAvatar::calcMorphAmount() +{ +	F32 appearance_anim_time = mAppearanceMorphTimer.getElapsedTimeF32(); +	F32 blend_frac = calc_bouncy_animation(appearance_anim_time / APPEARANCE_MORPH_TIME); +	F32 last_blend_frac = calc_bouncy_animation(mLastAppearanceBlendTime / APPEARANCE_MORPH_TIME); + +	F32 morph_amt; +	if (last_blend_frac == 1.f) +	{ +		morph_amt = 1.f; +	} +	else +	{ +		morph_amt = (blend_frac - last_blend_frac) / (1.f - last_blend_frac); +	} + +	return morph_amt; +} +  void LLVOAvatar::idleUpdateLipSync(bool voice_enabled)  {  	// Use the Lipsync_Ooh and Lipsync_Aah morphs for lip sync diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index e3add8aa78..f7c794defe 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -205,7 +205,7 @@ public:  	virtual BOOL 	updateCharacter(LLAgent &agent);  	void 			idleUpdateVoiceVisualizer(bool voice_enabled);  	void 			idleUpdateMisc(bool detailed_update); -	void 			idleUpdateAppearanceAnimation(); +	virtual void	idleUpdateAppearanceAnimation();  	void 			idleUpdateLipSync(bool voice_enabled);  	void 			idleUpdateLoadingEffect();  	void 			idleUpdateWindEffect(); @@ -250,6 +250,7 @@ protected:  	virtual BOOL	updateIsFullyLoaded();  	BOOL			processFullyLoadedChange(bool loading);  	void			updateRuthTimer(bool loading); +	F32 			calcMorphAmount();  private:  	BOOL			mFullyLoaded;  	BOOL			mPreviousFullyLoaded; @@ -276,7 +277,7 @@ public:  protected:  	static BOOL			parseSkeletonFile(const std::string& filename);  	void				buildCharacter(); -	BOOL				loadAvatar(); +	virtual BOOL		loadAvatar();  	BOOL				setupBone(const LLVOAvatarBoneInfo* info, LLViewerJoint* parent, S32 ¤t_volume_num, S32 ¤t_joint_num);  	BOOL				buildSkeleton(const LLVOAvatarSkeletonInfo *info); diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 4760d5a472..758db538a2 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -193,6 +193,25 @@ void LLVOAvatarSelf::markDead()  	LLVOAvatar::markDead();  } +/*virtual*/ BOOL LLVOAvatarSelf::loadAvatar() +{ +	BOOL success = LLVOAvatar::loadAvatar(); + +	// set all parameters sotred directly in the avatar to have +	// the isSelfParam to be TRUE - this is used to prevent +	// them from being animated or trigger accidental rebakes +	// when we copy params from the wearable to the base avatar. +	for (LLViewerVisualParam* param = (LLViewerVisualParam*) getFirstVisualParam();  +		 param; +		 param = (LLViewerVisualParam*) getNextVisualParam()) +	{ +		param->setIsDummy(TRUE); +	} + +	return success; +} + +  BOOL LLVOAvatarSelf::loadAvatarSelf()  {  	BOOL success = TRUE; @@ -704,16 +723,23 @@ void LLVOAvatarSelf::updateVisualParams()  		}  	} -	LLWearable *shape = gAgentWearables.getWearable(WT_SHAPE,0); -	if (shape) -	{ -		F32 gender = shape->getVisualParamWeight(80); // param 80 == gender -		setVisualParamWeight("male",gender ,TRUE); -	} -  	LLVOAvatar::updateVisualParams();  } +/*virtual*/ +void LLVOAvatarSelf::idleUpdateAppearanceAnimation() +{ +	// Animate all top-level wearable visual parameters +	gAgentWearables.animateAllWearableParams(calcMorphAmount(), mAppearanceAnimSetByUser); + +	// apply wearable visual params to avatar +	updateVisualParams(); + +	//allow avatar to process updates +	LLVOAvatar::idleUpdateAppearanceAnimation(); + +} +  // virtual  void LLVOAvatarSelf::requestStopMotion(LLMotion* motion)  { diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index a555d04a63..6e52b33634 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -57,6 +57,7 @@ public:  	virtual void			markDead();  	virtual void 		initInstance(); // Called after construction to initialize the class.  protected: +	/*virtual*/ BOOL		loadAvatar();  	BOOL					loadAvatarSelf();  	BOOL					buildSkeletonSelf(const LLVOAvatarSkeletonInfo *info);  	BOOL					buildMenus(); @@ -89,6 +90,7 @@ public:  	/*virtual*/ BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user = FALSE );  	/*virtual*/ BOOL setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user = FALSE );  	/*virtual*/ void updateVisualParams(); +	/*virtual*/ void idleUpdateAppearanceAnimation();  private:  	// helper function. Passed in param is assumed to be in avatar's parameter list. diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index a091028ec2..4cd29bb838 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -185,7 +185,9 @@ void LLWearable::createVisualParams()  			{  				delete mVisualParamIndexMap[param->getID()];  			} -			mVisualParamIndexMap[param->getID()] = param->cloneParam(this); +			LLViewerVisualParam *new_param = param->cloneParam(this); +			new_param->setIsDummy(FALSE); +			mVisualParamIndexMap[param->getID()] = new_param;  		}  	} @@ -668,21 +670,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater  	if( gFloaterCustomize && update_customize_floater )  	{ -		LLViewerInventoryItem* item; -		// MULTI_WEARABLE: -		item = (LLViewerInventoryItem*)gInventory.getItem(gAgentWearables.getWearableItemID(mType,0)); -		U32 perm_mask = PERM_NONE; -		BOOL is_complete = FALSE; -		if(item) -		{ -			perm_mask = item->getPermissions().getMaskOwner(); -			is_complete = item->isComplete(); -			if(!is_complete) -			{ -				item->fetchFromServer(); -			} -		} -		gFloaterCustomize->setWearable(mType, this, perm_mask, is_complete); +		gFloaterCustomize->setWearable(mType, 0);  		gFloaterCustomize->setCurrentWearableType( mType );  	} @@ -935,6 +923,17 @@ void LLWearable::getVisualParams(visual_param_vec_t &list)  	}  } +void LLWearable::animateParams(F32 delta, BOOL set_by_user) +{ +	for(visual_param_index_map_t::iterator iter = mVisualParamIndexMap.begin(); +		 iter != mVisualParamIndexMap.end(); +		 ++iter) +	{ +		LLVisualParam *param = (LLVisualParam*) iter->second; +		param->animate(delta, set_by_user); +	} +} +  LLColor4 LLWearable::getClothesColor(S32 te) const  {  	LLColor4 color; diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h index 01bd9652a5..96631811c5 100644 --- a/indra/newview/llwearable.h +++ b/indra/newview/llwearable.h @@ -119,6 +119,7 @@ public:  	F32					getVisualParamWeight(S32 index) const;  	LLVisualParam*		getVisualParam(S32 index) const;  	void				getVisualParams(visual_param_vec_t &list); +	void				animateParams(F32 delta, BOOL set_by_user);  	LLColor4			getClothesColor(S32 te) const;  	void 				setClothesColor( S32 te, const LLColor4& new_color, BOOL set_by_user ); | 
