diff options
Diffstat (limited to 'indra/newview/llagentwearables.cpp')
| -rwxr-xr-x | indra/newview/llagentwearables.cpp | 31 | 
1 files changed, 19 insertions, 12 deletions
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 49fedb8df8..f06ffb4fb3 100755 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1009,6 +1009,10 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  			continue;  		} +		// Don't care about this case - ordering of wearables with the same asset id has no effect. +		// Causes the two-alphas error case in MAINT-4158. +		// We should actually disallow wearing two wearables with the same asset id. +#if 0  		if (curr_wearable->getName() != new_item->getName() ||  			curr_wearable->getItemID() != new_item->getUUID())  		{ @@ -1019,6 +1023,7 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  			mismatched++;  			continue;  		} +#endif  		// If we got here, everything matches.  		matched++;  	} @@ -1083,7 +1088,6 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  	if (isAgentAvatarValid())  	{  		gAgentAvatarp->setCompositeUpdatesEnabled(TRUE); -		gAgentAvatarp->updateVisualParams();  		// If we have not yet declouded, we may want to use  		// baked texture UUIDs sent from the first objectUpdate message @@ -1101,6 +1105,12 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  	notifyLoadingFinished(); +	// Copy wearable params to avatar. +	gAgentAvatarp->writeWearablesToAvatar(); + +	// Then update the avatar based on the copied params. +	gAgentAvatarp->updateVisualParams(); +  	gAgentAvatarp->dumpAvatarTEs("setWearableOutfit");  	LL_DEBUGS("Avatar") << "setWearableOutfit() end" << LL_ENDL; @@ -1243,9 +1253,12 @@ void LLAgentWearables::userRemoveWearablesOfType(const LLWearableType::EType &ty  	}  } -// Combines userRemoveMulipleAttachments() and userAttachMultipleAttachments() logic to -// get attachments into desired state with minimal number of adds/removes. -void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array) +// Given a desired set of attachments, find what objects need to be +// removed, and what additional inventory items need to be added. +void LLAgentWearables::findAttachmentsAddRemoveInfo(LLInventoryModel::item_array_t& obj_item_array, +													llvo_vec_t& objects_to_remove, +													llvo_vec_t& objects_to_retain, +													LLInventoryModel::item_array_t& items_to_add)  {  	// Possible cases:  	// already wearing but not in request set -> take off. @@ -1264,7 +1277,6 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj  	}  	// Build up list of objects to be removed and items currently attached. -	llvo_vec_t objects_to_remove;  	for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();   		 iter != gAgentAvatarp->mAttachmentPoints.end();)  	{ @@ -1299,12 +1311,12 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj  				{  					// LL_INFOS() << "found object to keep, id " << objectp->getID() << ", item " << objectp->getAttachmentItemID() << LL_ENDL;  					current_item_ids.insert(object_item_id); +					objects_to_retain.push_back(objectp);  				}  			}  		}  	} -	LLInventoryModel::item_array_t items_to_add;  	for (LLInventoryModel::item_array_t::iterator it = obj_item_array.begin();  		 it != obj_item_array.end();  		 ++it) @@ -1323,12 +1335,6 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj  	// S32 remove_count = objects_to_remove.size();  	// S32 add_count = items_to_add.size();  	// LL_INFOS() << "remove " << remove_count << " add " << add_count << LL_ENDL; - -	// Remove everything in objects_to_remove -	userRemoveMultipleAttachments(objects_to_remove); - -	// Add everything in items_to_add -	userAttachMultipleAttachments(items_to_add);  }  void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remove) @@ -1348,6 +1354,7 @@ void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remo  		 ++it)  	{  		LLViewerObject *objectp = *it; +		//gAgentAvatarp->resetJointPositionsOnDetach(objectp);  		gMessageSystem->nextBlockFast(_PREHASH_ObjectData);  		gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, objectp->getLocalID());  	}  | 
