Skip to content
Snippets Groups Projects
Commit 493d3b36 authored by Todd Stinson's avatar Todd Stinson
Browse files

PATH-842, VWR-29431: BUGFIX Correcting a regression introduced by the fix for...

PATH-842, VWR-29431: BUGFIX Correcting a regression introduced by the fix for PATH-542.  The viewer calculated rotation resulting from an object's angular velocity was being incorrectly reset when the corresponding object update was received.  With this bugfix, the rotation resulting from the angular velocity is accumulated separately and is re-appplied when the object update resets the object's rotation.
parent 575a04b4
No related branches found
No related tags found
No related merge requests found
......@@ -236,6 +236,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
mNumFaces(0),
mTimeDilation(1.f),
mRotTime(0.f),
mAngularVelocityRot(),
mJointInfo(NULL),
mState(0),
mMedia(NULL),
......@@ -266,6 +267,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
{
mPositionAgent = mRegionp->getOriginAgent();
}
resetRot();
LLViewerObject::sNumObjects++;
}
......@@ -2071,14 +2073,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
if (new_rot != getRotation()
|| new_angv != old_angv)
{
if (new_rot != getRotation())
if (new_angv != old_angv)
{
setRotation(new_rot);
resetRot();
}
// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega)
setRotation(new_rot * mAngularVelocityRot);
setChanged(ROTATED | SILHOUETTE);
resetRot();
}
......@@ -5533,8 +5535,13 @@ void LLViewerObject::applyAngularVelocity(F32 dt)
ang_vel *= 1.f/omega;
// calculate the delta increment based on the object's angular velocity
dQ.setQuat(angle, ang_vel);
// accumulate the angular velocity rotations to re-apply in the case of an object update
mAngularVelocityRot *= dQ;
// Just apply the delta increment to the current rotation
setRotation(getRotation()*dQ);
setChanged(MOVED | SILHOUETTE);
}
......@@ -5543,6 +5550,9 @@ void LLViewerObject::applyAngularVelocity(F32 dt)
void LLViewerObject::resetRot()
{
mRotTime = 0.0f;
// Reset the accumulated angular velocity rotation
mAngularVelocityRot.loadIdentity();
}
U32 LLViewerObject::getPartitionType() const
......
......@@ -735,6 +735,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
LLVOJointInfo* mJointInfo;
U8 mState; // legacy
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment