diff options
| author | Loren Shih <seraph@lindenlab.com> | 2009-10-21 23:08:48 +0000 | 
|---|---|---|
| committer | Loren Shih <seraph@lindenlab.com> | 2009-10-21 23:08:48 +0000 | 
| commit | 67c4555a3793850ca8a8142b1e3e72c90d5001f4 (patch) | |
| tree | 4ba917e75afd155c7090ba9b5ed876bb8f9556cc | |
| parent | 5cb23717816ca7420c6eb5471dbbd386438929cb (diff) | |
svn merge -r136533:136919 svn+ssh://svn.lindenlab.com/svn/linden/branches/avatar-pipeline/avatar-pipeline-14 into svn+ssh://svn.lindenlab.com/svn/linden/branches/viewer/viewer-2.0.0-3
* Bugs: EXT-1779
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.h | 2 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 164 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.h | 2 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.cpp | 191 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.h | 11 | 
7 files changed, 206 insertions, 172 deletions
| diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 0cf28f590a..1eaabd7ec3 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -966,7 +966,7 @@ void LLAppearanceManager::wearEnsemble( LLInventoryCategory* cat, bool do_update  }  /* static */ -void LLAppearanceManager::removeItemLinks(LLUUID& item_id, bool do_update) +void LLAppearanceManager::removeItemLinks(const LLUUID& item_id, bool do_update)  {  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t item_array; diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 928b5f2bcd..828af32101 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -62,7 +62,7 @@ public:  	static LLUUID getCOF();  	// Remove COF entries -	static void removeItemLinks(LLUUID& item_id, bool do_update = true); +	static void removeItemLinks(const LLUUID& item_id, bool do_update = true);  	// For debugging - could be moved elsewhere.  	static void dumpCat(const LLUUID& cat_id, std::string str); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 23f0c7c450..d876647692 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -3818,12 +3818,14 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model  	else if ("detach" == action)  	{  		LLInventoryItem* item = gInventory.getItem(mUUID); -		if( item ) +		// In case we clicked on a link, detach the base object instead of the link. +		LLInventoryItem* base_item = gInventory.getItem(item->getLinkedUUID()); +		if(base_item)  		{  			gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);  			gMessageSystem->nextBlockFast(_PREHASH_ObjectData );  			gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); -			gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getUUID() ); +			gMessageSystem->addUUIDFast(_PREHASH_ItemID, base_item->getUUID() );  			gMessageSystem->sendReliable( gAgent.getRegion()->getHost() );  		} diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 19dea5660b..1ec72df53c 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -781,7 +781,8 @@ LLVOAvatar::~LLVOAvatar()  	mMeshes.clear();  	for (std::vector<LLViewerJoint*>::iterator jointIter = mMeshLOD.begin(); -		 jointIter != mMeshLOD.end(); jointIter++) +		 jointIter != mMeshLOD.end();  +		 ++jointIter)  	{  		LLViewerJoint* joint = (LLViewerJoint *) *jointIter;  		std::for_each(joint->mMeshParts.begin(), joint->mMeshParts.end(), DeletePointer()); @@ -932,7 +933,7 @@ void LLVOAvatar::dumpBakedStatus()  			for (LLVOAvatarDictionary::BakedTextures::const_iterator iter = LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();  				 iter != LLVOAvatarDictionary::getInstance()->getBakedTextures().end(); -				 iter++) +				 ++iter)  			{  				const LLVOAvatarDictionary::BakedEntry *baked_dict = iter->second;  				const ETextureIndex index = baked_dict->mTextureIndex; @@ -1124,7 +1125,7 @@ void LLVOAvatar::initInstance(void)  	for (LLVOAvatarDictionary::Meshes::const_iterator iter = LLVOAvatarDictionary::getInstance()->getMeshes().begin();  		 iter != LLVOAvatarDictionary::getInstance()->getMeshes().end(); -		 iter++) +		 ++iter)  	{  		const EMeshIndex mesh_index = iter->first;  		const LLVOAvatarDictionary::MeshEntry *mesh_dict = iter->second; @@ -1170,7 +1171,7 @@ void LLVOAvatar::initInstance(void)  	//-------------------------------------------------------------------------  	for (LLVOAvatarDictionary::Meshes::const_iterator iter = LLVOAvatarDictionary::getInstance()->getMeshes().begin();  		 iter != LLVOAvatarDictionary::getInstance()->getMeshes().end(); -		 iter++) +		 ++iter)  	{  		const EMeshIndex mesh_index = iter->first;  		const LLVOAvatarDictionary::MeshEntry *mesh_dict = iter->second; @@ -1179,7 +1180,8 @@ void LLVOAvatar::initInstance(void)  		if (baked_texture_index == BAKED_NUM_INDICES) continue;  		for (std::vector<LLViewerJointMesh* >::iterator iter = mMeshLOD[mesh_index]->mMeshParts.begin(); -			 iter != mMeshLOD[mesh_index]->mMeshParts.end(); iter++) +			 iter != mMeshLOD[mesh_index]->mMeshParts.end();  +			 ++iter)  		{  			LLViewerJointMesh* mesh = (LLViewerJointMesh*) *iter;  			mBakedTextureDatas[(int)baked_texture_index].mMeshes.push_back(mesh); @@ -1565,7 +1567,7 @@ BOOL LLVOAvatar::setupBone(const LLVOAvatarBoneInfo* info, LLViewerJoint* parent  	// setup children  	LLVOAvatarBoneInfo::child_list_t::const_iterator iter; -	for (iter = info->mChildList.begin(); iter != info->mChildList.end(); iter++) +	for (iter = info->mChildList.begin(); iter != info->mChildList.end(); ++iter)  	{  		LLVOAvatarBoneInfo *child_info = *iter;  		if (!setupBone(child_info, joint, volume_num, joint_num)) @@ -1608,7 +1610,7 @@ BOOL LLVOAvatar::buildSkeleton(const LLVOAvatarSkeletonInfo *info)  	S32 current_joint_num = 0;  	S32 current_volume_num = 0;  	LLVOAvatarSkeletonInfo::bone_info_list_t::const_iterator iter; -	for (iter = info->mBoneInfoList.begin(); iter != info->mBoneInfoList.end(); iter++) +	for (iter = info->mBoneInfoList.begin(); iter != info->mBoneInfoList.end(); ++iter)  	{  		LLVOAvatarBoneInfo *info = *iter;  		if (!setupBone(info, NULL, current_volume_num, current_joint_num)) @@ -1671,11 +1673,11 @@ void LLVOAvatar::buildCharacter()  	// clear mesh data  	//-------------------------------------------------------------------------  	for (std::vector<LLViewerJoint*>::iterator jointIter = mMeshLOD.begin(); -		 jointIter != mMeshLOD.end(); jointIter++) +		 jointIter != mMeshLOD.end(); ++jointIter)  	{  		LLViewerJoint* joint = (LLViewerJoint*) *jointIter;  		for (std::vector<LLViewerJointMesh*>::iterator meshIter = joint->mMeshParts.begin(); -			 meshIter != joint->mMeshParts.end(); meshIter++) +			 meshIter != joint->mMeshParts.end(); ++meshIter)  		{  			LLViewerJointMesh * mesh = (LLViewerJointMesh *) *meshIter;  			mesh->setMesh(NULL); @@ -1820,7 +1822,8 @@ void LLVOAvatar::releaseMeshData()  	// cleanup mesh data  	for (std::vector<LLViewerJoint*>::iterator iter = mMeshLOD.begin(); -		 iter != mMeshLOD.end(); iter++) +		 iter != mMeshLOD.end();  +		 ++iter)  	{  		LLViewerJoint* joint = (LLViewerJoint*) *iter;  		joint->setValid(FALSE, TRUE); @@ -1839,10 +1842,10 @@ void LLVOAvatar::releaseMeshData()  	}  	for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; +		LLViewerJointAttachment* attachment = iter->second;  		if (!attachment->getIsHUDAttachment())  		{  			attachment->setAttachmentVisibility(FALSE); @@ -1865,10 +1868,10 @@ void LLVOAvatar::restoreMeshData()  	updateJointLODs();  	for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; +		LLViewerJointAttachment* attachment = iter->second;  		if (!attachment->getIsHUDAttachment())  		{  			attachment->setAttachmentVisibility(TRUE); @@ -2317,10 +2320,10 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)  	{  		LLFastTimer t(FTM_ATTACHMENT_UPDATE);  		for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -			 iter != mAttachmentPoints.end(); ) +			 iter != mAttachmentPoints.end(); +			 ++iter)  		{ -			attachment_map_t::iterator curiter = iter++; -			LLViewerJointAttachment* attachment = curiter->second; +			LLViewerJointAttachment* attachment = iter->second;  			for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();  				 attachment_iter != attachment->mAttachedObjects.end(); @@ -3543,10 +3546,10 @@ void LLVOAvatar::updateVisibility()  			/*llinfos << "SPA: " << sel_pos_agent << llendl;  			llinfos << "WPA: " << wrist_right_pos_agent << llendl;*/  			for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -				 iter != mAttachmentPoints.end(); ) +				 iter != mAttachmentPoints.end(); +				 ++iter)  			{ -				attachment_map_t::iterator curiter = iter++; -				LLViewerJointAttachment* attachment = curiter->second; +				LLViewerJointAttachment* attachment = iter->second;  				for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();  					 attachment_iter != attachment->mAttachedObjects.end(); @@ -4720,7 +4723,7 @@ BOOL LLVOAvatar::loadAvatar()  	// avatar_lad.xml : <morph_masks>  	for (LLVOAvatarXmlInfo::morph_info_list_t::iterator iter = sAvatarXmlInfo->mMorphMaskInfoList.begin();  		 iter != sAvatarXmlInfo->mMorphMaskInfoList.end(); -		 iter++) +		 ++iter)  	{  		LLVOAvatarXmlInfo::LLVOAvatarMorphInfo *info = *iter; @@ -4744,7 +4747,7 @@ BOOL LLVOAvatar::loadAvatar()  	// avatar_lad.xml : <driver_parameters>  	for (LLVOAvatarXmlInfo::driver_info_list_t::iterator iter = sAvatarXmlInfo->mDriverInfoList.begin();  		 iter != sAvatarXmlInfo->mDriverInfoList.end();  -		 iter++) +		 ++iter)  	{  		LLDriverParamInfo *info = *iter;  		LLDriverParam* driver_param = new LLDriverParam( this ); @@ -4790,7 +4793,8 @@ BOOL LLVOAvatar::loadSkeletonNode ()  	mRoot.addChild( &mSkeleton[0] );  	for (std::vector<LLViewerJoint *>::iterator iter = mMeshLOD.begin(); -		 iter != mMeshLOD.end(); iter++) +		 iter != mMeshLOD.end();  +		 ++iter)  	{  		LLViewerJoint *joint = (LLViewerJoint *) *iter;  		joint->mUpdateXform = FALSE; @@ -4826,7 +4830,8 @@ BOOL LLVOAvatar::loadSkeletonNode ()  	{  		LLVOAvatarXmlInfo::skeletal_distortion_info_list_t::iterator iter;  		for (iter = sAvatarXmlInfo->mSkeletalDistortionInfoList.begin(); -			 iter != sAvatarXmlInfo->mSkeletalDistortionInfoList.end(); iter++) +			 iter != sAvatarXmlInfo->mSkeletalDistortionInfoList.end();  +			 ++iter)  		{  			LLPolySkeletalDistortionInfo *info = *iter;  			LLPolySkeletalDistortion *param = new LLPolySkeletalDistortion(this); @@ -4846,7 +4851,8 @@ BOOL LLVOAvatar::loadSkeletonNode ()  	{  		LLVOAvatarXmlInfo::attachment_info_list_t::iterator iter;  		for (iter = sAvatarXmlInfo->mAttachmentInfoList.begin(); -			 iter != sAvatarXmlInfo->mAttachmentInfoList.end(); iter++) +			 iter != sAvatarXmlInfo->mAttachmentInfoList.end();  +			 ++iter)  		{  			LLVOAvatarXmlInfo::LLVOAvatarAttachmentInfo *info = *iter;  			if (!isSelf() && info->mJointName == "mScreen") @@ -4927,7 +4933,7 @@ BOOL LLVOAvatar::loadMeshNodes()  {  	for (LLVOAvatarXmlInfo::mesh_info_list_t::const_iterator meshinfo_iter = sAvatarXmlInfo->mMeshInfoList.begin();  		 meshinfo_iter != sAvatarXmlInfo->mMeshInfoList.end();  -		 meshinfo_iter++) +		 ++meshinfo_iter)  	{  		const LLVOAvatarXmlInfo::LLVOAvatarMeshInfo *info = *meshinfo_iter;  		const std::string &type = info->mType; @@ -4943,7 +4949,7 @@ BOOL LLVOAvatar::loadMeshNodes()  				mesh = &mHairMesh0; */  		for (LLVOAvatarDictionary::Meshes::const_iterator mesh_iter = LLVOAvatarDictionary::getInstance()->getMeshes().begin();  			 mesh_iter != LLVOAvatarDictionary::getInstance()->getMeshes().end(); -			 mesh_iter++) +			 ++mesh_iter)  		{  			const EMeshIndex mesh_index = mesh_iter->first;  			const LLVOAvatarDictionary::MeshEntry *mesh_dict = mesh_iter->second; @@ -5015,7 +5021,7 @@ BOOL LLVOAvatar::loadMeshNodes()  		for (LLVOAvatarXmlInfo::LLVOAvatarMeshInfo::morph_info_list_t::const_iterator xmlinfo_iter = info->mPolyMorphTargetInfoList.begin();  			 xmlinfo_iter != info->mPolyMorphTargetInfoList.end();  -			 xmlinfo_iter++) +			 ++xmlinfo_iter)  		{  			const LLVOAvatarXmlInfo::LLVOAvatarMeshInfo::morph_info_pair_t *info_pair = &(*xmlinfo_iter);  			LLPolyMorphTarget *param = new LLPolyMorphTarget(mesh->getMesh()); @@ -5049,7 +5055,7 @@ BOOL LLVOAvatar::loadLayersets()  	BOOL success = TRUE;  	for (LLVOAvatarXmlInfo::layer_info_list_t::const_iterator layerset_iter = sAvatarXmlInfo->mLayerInfoList.begin();  		 layerset_iter != sAvatarXmlInfo->mLayerInfoList.end();  -		 layerset_iter++) +		 ++layerset_iter)  	{  		// Construct a layerset for each one specified in avatar_lad.xml and initialize it as such.  		LLTexLayerSetInfo *layerset_info = *layerset_iter; @@ -5456,7 +5462,7 @@ U32 LLVOAvatar::getNumAttachments() const  	U32 num_attachments = 0;  	for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();  		 iter != mAttachmentPoints.end(); -		 iter++) +		 ++iter)  	{  		const LLViewerJointAttachment *attachment_pt = (*iter).second;  		num_attachments += attachment_pt->getNumObjects(); @@ -5497,10 +5503,10 @@ void LLVOAvatar::lazyAttach()  void LLVOAvatar::resetHUDAttachments()  {  	for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; +		LLViewerJointAttachment* attachment = iter->second;  		if (attachment->getIsHUDAttachment())  		{  			for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); @@ -5523,55 +5529,15 @@ void LLVOAvatar::resetHUDAttachments()  BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object)  {  	for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; +		LLViewerJointAttachment* attachment = iter->second;  		if (attachment->isObjectAttached(viewer_object))  		{ -			LLUUID item_id = viewer_object->getItemID();  			attachment->removeObject(viewer_object); -			if (isSelf()) -			{ -				// the simulator should automatically handle -				// permission revocation -				 -				stopMotionFromSource(viewer_object->getID()); -				LLFollowCamMgr::setCameraActive(viewer_object->getID(), FALSE); -				 -				LLViewerObject::const_child_list_t& child_list = viewer_object->getChildren(); -				for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); -					 iter != child_list.end(); iter++) -				{ -					LLViewerObject* child_objectp = *iter; -					// the simulator should automatically handle -					// permissions revocation -					 -					stopMotionFromSource(child_objectp->getID()); -					LLFollowCamMgr::setCameraActive(child_objectp->getID(), FALSE); -				} -			}  			lldebugs << "Detaching object " << viewer_object->mID << " from " << attachment->getName() << llendl; -			if (isSelf()) -			{ -				// Then make sure the inventory is in sync with the avatar. -				 -				// Update COF contents, don't trigger appearance update. -				if (gAgent.getAvatarObject() == NULL) -				{ -					llinfos << "removeItemLinks skipped, avatar is under destruction" << llendl; -				} -				else -				{ -					LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:"); -					LLAppearanceManager::removeItemLinks(item_id, false); -				} -				 -				// BAP - needs to change for label to track link. -				gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); -				gInventory.notifyObservers(); -			}  			return TRUE;  		}  	} @@ -5656,7 +5622,7 @@ void LLVOAvatar::getOffObject()  		LLViewerObject::const_child_list_t& child_list = sit_object->getChildren();  		for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); -			 iter != child_list.end(); iter++) +			 iter != child_list.end(); ++iter)  		{  			LLViewerObject* child_objectp = *iter; @@ -5997,14 +5963,14 @@ void LLVOAvatar::updateMeshTextures()  	for (LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();  		 baked_iter != LLVOAvatarDictionary::getInstance()->getBakedTextures().end(); -		 baked_iter++) +		 ++baked_iter)  	{  		const EBakedTextureIndex baked_index = baked_iter->first;  		const LLVOAvatarDictionary::BakedEntry *baked_dict = baked_iter->second;  		for (texture_vec_t::const_iterator local_tex_iter = baked_dict->mLocalTextures.begin();  			 local_tex_iter != baked_dict->mLocalTextures.end(); -			 local_tex_iter++) +			 ++local_tex_iter)  		{  			const ETextureIndex texture_index = *local_tex_iter;  			const BOOL is_baked_ready = (is_layer_baked[baked_index] && mBakedTextureDatas[baked_index].mIsLoaded) || other_culled; @@ -6120,7 +6086,7 @@ void LLVOAvatar::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_com  	}  	for (morph_list_t::const_iterator iter = mBakedTextureDatas[index].mMaskedMorphs.begin(); -		 iter != mBakedTextureDatas[index].mMaskedMorphs.end(); iter++) +		 iter != mBakedTextureDatas[index].mMaskedMorphs.end(); ++iter)  	{  		const LLMaskedMorph* maskedMorph = (*iter);  		maskedMorph->mMorphTarget->applyMask(tex_data, width, height, num_components, maskedMorph->mInvert); @@ -6272,7 +6238,7 @@ void LLVOAvatar::dumpAvatarTEs( const std::string& context )  	llinfos << (isSelf() ? "Self: " : "Other: ") << context << llendl;  	for (LLVOAvatarDictionary::Textures::const_iterator iter = LLVOAvatarDictionary::getInstance()->getTextures().begin();  		 iter != LLVOAvatarDictionary::getInstance()->getTextures().end(); -		 iter++) +		 ++iter)  	{  		const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second;  		// TODO: handle multiple textures for self @@ -6321,7 +6287,7 @@ BOOL LLVOAvatar::isWearingWearableType(EWearableType type) const  			indicator_te = TEX_UPPER_SHIRT; */  	for (LLVOAvatarDictionary::Textures::const_iterator tex_iter = LLVOAvatarDictionary::getInstance()->getTextures().begin();  		 tex_iter != LLVOAvatarDictionary::getInstance()->getTextures().end(); -		 tex_iter++) +		 ++tex_iter)  	{  		const LLVOAvatarDictionary::TextureEntry *texture_dict = tex_iter->second;  		if (texture_dict->mWearableType == type) @@ -6352,10 +6318,10 @@ void LLVOAvatar::clampAttachmentPositions()  		return;  	}  	for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; +		LLViewerJointAttachment* attachment = iter->second;  		if (attachment)  		{  			attachment->clampObjectPosition(); @@ -6366,10 +6332,10 @@ void LLVOAvatar::clampAttachmentPositions()  BOOL LLVOAvatar::hasHUDAttachment() const  {  	for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::const_iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; +		LLViewerJointAttachment* attachment = iter->second;  		if (attachment->getIsHUDAttachment() && attachment->getNumObjects() > 0)  		{  			return TRUE; @@ -6382,10 +6348,10 @@ LLBBox LLVOAvatar::getHUDBBox() const  {  	LLBBox bbox;  	for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::const_iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; +		LLViewerJointAttachment* attachment = iter->second;  		if (attachment->getIsHUDAttachment())  		{  			for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); @@ -6399,7 +6365,8 @@ LLBBox LLVOAvatar::getHUDBBox() const  				bbox.addBBoxAgent(attached_object->getBoundingBoxAgent());  				LLViewerObject::const_child_list_t& child_list = attached_object->getChildren();  				for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); -					 iter != child_list.end(); iter++) +					 iter != child_list.end();  +					 ++iter)  				{  					const LLViewerObject* child_objectp = *iter;  					bbox.addBBoxAgent(child_objectp->getBoundingBoxAgent()); @@ -6680,7 +6647,7 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture  			BOOL found_texture_id = false;  			for (LLVOAvatarDictionary::Textures::const_iterator iter = LLVOAvatarDictionary::getInstance()->getTextures().begin();  				 iter != LLVOAvatarDictionary::getInstance()->getTextures().end(); -				 iter++) +				 ++iter)  			{  				const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second; @@ -6791,7 +6758,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )  			const LLVOAvatarDictionary::BakedEntry *baked_dict = LLVOAvatarDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)i);  			for (texture_vec_t::const_iterator local_tex_iter = baked_dict->mLocalTextures.begin();  				 local_tex_iter != baked_dict->mLocalTextures.end(); -				 local_tex_iter++) +				 ++local_tex_iter)  			{  				setBakedReady(*local_tex_iter, TRUE);  			} @@ -7686,7 +7653,7 @@ const std::string LLVOAvatar::getBakedStatusForPrintout() const  	for (LLVOAvatarDictionary::Textures::const_iterator iter = LLVOAvatarDictionary::getInstance()->getTextures().begin();  		 iter != LLVOAvatarDictionary::getInstance()->getTextures().end(); -		 iter++) +		 ++iter)  	{  		const ETextureIndex index = iter->first;  		const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second; @@ -7791,7 +7758,8 @@ U32 calc_shame(const LLVOVolume* volume, std::set<LLUUID> &textures)  	LLViewerObject::const_child_list_t& child_list = volume->getChildren();  	for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); -		 iter != child_list.end(); iter++) +		 iter != child_list.end();  +		 ++iter)  	{  		const LLViewerObject* child_objectp = *iter;  		const LLDrawable* child_drawablep = child_objectp->mDrawable; diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 1180d43438..27f2c77817 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -649,7 +649,7 @@ public:  public:  	void 				clampAttachmentPositions();  	virtual const LLViewerJointAttachment* attachObject(LLViewerObject *viewer_object); -	BOOL 				detachObject(LLViewerObject *viewer_object); +	virtual BOOL 		detachObject(LLViewerObject *viewer_object);  	static LLVOAvatar*  findAvatarFromAttachment(LLViewerObject* obj);  protected:  	LLViewerJointAttachment* getTargetAttachmentPoint(LLViewerObject* viewer_object); diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index cf7a0b65f6..77ead951cc 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -285,10 +285,10 @@ BOOL LLVOAvatarSelf::buildMenus()  		{  			BOOL attachment_found = FALSE;  			for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -				 iter != mAttachmentPoints.end(); ) +				 iter != mAttachmentPoints.end(); +				 ++iter)  			{ -				attachment_map_t::iterator curiter = iter++; -				LLViewerJointAttachment* attachment = curiter->second; +				LLViewerJointAttachment* attachment = iter->second;  				if (attachment->getGroup() == i)  				{  					LLMenuItemCallGL::Params item_params; @@ -304,9 +304,9 @@ BOOL LLVOAvatarSelf::buildMenus()  					}  					item_params.name =(item_params.label );  					item_params.on_click.function_name = "Object.AttachToAvatar"; -					item_params.on_click.parameter = curiter->first; +					item_params.on_click.parameter = iter->first;  					item_params.on_enable.function_name = "Object.EnableWear"; -					item_params.on_enable.parameter = curiter->first; +					item_params.on_enable.parameter = iter->first;  					LLMenuItemCallGL* item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params);  					gAttachPieMenu->addChild(item); @@ -331,10 +331,10 @@ BOOL LLVOAvatarSelf::buildMenus()  		{  			BOOL attachment_found = FALSE;  			for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -				 iter != mAttachmentPoints.end(); ) +				 iter != mAttachmentPoints.end(); +				 ++iter)  			{ -				attachment_map_t::iterator curiter = iter++; -				LLViewerJointAttachment* attachment = curiter->second; +				LLViewerJointAttachment* attachment = iter->second;  				if (attachment->getGroup() == i)  				{  					LLMenuItemCallGL::Params item_params; @@ -349,9 +349,9 @@ BOOL LLVOAvatarSelf::buildMenus()  					}  					item_params.name =(item_params.label );  					item_params.on_click.function_name = "Attachment.Detach"; -					item_params.on_click.parameter = curiter->first; +					item_params.on_click.parameter = iter->first;  					item_params.on_enable.function_name = "Attachment.EnableDetach"; -					item_params.on_enable.parameter = curiter->first; +					item_params.on_enable.parameter = iter->first;  					LLMenuItemCallGL* item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params);  					gDetachPieMenu->addChild(item); @@ -370,10 +370,10 @@ BOOL LLVOAvatarSelf::buildMenus()  	// add screen attachments  	for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; +		LLViewerJointAttachment* attachment = iter->second;  		if (attachment->getGroup() == 8)  		{  			LLMenuItemCallGL::Params item_params; @@ -388,16 +388,16 @@ BOOL LLVOAvatarSelf::buildMenus()  			}  			item_params.name =(item_params.label );  			item_params.on_click.function_name = "Object.AttachToAvatar"; -			item_params.on_click.parameter = curiter->first; +			item_params.on_click.parameter = iter->first;  			item_params.on_enable.function_name = "Object.EnableWear"; -			item_params.on_enable.parameter = curiter->first;			 +			item_params.on_enable.parameter = iter->first;  			LLMenuItemCallGL* item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params);  			gAttachScreenPieMenu->addChild(item);  			item_params.on_click.function_name = "Attachment.DetachFromPoint"; -			item_params.on_click.parameter = curiter->first; +			item_params.on_click.parameter = iter->first;  			item_params.on_enable.function_name = "Attachment.PointFilled"; -			item_params.on_enable.parameter = curiter->first; +			item_params.on_enable.parameter = iter->first;  			item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params);  			gDetachScreenPieMenu->addChild(item);  		} @@ -411,10 +411,10 @@ BOOL LLVOAvatarSelf::buildMenus()  			break;  		}  		for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -			 iter != mAttachmentPoints.end(); ) +			 iter != mAttachmentPoints.end(); +			 ++iter)  		{ -			attachment_map_t::iterator curiter = iter++; -			LLViewerJointAttachment* attachment = curiter->second; +			LLViewerJointAttachment* attachment = iter->second;  			if (attachment->getIsHUDAttachment() != (pass == 1))  			{  				continue; @@ -431,12 +431,12 @@ BOOL LLVOAvatarSelf::buildMenus()  			}  			item_params.name =(item_params.label );  			item_params.on_click.function_name = "Object.AttachToAvatar"; -			item_params.on_click.parameter = curiter->first; +			item_params.on_click.parameter = iter->first;  			item_params.on_enable.function_name = "Object.EnableWear"; -			item_params.on_enable.parameter = curiter->first; +			item_params.on_enable.parameter = iter->first;  			//* TODO: Skinning:  			//LLSD params; -			//params["index"] = curiter->first; +			//params["index"] = iter->first;  			//params["label"] = attachment->getName();  			//item->addEventHandler("on_enable", LLMenuItemCallGL::MenuCallback().function_name("Attachment.Label").parameter(params)); @@ -444,9 +444,9 @@ BOOL LLVOAvatarSelf::buildMenus()  			gAttachSubMenu->addChild(item);  			item_params.on_click.function_name = "Attachment.DetachFromPoint"; -			item_params.on_click.parameter = curiter->first; +			item_params.on_click.parameter = iter->first;  			item_params.on_enable.function_name = "Attachment.PointFilled"; -			item_params.on_enable.parameter = curiter->first; +			item_params.on_enable.parameter = iter->first;  			//* TODO: Skinning: item->addEventHandler("on_enable", LLMenuItemCallGL::MenuCallback().function_name("Attachment.Label").parameter(params));  			item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params); @@ -472,15 +472,15 @@ BOOL LLVOAvatarSelf::buildMenus()  		// gather up all attachment points assigned to this group, and throw into map sorted by pie slice number  		for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -			 iter != mAttachmentPoints.end(); ) +			 iter != mAttachmentPoints.end(); +			 ++iter)  		{ -			attachment_map_t::iterator curiter = iter++; -			LLViewerJointAttachment* attachment = curiter->second; +			LLViewerJointAttachment* attachment = iter->second;  			if(attachment->getGroup() == group)  			{  				// use multimap to provide a partial order off of the pie slice key  				S32 pie_index = attachment->getPieSlice(); -				attachment_pie_menu_map.insert(std::make_pair(pie_index, curiter->first)); +				attachment_pie_menu_map.insert(std::make_pair(pie_index, iter->first));  			}  		} @@ -545,7 +545,7 @@ BOOL LLVOAvatarSelf::loadLayersets()  	BOOL success = TRUE;  	for (LLVOAvatarXmlInfo::layer_info_list_t::const_iterator iter = sAvatarXmlInfo->mLayerInfoList.begin();  		 iter != sAvatarXmlInfo->mLayerInfoList.end();  -		 iter++) +		 ++iter)  	{  		// Construct a layerset for each one specified in avatar_lad.xml and initialize it as such.  		const LLTexLayerSetInfo *info = *iter; @@ -563,7 +563,7 @@ BOOL LLVOAvatarSelf::loadLayersets()  		EBakedTextureIndex baked_index = BAKED_NUM_INDICES;  		for (LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();  			 baked_iter != LLVOAvatarDictionary::getInstance()->getBakedTextures().end(); -			 baked_iter++) +			 ++baked_iter)  		{  			const LLVOAvatarDictionary::BakedEntry *baked_dict = baked_iter->second;  			if (layer_set->isBodyRegion(baked_dict->mName)) @@ -586,7 +586,7 @@ BOOL LLVOAvatarSelf::loadLayersets()  		// scan morph masks and let any affected layers know they have an associated morph  		for (LLVOAvatar::morph_list_t::const_iterator morph_iter = mBakedTextureDatas[baked_index].mMaskedMorphs.begin();  			morph_iter != mBakedTextureDatas[baked_index].mMaskedMorphs.end(); -			morph_iter++) +			 ++morph_iter)  		{  			LLMaskedMorph *morph = *morph_iter;  			LLTexLayerInterface* layer = layer_set->findLayerByName(morph->mLayer); @@ -903,10 +903,10 @@ void LLVOAvatarSelf::restoreMeshData()  void LLVOAvatarSelf::updateAttachmentVisibility(U32 camera_mode)  {  	for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; +		LLViewerJointAttachment* attachment = iter->second;  		if (attachment->getIsHUDAttachment())  		{  			attachment->setAttachmentVisibility(TRUE); @@ -947,7 +947,7 @@ void LLVOAvatarSelf::wearableUpdated( EWearableType type )  {  	for (LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();  		 baked_iter != LLVOAvatarDictionary::getInstance()->getBakedTextures().end(); -		 baked_iter++) +		 ++baked_iter)  	{  		const LLVOAvatarDictionary::BakedEntry *baked_dict = baked_iter->second;  		const LLVOAvatarDefines::EBakedTextureIndex index = baked_iter->first; @@ -955,7 +955,7 @@ void LLVOAvatarSelf::wearableUpdated( EWearableType type )  		{  			for (LLVOAvatarDefines::wearables_vec_t::const_iterator type_iter = baked_dict->mWearables.begin();  				type_iter != baked_dict->mWearables.end(); -				type_iter++) +				 ++type_iter)  			{  				const EWearableType comp_type = *type_iter;  				if (comp_type == type) @@ -976,14 +976,16 @@ void LLVOAvatarSelf::wearableUpdated( EWearableType type )  // isWearingAttachment()  //-----------------------------------------------------------------------------  // Warning: include_linked_items = TRUE makes this operation expensive. -BOOL LLVOAvatarSelf::isWearingAttachment( const LLUUID& inv_item_id , BOOL include_linked_items ) const +BOOL LLVOAvatarSelf::isWearingAttachment(const LLUUID& inv_item_id, BOOL include_linked_items) const  { +	const LLUUID& base_inv_item_id = getBaseAttachmentObject(inv_item_id); +	  	for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::const_iterator curiter = iter++; -		const LLViewerJointAttachment* attachment = curiter->second; -		if (attachment->getAttachedObject(inv_item_id)) +		const LLViewerJointAttachment* attachment = iter->second; +		if (attachment->getAttachedObject(base_inv_item_id))  		{  			return TRUE;  		} @@ -992,18 +994,18 @@ BOOL LLVOAvatarSelf::isWearingAttachment( const LLUUID& inv_item_id , BOOL inclu  	if (include_linked_items)  	{  		LLInventoryModel::item_array_t item_array; -		gInventory.collectLinkedItems(inv_item_id, item_array); +		gInventory.collectLinkedItems(base_inv_item_id, item_array);  		for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin();  			 iter != item_array.end(); -			 iter++) +			 ++iter)  		{  			const LLViewerInventoryItem *linked_item = (*iter);  			const LLUUID &item_id = linked_item->getUUID();  			for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();  -				 iter != mAttachmentPoints.end(); ) +				 iter != mAttachmentPoints.end(); +				 ++iter)  			{ -				attachment_map_t::const_iterator curiter = iter++; -				const LLViewerJointAttachment* attachment = curiter->second; +				const LLViewerJointAttachment* attachment = iter->second;  				if (attachment->getAttachedObject(item_id))  				{  					return TRUE; @@ -1018,14 +1020,15 @@ BOOL LLVOAvatarSelf::isWearingAttachment( const LLUUID& inv_item_id , BOOL inclu  //-----------------------------------------------------------------------------  // getWornAttachment()  //----------------------------------------------------------------------------- -LLViewerObject* LLVOAvatarSelf::getWornAttachment( const LLUUID& inv_item_id ) +LLViewerObject* LLVOAvatarSelf::getWornAttachment(const LLUUID& inv_item_id)  { -	for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +	const LLUUID& base_inv_item_id = getBaseAttachmentObject(inv_item_id); +	for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();  +		 iter != mAttachmentPoints.end(); +		 ++iter)  	{ -		attachment_map_t::iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; - 		if (LLViewerObject *attached_object = attachment->getAttachedObject(inv_item_id)) +		LLViewerJointAttachment* attachment = iter->second; + 		if (LLViewerObject *attached_object = attachment->getAttachedObject(base_inv_item_id))  		{  			return attached_object;  		} @@ -1035,12 +1038,13 @@ LLViewerObject* LLVOAvatarSelf::getWornAttachment( const LLUUID& inv_item_id )  const std::string LLVOAvatarSelf::getAttachedPointName(const LLUUID& inv_item_id) const  { +	const LLUUID& base_inv_item_id = getBaseAttachmentObject(inv_item_id);  	for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();  -		 iter != mAttachmentPoints.end(); ) +		 iter != mAttachmentPoints.end();  +		 ++iter)  	{ -		attachment_map_t::const_iterator curiter = iter++; -		const LLViewerJointAttachment* attachment = curiter->second; -		if (attachment->getAttachedObject(inv_item_id)) +		const LLViewerJointAttachment* attachment = iter->second; +		if (attachment->getAttachedObject(base_inv_item_id))  		{  			return attachment->getName();  		} @@ -1072,14 +1076,71 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view  			LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");  			LLAppearanceManager::wearItem(item,false);  // Add COF link for item.  			gInventory.addChangedMask(LLInventoryObserver::LABEL, attachment_id); +			gInventory.updateLinkedObjects(attachment_id);  		}  	} -  	gInventory.notifyObservers();  	return attachment;  } +//virtual +BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object) +{ +	const LLUUID item_id = viewer_object->getItemID(); +	if (LLVOAvatar::detachObject(viewer_object)) +	{ +		// the simulator should automatically handle permission revocation +		 +		stopMotionFromSource(item_id); +		LLFollowCamMgr::setCameraActive(viewer_object->getID(), FALSE); +		 +		LLViewerObject::const_child_list_t& child_list = viewer_object->getChildren(); +		for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); +			 iter != child_list.end();  +			 ++iter) +		{ +			LLViewerObject* child_objectp = *iter; +			// the simulator should automatically handle +			// permissions revocation +			 +			stopMotionFromSource(child_objectp->getID()); +			LLFollowCamMgr::setCameraActive(child_objectp->getID(), FALSE); +		} +		 +		// Make sure the inventory is in sync with the avatar. + +		// Update COF contents, don't trigger appearance update. +		if (gAgent.getAvatarObject() == NULL) +		{ +			llinfos << "removeItemLinks skipped, avatar is under destruction" << llendl; +		} +		else +		{ +			LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:"); +			LLAppearanceManager::removeItemLinks(item_id, false); +		} +		 +		// BAP - needs to change for label to track link. +		gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); +		gInventory.updateLinkedObjects(item_id); +		gInventory.notifyObservers(); +		return TRUE; +	} +	return FALSE; +} + +const LLUUID& LLVOAvatarSelf::getBaseAttachmentObject(const LLUUID &object_id) const +{ +	const LLInventoryItem *item = gInventory.getItem(object_id); +	if (!item) +		return LLUUID::null; + +	// Find the base object in case this a link (if it's not a link, +	// this will just be inv_item_id) +	return item->getLinkedUUID(); +} +  void LLVOAvatarSelf::getAllAttachmentsArray(LLDynamicArray<S32>& attachments)  {  	for (LLVOAvatar::attachment_map_t::const_iterator iter = mAttachmentPoints.begin();  @@ -1231,7 +1292,7 @@ BOOL LLVOAvatarSelf::isLocalTextureDataAvailable(const LLTexLayerSet* layerset)  	   return getLocalDiscardLevel(TEX_HEAD_BODYPAINT) >= 0; */  	for (LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();  		 baked_iter != LLVOAvatarDictionary::getInstance()->getBakedTextures().end(); -		 baked_iter++) +		 ++baked_iter)  	{  		const EBakedTextureIndex baked_index = baked_iter->first;  		if (layerset == mBakedTextureDatas[baked_index].mTexLayerSet) @@ -1240,7 +1301,7 @@ BOOL LLVOAvatarSelf::isLocalTextureDataAvailable(const LLTexLayerSet* layerset)  			const LLVOAvatarDictionary::BakedEntry *baked_dict = baked_iter->second;  			for (texture_vec_t::const_iterator local_tex_iter = baked_dict->mLocalTextures.begin();  				 local_tex_iter != baked_dict->mLocalTextures.end(); -				 local_tex_iter++) +				 ++local_tex_iter)  			{  				const ETextureIndex tex_index = *local_tex_iter;  				const EWearableType wearable_type = LLVOAvatarDictionary::getTEWearableType(tex_index); @@ -1272,7 +1333,7 @@ BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLTexLayerSet* layerset) cons  			const LLVOAvatarDictionary::BakedEntry *baked_dict = LLVOAvatarDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)i);  			for (texture_vec_t::const_iterator local_tex_iter = baked_dict->mLocalTextures.begin();  				 local_tex_iter != baked_dict->mLocalTextures.end(); -				 local_tex_iter++) +				 ++local_tex_iter)  			{  				const ETextureIndex tex_index = *local_tex_iter;  				const EWearableType wearable_type = LLVOAvatarDictionary::getTEWearableType(tex_index); @@ -1558,7 +1619,7 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te  	setBakedReady(type,baked_version_ready,index);  }  //virtual -void	LLVOAvatarSelf::setBakedReady(LLVOAvatarDefines::ETextureIndex type, BOOL baked_version_exists, U32 index) +void LLVOAvatarSelf::setBakedReady(LLVOAvatarDefines::ETextureIndex type, BOOL baked_version_exists, U32 index)  {  	if (!isIndexLocalTexture(type)) return;  	LLLocalTextureObject *local_tex_obj = getLocalTextureObject(type,index); @@ -1579,7 +1640,7 @@ void LLVOAvatarSelf::dumpLocalTextures() const  	   if (isTextureDefined(baked_equiv[i])) */  	for (LLVOAvatarDictionary::Textures::const_iterator iter = LLVOAvatarDictionary::getInstance()->getTextures().begin();  		 iter != LLVOAvatarDictionary::getInstance()->getTextures().end(); -		 iter++) +		 ++iter)  	{  		const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second;  		if (!texture_dict->mIsLocalTexture || !texture_dict->mIsUsedByBakedTexture) @@ -1769,7 +1830,7 @@ BOOL LLVOAvatarSelf::canGrabLocalTexture(ETextureIndex type, U32 index) const  	const LLVOAvatarDictionary::BakedEntry *baked_dict = LLVOAvatarDictionary::getInstance()->getBakedTexture(baked_index);  	for (texture_vec_t::const_iterator iter = baked_dict->mLocalTextures.begin();  		 iter != baked_dict->mLocalTextures.end(); -		 iter++) +		 ++iter)  	{  		const ETextureIndex t_index = (*iter);  		lldebugs << "Checking index " << (U32) t_index << llendl; @@ -1945,7 +2006,7 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**)  			TEX_UPPER_BAKED, */  	for (LLVOAvatarDictionary::Textures::const_iterator iter = LLVOAvatarDictionary::getInstance()->getTextures().begin();  		 iter != LLVOAvatarDictionary::getInstance()->getTextures().end(); -		 iter++) +		 ++iter)  	{  		const ETextureIndex index = iter->first;  		const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second; diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 9e0fa87e1f..aaa261cea7 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -266,8 +266,10 @@ protected:   **/  public: -	/*virtual*/ BOOL	isWearingWearableType(EWearableType type ) const; +	/*virtual*/ BOOL	isWearingWearableType(EWearableType type) const;  	void				wearableUpdated(EWearableType type); +protected: +	U32 getNumWearables(LLVOAvatarDefines::ETextureIndex i) const;  	//--------------------------------------------------------------------  	// Attachments @@ -275,17 +277,18 @@ public:  public:  	void 				updateAttachmentVisibility(U32 camera_mode);  	BOOL 				isWearingAttachment(const LLUUID& inv_item_id, BOOL include_linked_items = FALSE) const; -	LLViewerObject* 	getWornAttachment(const LLUUID& inv_item_id ); +	LLViewerObject* 	getWornAttachment(const LLUUID& inv_item_id);  	const std::string   getAttachedPointName(const LLUUID& inv_item_id) const;  	/*virtual*/ const LLViewerJointAttachment *attachObject(LLViewerObject *viewer_object); +	/*virtual*/ BOOL 	detachObject(LLViewerObject *viewer_object);  	void				getAllAttachmentsArray(LLDynamicArray<S32>& attachments); +protected: +	const LLUUID&		getBaseAttachmentObject(const LLUUID &object_id) const;  	//--------------------------------------------------------------------  	// HUDs  	//--------------------------------------------------------------------  private: -	U32 getNumWearables(LLVOAvatarDefines::ETextureIndex i) const; -  	LLViewerJoint* 		mScreenp; // special purpose joint for HUD attachments  /**                    Attachments | 
