aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs10
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs15
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs5
3 files changed, 26 insertions, 4 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index 4c99873..8bf47e7 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -251,10 +251,16 @@ namespace OpenSim.Region.Framework.Scenes
251 251
252 // If the touched prim handles touches, deliver it 252 // If the touched prim handles touches, deliver it
253 // If not, deliver to root prim 253 // If not, deliver to root prim
254 if ((part.ScriptEvents & scriptEvents.touch_start) != 0) 254 if ((part.ScriptEvents & scriptEvents.touch_start) != 0)
255 EventManager.TriggerObjectGrab(part.LocalId, 0, part.OffsetPosition, remoteClient, surfaceArg); 255 EventManager.TriggerObjectGrab(part.LocalId, 0, part.OffsetPosition, remoteClient, surfaceArg);
256 else 256 // Deliver to the root prim if the touched prim doesn't handle touches
257 // or if we're meant to pass on touches anyway. Don't send to root prim
258 // if prim touched is the root prim as we just did it
259 if (((part.ScriptEvents & scriptEvents.touch_start) == 0) ||
260 (part.PassTouches && (part.LocalId != obj.RootPart.LocalId)))
261 {
257 EventManager.TriggerObjectGrab(obj.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg); 262 EventManager.TriggerObjectGrab(obj.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg);
263 }
258 264
259 return; 265 return;
260 } 266 }
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 9a455ae..719b028 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -102,7 +102,6 @@ namespace OpenSim.Region.Framework.Scenes
102 102
103 #region Fields 103 #region Fields
104 104
105 [XmlIgnore]
106 public bool AllowedDrop = false; 105 public bool AllowedDrop = false;
107 106
108 [XmlIgnore] 107 [XmlIgnore]
@@ -216,6 +215,9 @@ namespace OpenSim.Region.Framework.Scenes
216 private readonly UndoStack<UndoState> m_undo = new UndoStack<UndoState>(5); 215 private readonly UndoStack<UndoState> m_undo = new UndoStack<UndoState>(5);
217 private UUID _creatorID; 216 private UUID _creatorID;
218 217
218
219 private bool m_passTouches = false;
220
219 /// <summary> 221 /// <summary>
220 /// Only used internally to schedule client updates. 222 /// Only used internally to schedule client updates.
221 /// 0 - no update is scheduled 223 /// 0 - no update is scheduled
@@ -431,6 +433,17 @@ namespace OpenSim.Region.Framework.Scenes
431 } 433 }
432 } 434 }
433 435
436 public bool PassTouches
437 {
438 get { return m_passTouches; }
439 set
440 {
441 m_passTouches = value;
442 if (ParentGroup != null)
443 ParentGroup.HasGroupChanged = true;
444 }
445 }
446
434 public ulong RegionHandle 447 public ulong RegionHandle
435 { 448 {
436 get { return m_regionHandle; } 449 get { return m_regionHandle; }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index f932dbe..f4a944c 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -3705,7 +3705,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3705 public void llPassTouches(int pass) 3705 public void llPassTouches(int pass)
3706 { 3706 {
3707 m_host.AddScriptLPS(1); 3707 m_host.AddScriptLPS(1);
3708 NotImplemented("llPassTouches"); 3708 if (pass != 0)
3709 m_host.PassTouches = true;
3710 else
3711 m_host.PassTouches = false;
3709 } 3712 }
3710 3713
3711 public LSL_String llRequestAgentData(string id, int data) 3714 public LSL_String llRequestAgentData(string id, int data)