From 28c4dc9be490a3beedccb17bc1b411e45cced846 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Sat, 5 Nov 2011 01:38:42 +0000 Subject: Fix NPC sitting for prims without a sit target. This is to partially address http://opensimulator.org/mantis/view.php?id=5769 We don't need to call SP.HandleAgentSit() again if we are within 10m since the autopilot won't trigger. By calling it twice, the position of the sitting NPC was wrongly adjusted, ending up near <0,0,0>. However, this change does mean that NPCs further than 10m away will not attempt to autopilot to the prim, though this code was broken anyway (is actually a different mechanism to normal NPC movmeent). Hopefully this can be addressed soon. --- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 12 ++++++++++-- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 20 +++++++++++--------- 2 files changed, 21 insertions(+), 11 deletions(-) (limited to 'OpenSim/Region/Framework/Scenes') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index b77f1b6..4071159 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -1096,13 +1096,21 @@ namespace OpenSim.Region.Framework.Scenes public Quaternion SitTargetOrientation { get { return m_sitTargetOrientation; } - set { m_sitTargetOrientation = value; } + set + { + m_sitTargetOrientation = value; +// m_log.DebugFormat("[SCENE OBJECT PART]: Set sit target orientation {0} for {1} {2}", m_sitTargetOrientation, Name, LocalId); + } } public Vector3 SitTargetPosition { get { return m_sitTargetPosition; } - set { m_sitTargetPosition = value; } + set + { + m_sitTargetPosition = value; +// m_log.DebugFormat("[SCENE OBJECT PART]: Set sit target position to {0} for {1} {2}", m_sitTargetPosition, Name, LocalId); + } } // This sort of sucks, but I'm adding these in to make some of diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 89e511f..4156f21 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -89,7 +89,7 @@ namespace OpenSim.Region.Framework.Scenes /// rotation, prim cut, prim twist, prim taper, and prim shear. See mantis /// issue #1716 /// - private static readonly Vector3 SIT_TARGET_ADJUSTMENT = new Vector3(0.1f, 0.0f, 0.3f); + public static readonly Vector3 SIT_TARGET_ADJUSTMENT = new Vector3(0.1f, 0.0f, 0.3f); /// /// Movement updates for agents in neighboring regions are sent directly to clients. @@ -1873,7 +1873,7 @@ namespace OpenSim.Region.Framework.Scenes AddToPhysicalScene(false); } - m_pos += ParentPosition + new Vector3(0.0f, 0.0f, 2.0f*m_sitAvatarHeight); + m_pos += ParentPosition + new Vector3(0.0f, 0.0f, 2.0f * m_sitAvatarHeight); ParentPosition = Vector3.Zero; ParentID = 0; @@ -2283,6 +2283,10 @@ namespace OpenSim.Region.Framework.Scenes Vector3 sitTargetPos = part.SitTargetPosition; Quaternion sitTargetOrient = part.SitTargetOrientation; +// m_log.DebugFormat( +// "[SCENE PRESENCE]: Sitting {0} at sit target {1}, {2} on {3} {4}", +// Name, sitTargetPos, sitTargetOrient, part.Name, part.LocalId); + //Quaternion vq = new Quaternion(sitTargetPos.X, sitTargetPos.Y+0.2f, sitTargetPos.Z+0.2f, 0); //Quaternion nq = new Quaternion(-sitTargetOrient.X, -sitTargetOrient.Y, -sitTargetOrient.Z, sitTargetOrient.w); @@ -2291,15 +2295,17 @@ namespace OpenSim.Region.Framework.Scenes m_pos = new Vector3(sitTargetPos.X, sitTargetPos.Y, sitTargetPos.Z); m_pos += SIT_TARGET_ADJUSTMENT; Rotation = sitTargetOrient; - //Rotation = sitTargetOrient; ParentPosition = part.AbsolutePosition; - - //SendTerseUpdateToAllClients(); } else { m_pos -= part.AbsolutePosition; + ParentPosition = part.AbsolutePosition; + +// m_log.DebugFormat( +// "[SCENE PRESENCE]: Sitting {0} at position {1} ({2} + {3}) on part {4} {5} without sit target", +// Name, part.AbsolutePosition, m_pos, ParentPosition, part.Name, part.LocalId); } } else @@ -2314,10 +2320,6 @@ namespace OpenSim.Region.Framework.Scenes Animator.TrySetMovementAnimation(sitAnimation); SendAvatarDataToAllAgents(); - // This may seem stupid, but Our Full updates don't send avatar rotation :P - // So we're also sending a terse update (which has avatar rotation) - // [Update] We do now. - //SendTerseUpdateToAllClients(); } /// -- cgit v1.1