diff options
| author | prep@lindenlab.com <prep@lindenlab.com> | 2013-04-02 17:27:20 -0500 | 
|---|---|---|
| committer | prep@lindenlab.com <prep@lindenlab.com> | 2013-04-02 17:27:20 -0500 | 
| commit | 96d87aa85e84bb8327f4efd8bbf57f69bbdf0f03 (patch) | |
| tree | afa0e0bcbff42dc0151f494fb2764869f4d70338 /indra | |
| parent | ef6242d7294f965625e9848ed334c7b33bafaad0 (diff) | |
| parent | 49731dd21dec5fb8b6e5781940bab5f5fa9600a2 (diff) | |
merge
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llagentwearables.cpp | 50 | ||||
| -rw-r--r-- | indra/newview/llagentwearables.h | 2 | ||||
| -rwxr-xr-x | indra/newview/llvoavatar.cpp | 2 | 
3 files changed, 43 insertions, 11 deletions
| diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index ba04991a02..3cee7826fd 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1124,14 +1124,19 @@ void LLAgentWearables::addWearableToAgentInventory(LLPointer<LLInventoryCallback  						  cb);  } -void LLAgentWearables::removeWearable(const LLWearableType::EType type, bool do_remove_all, U32 index) +void LLAgentWearables::removeWearable(const LLWearableType::EType type, bool do_remove_all, U32 index, BOOL will_replace)  { -	if (gAgent.isTeen() && +	if (gAgent.isTeen() &&   		(type == LLWearableType::WT_UNDERSHIRT || type == LLWearableType::WT_UNDERPANTS))  	{  		// Can't take off underclothing in simple UI mode or on PG accounts -		// TODO: enable the removing of a single undershirt/underpants if multiple are worn. - Nyx -		return; +		 +		if (getWearableCount(type) < 2 && !will_replace)  +		{ +			// if there is 0 or 1 undergarment worn, and we're not going to be immediately adding another, +			// we cannot allow the removal for teen accounts +			return; +		}  	}  	if (getWearableCount(type) == 0)  	{ @@ -1239,6 +1244,31 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  {  	llinfos << "setWearableOutfit() start" << llendl; +	S32 count = wearables.count(); +	llassert(items.count() == count); +	S32 i; + +	bool has_undershirt = false; +	bool has_underpants = false; + +	for (i = 0; i < count; i++) +	{ +		LLViewerWearable* new_wearable = wearables[i]; +		if (new_wearable) +		{ +			const LLWearableType::EType type = new_wearable->getType(); +			if (type == LLWearableType::WT_UNDERSHIRT)  +			{ +				has_undershirt = true; +			} +			if (type == LLWearableType::WT_UNDERPANTS)  +			{ +				has_underpants = true; +			} +		} +	} + +  	// TODO: Removed check for ensuring that teens don't remove undershirt and underwear. Handle later  	if (remove)  	{ @@ -1248,15 +1278,17 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  		{  			if (LLWearableType::getAssetType((LLWearableType::EType)type) == LLAssetType::AT_CLOTHING)  			{ -				removeWearable((LLWearableType::EType)type, true, 0); +				bool will_replace = false; +				if ((type == LLWearableType::WT_UNDERSHIRT && has_undershirt) ||  +					(type == LLWearableType::WT_UNDERPANTS && has_underpants)) +				{ +					will_replace = true; +				} +				removeWearable((LLWearableType::EType)type, true, 0, will_replace);  			}  		}  	} -	S32 count = wearables.count(); -	llassert(items.count() == count); - -	S32 i;  	for (i = 0; i < count; i++)  	{  		LLViewerWearable* new_wearable = wearables[i]; diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 5be4648636..f2f224a573 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -146,7 +146,7 @@ private:  	// Removing wearables  	//--------------------------------------------------------------------  public: -	void			removeWearable(const LLWearableType::EType type, bool do_remove_all /*= false*/, U32 index /*= 0*/); +	void			removeWearable(const LLWearableType::EType type, bool do_remove_all /*= false*/, U32 index /*= 0*/, BOOL will_replace = false);  private:  	void			removeWearableFinal(const LLWearableType::EType type, bool do_remove_all /*= false*/, U32 index /*= 0*/);  protected: diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 0ec6ef3d14..725939dd3e 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2144,7 +2144,7 @@ void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled)  		{  			LLVector3 tagPos = mRoot->getWorldPosition();  			tagPos[VZ] -= mPelvisToFoot; -			tagPos[VZ] += ( mBodySize[VZ] + mAvatarOffset[VZ] + 0.125f ); +			tagPos[VZ] += ( mBodySize[VZ] + 0.125f );  			mVoiceVisualizer->setVoiceSourceWorldPosition( tagPos );  		}  	}//if ( voiceEnabled ) | 
