From 0fa57cac3fc05988bf182920c82fbeee0be075cf Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Mon, 3 May 2010 00:54:24 +0200
Subject: Fix sensor cone for sensing avatars

---
 .../Shared/Api/Implementation/Plugins/SensorRepeat.cs       | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index 4d7ead6..5e2e205 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -204,7 +204,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
             // Is the sensor type is AGENT and not SCRIPTED then include agents
             if ((ts.type & AGENT) != 0 && (ts.type & SCRIPTED) == 0)
             {
-               sensedEntities.AddRange(doAgentSensor(ts));
+                sensedEntities.AddRange(doAgentSensor(ts));
             }
 
             // If SCRIPTED or PASSIVE or ACTIVE check objects
@@ -309,6 +309,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
                 // in mouselook.
 
                 ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.RootPart.AttachedAvatar);
+                fromRegionPos = avatar.AbsolutePosition;
                 q = avatar.Rotation;
             }
             LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W);
@@ -422,6 +423,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
             SceneObjectPart SensePoint = ts.host;
             Vector3 fromRegionPos = SensePoint.AbsolutePosition;
             Quaternion q = SensePoint.RotationOffset;
+            if (SensePoint.ParentGroup.RootPart.IsAttachment)
+            {
+                // In attachments, the sensor cone always orients with the
+                // avatar rotation. This may include a nonzero elevation if
+                // in mouselook.
+
+                ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.RootPart.AttachedAvatar);
+                fromRegionPos = avatar.AbsolutePosition;
+                q = avatar.Rotation;
+            }
             LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W);
             LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r);
             double mag_fwd = LSL_Types.Vector3.Mag(forward_dir);
-- 
cgit v1.1