aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorTeravus Ovares2008-06-08 22:53:52 +0000
committerTeravus Ovares2008-06-08 22:53:52 +0000
commit6ecb7c05b348800e2148f1dad43c41b8ccd44a9b (patch)
tree3efec2d74a7932ab2a7cd8d9afe4640083e31a2a
parent* Added compiler pre-processor, #if SPAM to SensorRepeat... so if you really... (diff)
downloadopensim-SC-6ecb7c05b348800e2148f1dad43c41b8ccd44a9b.zip
opensim-SC-6ecb7c05b348800e2148f1dad43c41b8ccd44a9b.tar.gz
opensim-SC-6ecb7c05b348800e2148f1dad43c41b8ccd44a9b.tar.bz2
opensim-SC-6ecb7c05b348800e2148f1dad43c41b8ccd44a9b.tar.xz
* Fixed it so you can do a lot more llDetected* methods in many additional situations and have it work.
* script Collision reporting works now in DotNetEngine
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs299
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs64
-rw-r--r--OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs62
-rw-r--r--OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs3
4 files changed, 317 insertions, 111 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 2a9ad0a..614726e 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -2860,137 +2860,224 @@ namespace OpenSim.Region.Environment.Scenes
2860 endedColliders.Add(localID); 2860 endedColliders.Add(localID);
2861 } 2861 }
2862 } 2862 }
2863 // remove things that ended colliding from the last colliders list 2863
2864 foreach (uint localID in endedColliders)
2865 {
2866 m_lastColliders.Remove(localID);
2867 }
2868 2864
2869 //add the items that started colliding this time to the last colliders list. 2865 //add the items that started colliding this time to the last colliders list.
2870 foreach (uint localID in startedColliders) 2866 foreach (uint localID in startedColliders)
2871 { 2867 {
2872 m_lastColliders.Add(localID); 2868 m_lastColliders.Add(localID);
2873 } 2869 }
2874 // do event notification 2870 // remove things that ended colliding from the last colliders list
2875 if (startedColliders.Count > 0) 2871 foreach (uint localID in endedColliders)
2876 { 2872 {
2877 ColliderArgs StartCollidingMessage = new ColliderArgs(); 2873 m_lastColliders.Remove(localID);
2878 List<DetectedObject> colliding = new List<DetectedObject>(); 2874 }
2879 foreach (uint localId in startedColliders) 2875 if (m_parentGroup == null)
2876 return;
2877 if (m_parentGroup.RootPart == null)
2878 return;
2879
2880 if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_start) != 0)
2881 {
2882 // do event notification
2883 if (startedColliders.Count > 0)
2880 { 2884 {
2881 // always running this check because if the user deletes the object it would return a null reference. 2885 ColliderArgs StartCollidingMessage = new ColliderArgs();
2882 if (m_parentGroup == null) 2886 List<DetectedObject> colliding = new List<DetectedObject>();
2883 return; 2887 foreach (uint localId in startedColliders)
2884 if (m_parentGroup.Scene == null)
2885 return;
2886 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
2887 if (obj != null)
2888 { 2888 {
2889 DetectedObject detobj = new DetectedObject(); 2889 // always running this check because if the user deletes the object it would return a null reference.
2890 detobj.keyUUID = obj.UUID; 2890 if (m_parentGroup == null)
2891 detobj.nameStr = obj.Name; 2891 return;
2892 detobj.ownerUUID = obj.OwnerID; 2892 if (m_parentGroup.Scene == null)
2893 detobj.posVector = obj.AbsolutePosition; 2893 return;
2894 detobj.rotQuat = obj.GetWorldRotation(); 2894 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
2895 detobj.velVector = obj.Velocity; 2895 if (obj != null)
2896 detobj.colliderType = 0; 2896 {
2897 detobj.groupUUID = obj.GroupID; 2897 DetectedObject detobj = new DetectedObject();
2898 colliding.Add(detobj); 2898 detobj.keyUUID = obj.UUID;
2899 detobj.nameStr = obj.Name;
2900 detobj.ownerUUID = obj.OwnerID;
2901 detobj.posVector = obj.AbsolutePosition;
2902 detobj.rotQuat = obj.GetWorldRotation();
2903 detobj.velVector = obj.Velocity;
2904 detobj.colliderType = 0;
2905 detobj.groupUUID = obj.GroupID;
2906 colliding.Add(detobj);
2907 }
2908 else
2909 {
2910 List<ScenePresence> avlist = m_parentGroup.Scene.GetScenePresences();
2911 if (avlist != null)
2912 {
2913 foreach (ScenePresence av in avlist)
2914 {
2915 if (av.LocalId == localId)
2916 {
2917 DetectedObject detobj = new DetectedObject();
2918 detobj.keyUUID = av.UUID;
2919 detobj.nameStr = av.ControllingClient.Name;
2920 detobj.ownerUUID = av.UUID;
2921 detobj.posVector = av.AbsolutePosition;
2922 detobj.rotQuat = new LLQuaternion(av.Rotation.x, av.Rotation.y, av.Rotation.z, av.Rotation.w);
2923 detobj.velVector = av.Velocity;
2924 detobj.colliderType = 0;
2925 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2926 colliding.Add(detobj);
2927 }
2928 }
2929
2930 }
2931 }
2932 }
2933 if (colliding.Count > 0)
2934 {
2935 StartCollidingMessage.Colliders = colliding;
2936 // always running this check because if the user deletes the object it would return a null reference.
2937 if (m_parentGroup == null)
2938 return;
2939 if (m_parentGroup.Scene == null)
2940 return;
2941 m_parentGroup.Scene.EventManager.TriggerScriptCollidingStart(LocalId, StartCollidingMessage);
2899 } 2942 }
2900 }
2901 if (colliding.Count > 0)
2902 {
2903 StartCollidingMessage.Colliders = colliding;
2904 // always running this check because if the user deletes the object it would return a null reference.
2905 if (m_parentGroup == null)
2906 return;
2907 if (m_parentGroup.Scene == null)
2908 return;
2909 m_parentGroup.Scene.EventManager.TriggerScriptCollidingStart(LocalId, StartCollidingMessage);
2910 }
2911 2943
2944 }
2912 } 2945 }
2913 if (m_lastColliders.Count > 0) 2946 if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision) != 0)
2914 { 2947 {
2915 ColliderArgs CollidingMessage = new ColliderArgs(); 2948 if (m_lastColliders.Count > 0)
2916 List<DetectedObject> colliding = new List<DetectedObject>();
2917 foreach (uint localId in m_lastColliders)
2918 { 2949 {
2919 // always running this check because if the user deletes the object it would return a null reference. 2950 ColliderArgs CollidingMessage = new ColliderArgs();
2920 if (localId == 0) 2951 List<DetectedObject> colliding = new List<DetectedObject>();
2921 continue; 2952 foreach (uint localId in m_lastColliders)
2953 {
2954 // always running this check because if the user deletes the object it would return a null reference.
2955 if (localId == 0)
2956 continue;
2957
2958 if (m_parentGroup == null)
2959 return;
2960 if (m_parentGroup.Scene == null)
2961 return;
2962 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
2963 if (obj != null)
2964 {
2965 DetectedObject detobj = new DetectedObject();
2966 detobj.keyUUID = obj.UUID;
2967 detobj.nameStr = obj.Name;
2968 detobj.ownerUUID = obj.OwnerID;
2969 detobj.posVector = obj.AbsolutePosition;
2970 detobj.rotQuat = obj.GetWorldRotation();
2971 detobj.velVector = obj.Velocity;
2972 detobj.colliderType = 0;
2973 detobj.groupUUID = obj.GroupID;
2974 colliding.Add(detobj);
2975 }
2976 else
2977 {
2978 List<ScenePresence> avlist = m_parentGroup.Scene.GetScenePresences();
2979 if (avlist != null)
2980 {
2981 foreach (ScenePresence av in avlist)
2982 {
2983 if (av.LocalId == localId)
2984 {
2985 DetectedObject detobj = new DetectedObject();
2986 detobj.keyUUID = av.UUID;
2987 detobj.nameStr = av.Name;
2988 detobj.ownerUUID = av.UUID;
2989 detobj.posVector = av.AbsolutePosition;
2990 detobj.rotQuat = new LLQuaternion(av.Rotation.x, av.Rotation.y, av.Rotation.z, av.Rotation.w);
2991 detobj.velVector = av.Velocity;
2992 detobj.colliderType = 0;
2993 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2994 colliding.Add(detobj);
2995 }
2996 }
2922 2997
2923 if (m_parentGroup == null) 2998 }
2924 return; 2999 }
2925 if (m_parentGroup.Scene == null) 3000 }
2926 return; 3001 if (colliding.Count > 0)
2927 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
2928 if (obj != null)
2929 { 3002 {
2930 DetectedObject detobj = new DetectedObject(); 3003 CollidingMessage.Colliders = colliding;
2931 detobj.keyUUID = obj.UUID; 3004 // always running this check because if the user deletes the object it would return a null reference.
2932 detobj.nameStr = obj.Name; 3005 if (m_parentGroup == null)
2933 detobj.ownerUUID = obj.OwnerID; 3006 return;
2934 detobj.posVector = obj.AbsolutePosition; 3007 if (m_parentGroup.Scene == null)
2935 detobj.rotQuat = obj.GetWorldRotation(); 3008 return;
2936 detobj.velVector = obj.Velocity; 3009 m_parentGroup.Scene.EventManager.TriggerScriptColliding(LocalId, CollidingMessage);
2937 detobj.colliderType = 0;
2938 detobj.groupUUID = obj.GroupID;
2939 colliding.Add(detobj);
2940 } 3010 }
2941 }
2942 if (colliding.Count > 0)
2943 {
2944 CollidingMessage.Colliders = colliding;
2945 // always running this check because if the user deletes the object it would return a null reference.
2946 if (m_parentGroup == null)
2947 return;
2948 if (m_parentGroup.Scene == null)
2949 return;
2950 m_parentGroup.Scene.EventManager.TriggerScriptCollidingStart(LocalId, CollidingMessage);
2951 }
2952 3011
3012 }
2953 } 3013 }
2954 if (endedColliders.Count > 0) 3014 if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_end) != 0)
2955 { 3015 {
2956 ColliderArgs EndCollidingMessage = new ColliderArgs(); 3016 if (endedColliders.Count > 0)
2957 List<DetectedObject> colliding = new List<DetectedObject>();
2958 foreach (uint localId in endedColliders)
2959 { 3017 {
2960 if (localId == 0) 3018 ColliderArgs EndCollidingMessage = new ColliderArgs();
2961 continue; 3019 List<DetectedObject> colliding = new List<DetectedObject>();
3020 foreach (uint localId in endedColliders)
3021 {
3022 if (localId == 0)
3023 continue;
3024
3025 // always running this check because if the user deletes the object it would return a null reference.
3026 if (m_parentGroup == null)
3027 return;
3028 if (m_parentGroup.Scene == null)
3029 return;
3030 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
3031 if (obj != null)
3032 {
3033 DetectedObject detobj = new DetectedObject();
3034 detobj.keyUUID = obj.UUID;
3035 detobj.nameStr = obj.Name;
3036 detobj.ownerUUID = obj.OwnerID;
3037 detobj.posVector = obj.AbsolutePosition;
3038 detobj.rotQuat = obj.GetWorldRotation();
3039 detobj.velVector = obj.Velocity;
3040 detobj.colliderType = 0;
3041 detobj.groupUUID = obj.GroupID;
3042 colliding.Add(detobj);
3043 }
3044 else
3045 {
3046 List<ScenePresence> avlist = m_parentGroup.Scene.GetScenePresences();
3047 if (avlist != null)
3048 {
3049 foreach (ScenePresence av in avlist)
3050 {
3051 if (av.LocalId == localId)
3052 {
3053 DetectedObject detobj = new DetectedObject();
3054 detobj.keyUUID = av.UUID;
3055 detobj.nameStr = av.Name;
3056 detobj.ownerUUID = av.UUID;
3057 detobj.posVector = av.AbsolutePosition;
3058 detobj.rotQuat = new LLQuaternion(av.Rotation.x, av.Rotation.y, av.Rotation.z, av.Rotation.w);
3059 detobj.velVector = av.Velocity;
3060 detobj.colliderType = 0;
3061 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
3062 colliding.Add(detobj);
3063 }
3064 }
2962 3065
2963 // always running this check because if the user deletes the object it would return a null reference. 3066 }
2964 if (m_parentGroup == null) 3067 }
2965 return; 3068 }
2966 if (m_parentGroup.Scene == null) 3069 if (colliding.Count > 0)
2967 return;
2968 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
2969 if (obj != null)
2970 { 3070 {
2971 DetectedObject detobj = new DetectedObject(); 3071 EndCollidingMessage.Colliders = colliding;
2972 detobj.keyUUID = obj.UUID; 3072 // always running this check because if the user deletes the object it would return a null reference.
2973 detobj.nameStr = obj.Name; 3073 if (m_parentGroup == null)
2974 detobj.ownerUUID = obj.OwnerID; 3074 return;
2975 detobj.posVector = obj.AbsolutePosition; 3075 if (m_parentGroup.Scene == null)
2976 detobj.rotQuat = obj.GetWorldRotation(); 3076 return;
2977 detobj.velVector = obj.Velocity; 3077 m_parentGroup.Scene.EventManager.TriggerScriptCollidingEnd(LocalId, EndCollidingMessage);
2978 detobj.colliderType = 0;
2979 detobj.groupUUID = obj.GroupID;
2980 colliding.Add(detobj);
2981 } 3078 }
2982 }
2983 if (colliding.Count > 0)
2984 {
2985 EndCollidingMessage.Colliders = colliding;
2986 // always running this check because if the user deletes the object it would return a null reference.
2987 if (m_parentGroup == null)
2988 return;
2989 if (m_parentGroup.Scene == null)
2990 return;
2991 m_parentGroup.Scene.EventManager.TriggerScriptCollidingStart(LocalId, EndCollidingMessage);
2992 }
2993 3079
3080 }
2994 } 3081 }
2995 } 3082 }
2996 3083
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index 2ac074f..688354c 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -563,6 +563,32 @@ namespace OpenSim.Region.ScriptEngine.Common
563 return resolveName(SensedUUID); 563 return resolveName(SensedUUID);
564 } 564 }
565 } 565 }
566 else
567 {
568 ScriptManager sm;
569 IScript script = null;
570
571 if ((sm = m_ScriptEngine.m_ScriptManager) != null)
572 {
573 if (sm.Scripts.ContainsKey(m_localID))
574 {
575 if ((script = sm.GetScript(m_localID, m_itemID)) != null)
576 {
577 //System.Console.WriteLine(number + " - " + script.llDetectParams._key.Length);
578 if (script.llDetectParams._string != null)
579 {
580 if (script.llDetectParams._string.Length > number)
581 {
582 if (script.llDetectParams._string[number] != null)
583 {
584 return script.llDetectParams._string[number];
585 }
586 }
587 }
588 }
589 }
590 }
591 }
566 return String.Empty; 592 return String.Empty;
567 } 593 }
568 594
@@ -588,9 +614,13 @@ namespace OpenSim.Region.ScriptEngine.Common
588 { 614 {
589 if ((script = sm.GetScript(m_localID, m_itemID)) != null) 615 if ((script = sm.GetScript(m_localID, m_itemID)) != null)
590 { 616 {
591 if (script.llDetectParams._key[0]) 617 //System.Console.WriteLine(number + " - " + script.llDetectParams._key.Length);
618 if (script.llDetectParams._key.Length > number)
592 { 619 {
593 return new LLUUID(script.llDetectParams._key[0]); 620 if (script.llDetectParams._key[number])
621 {
622 return new LLUUID(script.llDetectParams._key[number]);
623 }
594 } 624 }
595 } 625 }
596 } 626 }
@@ -615,6 +645,36 @@ namespace OpenSim.Region.ScriptEngine.Common
615 return SensedObject; 645 return SensedObject;
616 } 646 }
617 } 647 }
648 else
649 {
650 ScriptManager sm;
651 IScript script = null;
652
653 if ((sm = m_ScriptEngine.m_ScriptManager) != null)
654 {
655 if (sm.Scripts.ContainsKey(m_localID))
656 {
657 if ((script = sm.GetScript(m_localID, m_itemID)) != null)
658 {
659 //System.Console.WriteLine(number + " - " + script.llDetectParams._key.Length);
660 if (script.llDetectParams._key.Length > number)
661 {
662 if (script.llDetectParams._key[number])
663 {
664 LLUUID SensedUUID = new LLUUID(script.llDetectParams._key[number]);
665 EntityBase SensedObject = null;
666 lock (World.Entities)
667 {
668 World.Entities.TryGetValue(SensedUUID, out SensedObject);
669 }
670 return SensedObject;
671 }
672 }
673 }
674 }
675 }
676 }
677
618 return null; 678 return null;
619 } 679 }
620 680
diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs
index ae84f65..c51e66b 100644
--- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs
+++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs
@@ -121,7 +121,33 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
121 // Add to queue for all scripts in ObjectID object 121 // Add to queue for all scripts in ObjectID object
122 EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct(); 122 EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
123 detstruct._key = new LSL_Types.key[1]; 123 detstruct._key = new LSL_Types.key[1];
124 detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString()); 124 detstruct._key2 = new LSL_Types.key[1];
125 detstruct._string = new string[1];
126 detstruct._Vector3 = new LSL_Types.Vector3[1];
127 detstruct._Vector32 = new LSL_Types.Vector3[1];
128 detstruct._Quaternion = new LSL_Types.Quaternion[1];
129 detstruct._int = new int[1];
130 ScenePresence av = myScriptEngine.World.GetScenePresence(remoteClient.AgentId);
131 if (av != null)
132 {
133 detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
134 detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
135 detstruct._string[0] = remoteClient.Name;
136 detstruct._int[0] = 0;
137 detstruct._Quaternion[0] = new LSL_Types.Quaternion(av.Rotation.x,av.Rotation.y,av.Rotation.z,av.Rotation.w);
138 detstruct._Vector3[0] = new LSL_Types.Vector3(av.AbsolutePosition.X,av.AbsolutePosition.Y,av.AbsolutePosition.Z);
139 detstruct._Vector32[0] = new LSL_Types.Vector3(av.Velocity.X,av.Velocity.Y,av.Velocity.Z);
140 }
141 else
142 {
143 detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
144 detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
145 detstruct._string[0] = remoteClient.Name;
146 detstruct._int[0] = 0;
147 detstruct._Quaternion[0] = new LSL_Types.Quaternion(0, 0, 0, 1);
148 detstruct._Vector3[0] = new LSL_Types.Vector3(0, 0, 0);
149 detstruct._Vector32[0] = new LSL_Types.Vector3(0, 0, 0);
150 }
125 myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "touch_start", detstruct, new object[] { new LSL_Types.LSLInteger(1) }); 151 myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "touch_start", detstruct, new object[] { new LSL_Types.LSLInteger(1) });
126 } 152 }
127 153
@@ -130,7 +156,33 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
130 // Add to queue for all scripts in ObjectID object 156 // Add to queue for all scripts in ObjectID object
131 EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct(); 157 EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
132 detstruct._key = new LSL_Types.key[1]; 158 detstruct._key = new LSL_Types.key[1];
133 detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString()); 159 detstruct._key2 = new LSL_Types.key[1];
160 detstruct._string = new string[1];
161 detstruct._Vector3 = new LSL_Types.Vector3[1];
162 detstruct._Vector32 = new LSL_Types.Vector3[1];
163 detstruct._Quaternion = new LSL_Types.Quaternion[1];
164 detstruct._int = new int[1];
165 ScenePresence av = myScriptEngine.World.GetScenePresence(remoteClient.AgentId);
166 if (av != null)
167 {
168 detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
169 detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
170 detstruct._string[0] = remoteClient.Name;
171 detstruct._int[0] = 0;
172 detstruct._Quaternion[0] = new LSL_Types.Quaternion(av.Rotation.x, av.Rotation.y, av.Rotation.z, av.Rotation.w);
173 detstruct._Vector3[0] = new LSL_Types.Vector3(av.AbsolutePosition.X, av.AbsolutePosition.Y, av.AbsolutePosition.Z);
174 detstruct._Vector32[0] = new LSL_Types.Vector3(av.Velocity.X, av.Velocity.Y, av.Velocity.Z);
175 }
176 else
177 {
178 detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
179 detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
180 detstruct._string[0] = remoteClient.Name;
181 detstruct._int[0] = 0;
182 detstruct._Quaternion[0] = new LSL_Types.Quaternion(0, 0, 0, 1);
183 detstruct._Vector3[0] = new LSL_Types.Vector3(0, 0, 0);
184 detstruct._Vector32[0] = new LSL_Types.Vector3(0, 0, 0);
185 }
134 myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "touch_end", detstruct, new object[] { new LSL_Types.LSLInteger(1) }); 186 myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "touch_end", detstruct, new object[] { new LSL_Types.LSLInteger(1) });
135 } 187 }
136 188
@@ -184,6 +236,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
184 detstruct._Quaternion = new LSL_Types.Quaternion[col.Colliders.Count]; 236 detstruct._Quaternion = new LSL_Types.Quaternion[col.Colliders.Count];
185 detstruct._int = new int[col.Colliders.Count]; 237 detstruct._int = new int[col.Colliders.Count];
186 detstruct._key = new LSL_Types.key[col.Colliders.Count]; 238 detstruct._key = new LSL_Types.key[col.Colliders.Count];
239 detstruct._key2 = new LSL_Types.key[col.Colliders.Count];
187 detstruct._Vector3 = new LSL_Types.Vector3[col.Colliders.Count]; 240 detstruct._Vector3 = new LSL_Types.Vector3[col.Colliders.Count];
188 detstruct._Vector32 = new LSL_Types.Vector3[col.Colliders.Count]; 241 detstruct._Vector32 = new LSL_Types.Vector3[col.Colliders.Count];
189 detstruct._bool = new bool[col.Colliders.Count]; 242 detstruct._bool = new bool[col.Colliders.Count];
@@ -192,6 +245,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
192 foreach (DetectedObject detobj in col.Colliders) 245 foreach (DetectedObject detobj in col.Colliders)
193 { 246 {
194 detstruct._key[i] = new LSL_Types.key(detobj.keyUUID.ToString()); 247 detstruct._key[i] = new LSL_Types.key(detobj.keyUUID.ToString());
248 detstruct._key2[i] = new LSL_Types.key(detobj.ownerUUID.ToString());
195 detstruct._Quaternion[i] = new LSL_Types.Quaternion(detobj.rotQuat.X, detobj.rotQuat.Y, detobj.rotQuat.Z, detobj.rotQuat.W); 249 detstruct._Quaternion[i] = new LSL_Types.Quaternion(detobj.rotQuat.X, detobj.rotQuat.Y, detobj.rotQuat.Z, detobj.rotQuat.W);
196 detstruct._string[i] = detobj.nameStr; 250 detstruct._string[i] = detobj.nameStr;
197 detstruct._int[i] = detobj.colliderType; 251 detstruct._int[i] = detobj.colliderType;
@@ -211,6 +265,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
211 detstruct._Quaternion = new LSL_Types.Quaternion[col.Colliders.Count]; 265 detstruct._Quaternion = new LSL_Types.Quaternion[col.Colliders.Count];
212 detstruct._int = new int[col.Colliders.Count]; 266 detstruct._int = new int[col.Colliders.Count];
213 detstruct._key = new LSL_Types.key[col.Colliders.Count]; 267 detstruct._key = new LSL_Types.key[col.Colliders.Count];
268 detstruct._key2 = new LSL_Types.key[col.Colliders.Count];
214 detstruct._Vector3 = new LSL_Types.Vector3[col.Colliders.Count]; 269 detstruct._Vector3 = new LSL_Types.Vector3[col.Colliders.Count];
215 detstruct._Vector32 = new LSL_Types.Vector3[col.Colliders.Count]; 270 detstruct._Vector32 = new LSL_Types.Vector3[col.Colliders.Count];
216 detstruct._bool = new bool[col.Colliders.Count]; 271 detstruct._bool = new bool[col.Colliders.Count];
@@ -219,6 +274,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
219 foreach (DetectedObject detobj in col.Colliders) 274 foreach (DetectedObject detobj in col.Colliders)
220 { 275 {
221 detstruct._key[i] = new LSL_Types.key(detobj.keyUUID.ToString()); 276 detstruct._key[i] = new LSL_Types.key(detobj.keyUUID.ToString());
277 detstruct._key2[i] = new LSL_Types.key(detobj.ownerUUID.ToString());
222 detstruct._Quaternion[i] = new LSL_Types.Quaternion(detobj.rotQuat.X, detobj.rotQuat.Y, detobj.rotQuat.Z, detobj.rotQuat.W); 278 detstruct._Quaternion[i] = new LSL_Types.Quaternion(detobj.rotQuat.X, detobj.rotQuat.Y, detobj.rotQuat.Z, detobj.rotQuat.W);
223 detstruct._string[i] = detobj.nameStr; 279 detstruct._string[i] = detobj.nameStr;
224 detstruct._int[i] = detobj.colliderType; 280 detstruct._int[i] = detobj.colliderType;
@@ -236,6 +292,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
236 detstruct._Quaternion = new LSL_Types.Quaternion[col.Colliders.Count]; 292 detstruct._Quaternion = new LSL_Types.Quaternion[col.Colliders.Count];
237 detstruct._int = new int[col.Colliders.Count]; 293 detstruct._int = new int[col.Colliders.Count];
238 detstruct._key = new LSL_Types.key[col.Colliders.Count]; 294 detstruct._key = new LSL_Types.key[col.Colliders.Count];
295 detstruct._key2 = new LSL_Types.key[col.Colliders.Count];
239 detstruct._Vector3 = new LSL_Types.Vector3[col.Colliders.Count]; 296 detstruct._Vector3 = new LSL_Types.Vector3[col.Colliders.Count];
240 detstruct._Vector32 = new LSL_Types.Vector3[col.Colliders.Count]; 297 detstruct._Vector32 = new LSL_Types.Vector3[col.Colliders.Count];
241 detstruct._bool = new bool[col.Colliders.Count]; 298 detstruct._bool = new bool[col.Colliders.Count];
@@ -244,6 +301,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
244 foreach (DetectedObject detobj in col.Colliders) 301 foreach (DetectedObject detobj in col.Colliders)
245 { 302 {
246 detstruct._key[i] = new LSL_Types.key(detobj.keyUUID.ToString()); 303 detstruct._key[i] = new LSL_Types.key(detobj.keyUUID.ToString());
304 detstruct._key2[i] = new LSL_Types.key(detobj.ownerUUID.ToString());
247 detstruct._Quaternion[i] = new LSL_Types.Quaternion(detobj.rotQuat.X, detobj.rotQuat.Y, detobj.rotQuat.Z, detobj.rotQuat.W); 305 detstruct._Quaternion[i] = new LSL_Types.Quaternion(detobj.rotQuat.X, detobj.rotQuat.Y, detobj.rotQuat.Z, detobj.rotQuat.W);
248 detstruct._string[i] = detobj.nameStr; 306 detstruct._string[i] = detobj.nameStr;
249 detstruct._int[i] = detobj.colliderType; 307 detstruct._int[i] = detobj.colliderType;
diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs
index c6eebf1..79c1dde 100644
--- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs
+++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueManager.cs
@@ -153,7 +153,8 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
153 { 153 {
154 // More or less just a placeholder for the actual moving of additional data 154 // More or less just a placeholder for the actual moving of additional data
155 // should be fixed to something better :) 155 // should be fixed to something better :)
156 public LSL_Types.key[] _key; 156 public LSL_Types.key[] _key; // detected key
157 public LSL_Types.key[] _key2; // ownerkey
157 public LSL_Types.Quaternion[] _Quaternion; 158 public LSL_Types.Quaternion[] _Quaternion;
158 public LSL_Types.Vector3[] _Vector3; // Pos 159 public LSL_Types.Vector3[] _Vector3; // Pos
159 public LSL_Types.Vector3[] _Vector32; // Vel 160 public LSL_Types.Vector3[] _Vector32; // Vel