diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 2dbbf70..4e665e9 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -1978,6 +1978,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1978 | return new LSL_Rotation(q.X, q.Y, q.Z, q.W); | 1978 | return new LSL_Rotation(q.X, q.Y, q.Z, q.W); |
1979 | } | 1979 | } |
1980 | 1980 | ||
1981 | private LSL_Rotation GetPartRot( SceneObjectPart part ) | ||
1982 | { | ||
1983 | Quaternion q; | ||
1984 | if (part.LinkNum == 0 || part.LinkNum == 1) // unlinked or root prim | ||
1985 | { | ||
1986 | if (part.ParentGroup.RootPart.AttachmentPoint != 0) | ||
1987 | { | ||
1988 | ScenePresence avatar = World.GetScenePresence(part.AttachedAvatar); | ||
1989 | if (avatar != null) | ||
1990 | if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) | ||
1991 | q = avatar.CameraRotation; // Mouselook | ||
1992 | else | ||
1993 | q = avatar.Rotation; // Currently infrequently updated so may be inaccurate | ||
1994 | else | ||
1995 | q = part.ParentGroup.GroupRotation; // Likely never get here but just in case | ||
1996 | } | ||
1997 | else | ||
1998 | q = part.ParentGroup.GroupRotation; // just the group rotation | ||
1999 | return new LSL_Rotation(q.X, q.Y, q.Z, q.W); | ||
2000 | } | ||
2001 | q = part.GetWorldRotation(); | ||
2002 | return new LSL_Rotation(q.X, q.Y, q.Z, q.W); | ||
2003 | } | ||
2004 | |||
1981 | public LSL_Rotation llGetLocalRot() | 2005 | public LSL_Rotation llGetLocalRot() |
1982 | { | 2006 | { |
1983 | m_host.AddScriptLPS(1); | 2007 | m_host.AddScriptLPS(1); |
@@ -7299,7 +7323,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7299 | break; | 7323 | break; |
7300 | 7324 | ||
7301 | case (int)ScriptBaseClass.PRIM_ROTATION: | 7325 | case (int)ScriptBaseClass.PRIM_ROTATION: |
7302 | res.Add(llGetRot()); | 7326 | res.Add(GetPartRot(part)); |
7303 | break; | 7327 | break; |
7304 | 7328 | ||
7305 | case (int)ScriptBaseClass.PRIM_TYPE: | 7329 | case (int)ScriptBaseClass.PRIM_TYPE: |