diff options
Diffstat (limited to 'indra/newview/llviewerobject.cpp')
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 101 | 
1 files changed, 78 insertions, 23 deletions
| diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index ee89680fea..fd3e80d755 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2,31 +2,25 @@   * @file llviewerobject.cpp   * @brief Base class for viewer objects   * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - *  - * Copyright (c) 2001-2009, Linden Research, Inc. - *  + * $LicenseInfo:firstyear=2001&license=viewerlgpl$   * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab.  Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * Copyright (C) 2010, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only.   *  - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details.   *  - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA   *  - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ @@ -79,6 +73,7 @@  #include "llviewerparceloverlay.h"  #include "llviewerpartsource.h"  #include "llviewerregion.h" +#include "llviewerstats.h"  #include "llviewertextureanim.h"  #include "llviewerwindow.h" // For getSpinAxis  #include "llvoavatar.h" @@ -762,7 +757,24 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  	// Coordinates of objects on simulators are region-local.  	U64 region_handle;  	mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle); -	mRegionp = LLWorld::getInstance()->getRegionFromHandle(region_handle); +	 +	{ +		LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromHandle(region_handle); +		if(regionp != mRegionp && regionp && mRegionp)//region cross +		{ +			//this is the redundant position and region update, but it is necessary in case the viewer misses the following  +			//position and region update messages from sim. +			//this redundant update should not cause any problems. +			LLVector3 delta_pos =  mRegionp->getOriginAgent() - regionp->getOriginAgent(); +			setPositionParent(getPosition() + delta_pos); //update to the new region position immediately. +			setRegion(regionp) ; //change the region. +		} +		else +		{ +			mRegionp = regionp ; +		} +	}	 +	  	if (!mRegionp)  	{  		U32 x, y; @@ -1832,7 +1844,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  		if (cdp)  		{  			F32 ping_delay = 0.5f * mTimeDilation * ( ((F32)cdp->getPingDelay()) * 0.001f + gFrameDTClamped); -			LLVector3 diff = getVelocity() * (0.5f*mTimeDilation*(gFrameDTClamped + ((F32)ping_delay)*0.001f));  +			LLVector3 diff = getVelocity() * ping_delay;   			new_pos_parent += diff;  		}  		else @@ -1899,6 +1911,12 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  			avatar->clampAttachmentPositions();  		} +		 +		// If we're snapping the position by more than 0.5m, update LLViewerStats::mAgentPositionSnaps +		if ( asAvatar() && asAvatar()->isSelf() && (mag_sqr > 0.25f) ) +		{ +			LLViewerStats::getInstance()->mAgentPositionSnaps.push( diff.length() ); +		}  	}  	if (new_rot != mLastRot @@ -4427,6 +4445,13 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow  		mAudioSourcep = NULL;  	} +	if (mAudioSourcep && mAudioSourcep->isMuted() && +	    mAudioSourcep->getCurrentData() && mAudioSourcep->getCurrentData()->getID() == audio_uuid) +	{ +		//llinfos << "Already having this sound as muted sound, ignoring" << llendl; +		return; +	} +  	getAudioSource(owner_id);  	if (mAudioSourcep) @@ -4928,6 +4953,11 @@ void LLViewerObject::setIncludeInSearch(bool include_in_search)  void LLViewerObject::setRegion(LLViewerRegion *regionp)  { +	if (!regionp) +	{ +		llwarns << "viewer object set region to NULL" << llendl; +	} +	  	mLatestRecvPacketID = 0;  	mRegionp = regionp; @@ -5204,3 +5234,28 @@ void LLViewerObject::resetChildrenPosition(const LLVector3& offset, BOOL simplif  	return ;  } +const LLUUID &LLViewerObject::getAttachmentItemID() const +{ +	return mAttachmentItemID; +} + +void LLViewerObject::setAttachmentItemID(const LLUUID &id) +{ +	mAttachmentItemID = id; +} + +const LLUUID &LLViewerObject::extractAttachmentItemID() +{ +	LLUUID item_id = LLUUID::null; +	LLNameValue* item_id_nv = getNVPair("AttachItemID"); +	if( item_id_nv ) +	{ +		const char* s = item_id_nv->getString(); +		if( s ) +		{ +			item_id.set(s); +		} +	} +	setAttachmentItemID(item_id); +	return getAttachmentItemID(); +} | 
