diff options
| author | William Todd Stinson <stinson@lindenlab.com> | 2012-09-13 12:22:09 -0700 | 
|---|---|---|
| committer | William Todd Stinson <stinson@lindenlab.com> | 2012-09-13 12:22:09 -0700 | 
| commit | 225a3984cb95dee598d6cd175f0de199fbd71740 (patch) | |
| tree | 7fab3c06875eb8e6556a2f2c9c2cc6ca8d9259a5 | |
| parent | 094dc91d0dae4971f6ae89840d791466a6fd6d08 (diff) | |
MAINT-1561: BUGFIX Another target omega fix for an issue detected with a clock pendulum.
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.h | 1 | 
2 files changed, 12 insertions, 3 deletions
| diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 0a6c51b378..97783d843e 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -236,6 +236,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mTimeDilation(1.f),  	mRotTime(0.f),  	mAngularVelocityRot(), +	mPreviousRotation(),  	mJointInfo(NULL),  	mState(0),  	mMedia(NULL), @@ -2072,10 +2073,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  		}  	} -	if (new_rot != getRotation() -		|| new_angv != old_angv) +	if ((new_rot != getRotation()) +		|| (new_angv != old_angv))  	{ -		if (new_angv != old_angv) +		if (new_rot != mPreviousRotation) +		{ +			resetRot(); +		} +		else if (new_angv != old_angv)  		{  			if (flagUsePhysics() || new_angv.isExactlyZero())  			{ @@ -2087,6 +2092,9 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  			}  		} +		// Remember the last rotation value +		mPreviousRotation = new_rot; +  		// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega)  		setRotation(new_rot * mAngularVelocityRot);  		setChanged(ROTATED | SILHOUETTE); diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 83e34dc6ca..fbf6361ffb 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -734,6 +734,7 @@ protected:  	F32				mTimeDilation;				// Time dilation sent with the object.  	F32				mRotTime;					// Amount (in seconds) that object has rotated according to angular velocity (llSetTargetOmega)  	LLQuaternion	mAngularVelocityRot;		// accumulated rotation from the angular velocity computations +	LLQuaternion	mPreviousRotation;  	LLVOJointInfo*  mJointInfo;  	U8				mState;	// legacy | 
