diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs index 1c272f8..57f741c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs | |||
@@ -308,7 +308,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
308 | } | 308 | } |
309 | SceneObjectPart SensePoint = ts.host; | 309 | SceneObjectPart SensePoint = ts.host; |
310 | 310 | ||
311 | Vector3 fromRegionPos = SensePoint.AbsolutePosition; | 311 | Vector3 fromRegionPos = SensePoint.GetWorldPosition(); |
312 | 312 | ||
313 | // pre define some things to avoid repeated definitions in the loop body | 313 | // pre define some things to avoid repeated definitions in the loop body |
314 | Vector3 toRegionPos; | 314 | Vector3 toRegionPos; |
@@ -319,14 +319,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
319 | float dy; | 319 | float dy; |
320 | float dz; | 320 | float dz; |
321 | 321 | ||
322 | Quaternion q = SensePoint.RotationOffset; | 322 | Quaternion q = SensePoint.GetWorldRotation(); |
323 | if (SensePoint.ParentGroup.IsAttachment) | 323 | if (SensePoint.ParentGroup.IsAttachment) |
324 | { | 324 | { |
325 | // In attachments, the sensor cone always orients with the | 325 | // In attachments, rotate the sensor cone with the |
326 | // avatar rotation. This may include a nonzero elevation if | 326 | // avatar rotation. This may include a nonzero elevation if |
327 | // in mouselook. | 327 | // in mouselook. |
328 | // This will not include the rotation and position of the | ||
329 | // attachment point (e.g. your head when a sensor is in your | ||
330 | // hair attached to your scull. Your hair will turn with | ||
331 | // your head but the sensor will stay with your (global) | ||
332 | // avatar rotation and position. | ||
333 | // Position of a sensor in a child prim attached to an avatar | ||
334 | // will be still wrong. | ||
328 | ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.AttachedAvatar); | 335 | ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.AttachedAvatar); |
329 | q = avatar.Rotation; | 336 | q = avatar.Rotation*q; |
330 | } | 337 | } |
331 | LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); | 338 | LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); |
332 | LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r); | 339 | LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r); |
@@ -439,16 +446,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
439 | return sensedEntities; | 446 | return sensedEntities; |
440 | 447 | ||
441 | SceneObjectPart SensePoint = ts.host; | 448 | SceneObjectPart SensePoint = ts.host; |
442 | Vector3 fromRegionPos = SensePoint.AbsolutePosition; | 449 | Vector3 fromRegionPos = SensePoint.GetWorldPosition(); |
443 | 450 | ||
444 | Quaternion q = SensePoint.RotationOffset; | 451 | Quaternion q = SensePoint.GetWorldRotation(); |
445 | if (SensePoint.ParentGroup.IsAttachment) | 452 | if (SensePoint.ParentGroup.IsAttachment) |
446 | { | 453 | { |
447 | // In attachments, the sensor cone always orients with the | 454 | // In attachments, rotate the sensor cone with the |
448 | // avatar rotation. This may include a nonzero elevation if | 455 | // avatar rotation. This may include a nonzero elevation if |
449 | // in mouselook. | 456 | // in mouselook. |
457 | // This will not include the rotation and position of the | ||
458 | // attachment point (e.g. your head when a sensor is in your | ||
459 | // hair attached to your scull. Your hair will turn with | ||
460 | // your head but the sensor will stay with your (global) | ||
461 | // avatar rotation and position. | ||
462 | // Position of a sensor in a child prim attached to an avatar | ||
463 | // will be still wrong. | ||
450 | ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.AttachedAvatar); | 464 | ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.AttachedAvatar); |
451 | q = avatar.Rotation; | 465 | q = avatar.Rotation*q; |
452 | } | 466 | } |
453 | 467 | ||
454 | LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); | 468 | LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); |