From 3af1cd65f91db87778096196bfd985dc48c72d87 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 6 Apr 2012 22:41:35 +0100
Subject: Fix llGetLinkPrimParams for PRIM_POS_LOCAL for child prims whether in
scene or attachments.
Return relative position to root prim rather than 0,0,0.
Should fix same issue with llGetLocalPos()
http://opensimulator.org/mantis/view.php?id=5951
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 16 +++++++++++++---
.../Shared/Api/Implementation/LSL_Api.cs | 21 +++++++++++----------
2 files changed, 24 insertions(+), 13 deletions(-)
(limited to 'OpenSim')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 9e65f5d..5ec0ed9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -125,12 +125,14 @@ namespace OpenSim.Region.Framework.Scenes
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
///
- /// Is this sop a root part?
+ /// Is this a root part?
///
-
+ ///
+ /// This will return true even if the whole object is attached to an avatar.
+ ///
public bool IsRoot
{
- get { return ParentGroup.RootPart == this; }
+ get { return ParentGroup.RootPart == this; }
}
#region Fields
@@ -1112,6 +1114,14 @@ namespace OpenSim.Region.Framework.Scenes
}
}
+ ///
+ /// The parent ID of this part.
+ ///
+ ///
+ /// If this is a root part which is not attached to an avatar then the value will be 0.
+ /// If this is a root part which is attached to an avatar then the value is the local id of that avatar.
+ /// If this is a child part then the value is the local ID of the root part.
+ ///
public uint ParentID
{
get { return _parentID; }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index a85a36e..ad73f47 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2022,27 +2022,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
protected LSL_Vector GetPartLocalPos(SceneObjectPart part)
{
m_host.AddScriptLPS(1);
+
+ Vector3 pos;
+
if (part.ParentID == 0)
{
- return new LSL_Vector(part.AbsolutePosition.X,
- part.AbsolutePosition.Y,
- part.AbsolutePosition.Z);
+ pos = part.AbsolutePosition;
}
else
{
- if (m_host.IsRoot)
+ if (part.IsRoot)
{
- return new LSL_Vector(m_host.AttachedPos.X,
- m_host.AttachedPos.Y,
- m_host.AttachedPos.Z);
+ pos = part.AttachedPos;
}
else
{
- return new LSL_Vector(part.OffsetPosition.X,
- part.OffsetPosition.Y,
- part.OffsetPosition.Z);
+ pos = part.OffsetPosition;
}
}
+
+// m_log.DebugFormat("[LSL API]: Returning {0} in GetPartLocalPos()", pos);
+
+ return new LSL_Vector(pos.X, pos.Y, pos.Z);
}
public void llSetRot(LSL_Rotation rot)
--
cgit v1.1