Fix scripted sit offset in child prims
parent
2221517935
commit
ae99c1393d
|
@ -1935,8 +1935,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//Console.WriteLine("Scripted, unoccupied");
|
//Console.WriteLine("Scripted, unoccupied");
|
||||||
part.SetAvatarOnSitTarget(UUID); // set that Av will be on it
|
part.SetAvatarOnSitTarget(UUID); // set that Av will be on it
|
||||||
offset = new Vector3(avSitOffSet.X, avSitOffSet.Y, avSitOffSet.Z); // change ofset to the scripted one
|
offset = new Vector3(avSitOffSet.X, avSitOffSet.Y, avSitOffSet.Z); // change ofset to the scripted one
|
||||||
sitOrientation = avSitOrientation; // Change rotatione to the scripted one
|
|
||||||
OffsetRotation = avSitOrientation;
|
Quaternion nrot = avSitOrientation;
|
||||||
|
if (!part.IsRoot)
|
||||||
|
{
|
||||||
|
nrot = nrot * part.RotationOffset;
|
||||||
|
}
|
||||||
|
sitOrientation = nrot; // Change rotatione to the scripted one
|
||||||
|
OffsetRotation = nrot;
|
||||||
autopilot = false; // Jump direct to scripted llSitPos()
|
autopilot = false; // Jump direct to scripted llSitPos()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2010,7 +2016,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// offsetr = (part.OffsetPosition * Quaternion.Inverse(part.ParentGroup.RootPart.RotationOffset)) + (offset * partIRot);
|
// offsetr = (part.OffsetPosition * Quaternion.Inverse(part.ParentGroup.RootPart.RotationOffset)) + (offset * partIRot);
|
||||||
// if (part.LinkNum < 2) 091216 All this was necessary because of the GetWorldRotation error.
|
// if (part.LinkNum < 2) 091216 All this was necessary because of the GetWorldRotation error.
|
||||||
// { // Single, or Root prim of linkset, target is ClickOffset * RootRot
|
// { // Single, or Root prim of linkset, target is ClickOffset * RootRot
|
||||||
offsetr = offset * partIRot;
|
//offsetr = offset * partIRot;
|
||||||
//
|
//
|
||||||
// else
|
// else
|
||||||
// { // Child prim, offset is (ChildOffset * RootRot) + (ClickOffset * ChildRot)
|
// { // Child prim, offset is (ChildOffset * RootRot) + (ClickOffset * ChildRot)
|
||||||
|
@ -2029,7 +2035,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//Console.WriteLine("Camera Eye ={0}", cameraEyeOffset);
|
//Console.WriteLine("Camera Eye ={0}", cameraEyeOffset);
|
||||||
|
|
||||||
//NOTE: SendSitResponse should be relative to the GROUP *NOT* THE PRIM if we're sitting on a child
|
//NOTE: SendSitResponse should be relative to the GROUP *NOT* THE PRIM if we're sitting on a child
|
||||||
ControllingClient.SendSitResponse(part.ParentGroup.UUID, offsetr + part.OffsetPosition, sitOrientation, autopilot, cameraAtOffset, cameraEyeOffset, forceMouselook);
|
ControllingClient.SendSitResponse(part.ParentGroup.UUID, ((offset * part.RotationOffset) + part.OffsetPosition), sitOrientation, autopilot, cameraAtOffset, cameraEyeOffset, forceMouselook);
|
||||||
|
|
||||||
m_requestedSitTargetUUID = part.UUID; //KF: Correct autopilot target
|
m_requestedSitTargetUUID = part.UUID; //KF: Correct autopilot target
|
||||||
// This calls HandleAgentSit twice, once from here, and the client calls
|
// This calls HandleAgentSit twice, once from here, and the client calls
|
||||||
|
@ -2343,6 +2349,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Quaternion sitTargetOrient = part.SitTargetOrientation;
|
Quaternion sitTargetOrient = part.SitTargetOrientation;
|
||||||
m_pos = new Vector3(sitTargetPos.X, sitTargetPos.Y, sitTargetPos.Z);
|
m_pos = new Vector3(sitTargetPos.X, sitTargetPos.Y, sitTargetPos.Z);
|
||||||
m_pos += SIT_TARGET_ADJUSTMENT;
|
m_pos += SIT_TARGET_ADJUSTMENT;
|
||||||
|
if (!part.IsRoot)
|
||||||
|
{
|
||||||
|
m_pos *= part.RotationOffset;
|
||||||
|
}
|
||||||
m_bodyRot = sitTargetOrient;
|
m_bodyRot = sitTargetOrient;
|
||||||
m_parentPosition = part.AbsolutePosition;
|
m_parentPosition = part.AbsolutePosition;
|
||||||
part.IsOccupied = true;
|
part.IsOccupied = true;
|
||||||
|
|
Loading…
Reference in New Issue