diff options
| author | Dave SIMmONs <simon@lindenlab.com> | 2011-01-19 12:54:05 -0800 | 
|---|---|---|
| committer | Dave SIMmONs <simon@lindenlab.com> | 2011-01-19 12:54:05 -0800 | 
| commit | f91a9c87e5e758ecd32111d901ff32d282b73fa7 (patch) | |
| tree | 426af3ba9eb6e1ae93b7b4178e154b28856914b7 /indra/newview | |
| parent | b2e4486cf2070e33a9aa6f8cec1a08d93565e52b (diff) | |
ER-428 / CTS-422 : [PUBLIC] movement updates are lost when walking.  Changed code to detect if the circuit has stopped getting packets.  Reviewed by Andrew
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.h | 1 | 
2 files changed, 6 insertions, 9 deletions
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 48794c4c9d..090d3cadd4 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -210,7 +210,6 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mLastInterpUpdateSecs(0.f),  	mLastMessageUpdateSecs(0.f),  	mLatestRecvPacketID(0), -	mCircuitPacketCount(0),  	mData(NULL),  	mAudioSourcep(NULL),  	mAudioGain(1.f), @@ -1884,7 +1883,6 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  	}  	mLatestRecvPacketID = packet_id; -	mCircuitPacketCount = 0;  	// Set the change flags for scale  	if (new_scale != getScale()) @@ -2207,7 +2205,8 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)  		LLVector3 new_pos = (vel + (0.5f * (dt-PHYSICS_TIMESTEP)) * accel) * dt;	  		LLVector3 new_v = accel * dt; -		if (time_since_last_update > sPhaseOutUpdateInterpolationTime) +		if (time_since_last_update > sPhaseOutUpdateInterpolationTime && +			sPhaseOutUpdateInterpolationTime > 0.0)  		{	// Haven't seen a viewer update in a while, check to see if the ciruit is still active  			if (mRegionp)  			{	// The simulator will NOT send updates if the object continues normally on the path @@ -2216,9 +2215,12 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)  				LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit( mRegionp->getHost() );  				if (cdp)  				{ +					// Find out how many seconds since last packet arrived on the circuit +					F64 time_since_last_packet = LLMessageSystem::getMessageTimeSeconds() - cdp->getLastPacketInTime(); +  					if (!cdp->isAlive() ||		// Circuit is dead or blocked  						 cdp->isBlocked() ||	// or doesn't seem to be getting any packets -						 (mCircuitPacketCount > 0 && mCircuitPacketCount == cdp->getPacketsIn())) +						 (time_since_last_packet > sPhaseOutUpdateInterpolationTime))  					{  						// Start to reduce motion interpolation since we haven't seen a server update in a while  						F64 time_since_last_interpolation = time - mLastInterpUpdateSecs; @@ -2249,9 +2251,6 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)  						new_pos = new_pos * ((F32) phase_out);  						new_v = new_v * ((F32) phase_out);  					} - -					// Save current circuit packet count to see if it changes  -					mCircuitPacketCount = cdp->getPacketsIn();  				}  			}  		} @@ -5105,7 +5104,6 @@ void LLViewerObject::setRegion(LLViewerRegion *regionp)  	}  	mLatestRecvPacketID = 0; -	mCircuitPacketCount = 0;  	mRegionp = regionp;  	for (child_list_t::iterator i = mChildList.begin(); i != mChildList.end(); ++i) diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 614a5e59fa..7afb7f464b 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -613,7 +613,6 @@ protected:  	F64				mLastInterpUpdateSecs;			// Last update for purposes of interpolation  	F64				mLastMessageUpdateSecs;			// Last update from a message from the simulator  	TPACKETID		mLatestRecvPacketID;			// Latest time stamp on message from simulator -	U32				mCircuitPacketCount;			// Packet tracking for early detection of a stopped simulator circuit  	// extra data sent from the sim...currently only used for tree species info  	U8* mData;  | 
