diff options
author | Revolution | 2010-01-10 14:28:53 -0600 |
---|---|---|
committer | Melanie | 2010-01-10 19:58:18 +0000 |
commit | 038ec133e648ab99643f5738e4ab85e450e5aa45 (patch) | |
tree | 49615f146772b4bef04a75c85b401aa6b21e6393 | |
parent | Fix a small bug in login disable code (diff) | |
download | opensim-SC-038ec133e648ab99643f5738e4ab85e450e5aa45.zip opensim-SC-038ec133e648ab99643f5738e4ab85e450e5aa45.tar.gz opensim-SC-038ec133e648ab99643f5738e4ab85e450e5aa45.tar.bz2 opensim-SC-038ec133e648ab99643f5738e4ab85e450e5aa45.tar.xz |
Adds land collision events.
CRs cleaned from patch
Signed-off-by: Melanie <melanie@t-data.com>
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/EventManager.cs | 28 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 138 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/XEngine/EventManager.cs | 71 |
3 files changed, 210 insertions, 27 deletions
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 753344d..4dd6f32 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -189,6 +189,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
189 | public event ScriptColliding OnScriptColliding; | 189 | public event ScriptColliding OnScriptColliding; |
190 | public event ScriptColliding OnScriptCollidingEnd; | 190 | public event ScriptColliding OnScriptCollidingEnd; |
191 | 191 | ||
192 | public event ScriptColliding OnScriptLandColliderStart; | ||
193 | public event ScriptColliding OnScriptLandColliding; | ||
194 | public event ScriptColliding OnScriptLandColliderEnd; | ||
195 | |||
192 | public delegate void OnMakeChildAgentDelegate(ScenePresence presence); | 196 | public delegate void OnMakeChildAgentDelegate(ScenePresence presence); |
193 | public event OnMakeChildAgentDelegate OnMakeChildAgent; | 197 | public event OnMakeChildAgentDelegate OnMakeChildAgent; |
194 | 198 | ||
@@ -439,6 +443,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
439 | private ScriptColliding handlerCollidingStart = null; | 443 | private ScriptColliding handlerCollidingStart = null; |
440 | private ScriptColliding handlerColliding = null; | 444 | private ScriptColliding handlerColliding = null; |
441 | private ScriptColliding handlerCollidingEnd = null; | 445 | private ScriptColliding handlerCollidingEnd = null; |
446 | private ScriptColliding handlerLandCollidingStart = null; | ||
447 | private ScriptColliding handlerLandColliding = null; | ||
448 | private ScriptColliding handlerLandCollidingEnd = null; | ||
442 | private GetScriptRunning handlerGetScriptRunning = null; | 449 | private GetScriptRunning handlerGetScriptRunning = null; |
443 | 450 | ||
444 | private SunLindenHour handlerCurrentTimeAsLindenSunHour = null; | 451 | private SunLindenHour handlerCurrentTimeAsLindenSunHour = null; |
@@ -1034,6 +1041,27 @@ namespace OpenSim.Region.Framework.Scenes | |||
1034 | handlerCollidingEnd(localId, colliders); | 1041 | handlerCollidingEnd(localId, colliders); |
1035 | } | 1042 | } |
1036 | 1043 | ||
1044 | public void TriggerScriptLandCollidingStart(uint localId, ColliderArgs colliders) | ||
1045 | { | ||
1046 | handlerLandCollidingStart = OnScriptLandColliderStart; | ||
1047 | if (handlerLandCollidingStart != null) | ||
1048 | handlerLandCollidingStart(localId, colliders); | ||
1049 | } | ||
1050 | |||
1051 | public void TriggerScriptLandColliding(uint localId, ColliderArgs colliders) | ||
1052 | { | ||
1053 | handlerLandColliding = OnScriptLandColliding; | ||
1054 | if (handlerLandColliding != null) | ||
1055 | handlerLandColliding(localId, colliders); | ||
1056 | } | ||
1057 | |||
1058 | public void TriggerScriptLandCollidingEnd(uint localId, ColliderArgs colliders) | ||
1059 | { | ||
1060 | handlerLandCollidingEnd = OnScriptLandColliderEnd; | ||
1061 | if (handlerLandCollidingEnd != null) | ||
1062 | handlerLandCollidingEnd(localId, colliders); | ||
1063 | } | ||
1064 | |||
1037 | public void TriggerSetRootAgentScene(UUID agentID, Scene scene) | 1065 | public void TriggerSetRootAgentScene(UUID agentID, Scene scene) |
1038 | { | 1066 | { |
1039 | handlerSetRootAgentScene = OnSetRootAgentScene; | 1067 | handlerSetRootAgentScene = OnSetRootAgentScene; |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index cadb19f..a427f12 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -1853,16 +1853,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1853 | // and build up list of colliders this time | 1853 | // and build up list of colliders this time |
1854 | foreach (uint localid in collissionswith.Keys) | 1854 | foreach (uint localid in collissionswith.Keys) |
1855 | { | 1855 | { |
1856 | if (localid != 0) | 1856 | thisHitColliders.Add(localid); |
1857 | if (!m_lastColliders.Contains(localid)) | ||
1857 | { | 1858 | { |
1858 | thisHitColliders.Add(localid); | 1859 | startedColliders.Add(localid); |
1859 | if (!m_lastColliders.Contains(localid)) | ||
1860 | { | ||
1861 | startedColliders.Add(localid); | ||
1862 | } | ||
1863 | |||
1864 | //m_log.Debug("[OBJECT]: Collided with:" + localid.ToString() + " at depth of: " + collissionswith[localid].ToString()); | ||
1865 | } | 1860 | } |
1861 | //m_log.Debug("[OBJECT]: Collided with:" + localid.ToString() + " at depth of: " + collissionswith[localid].ToString()); | ||
1866 | } | 1862 | } |
1867 | 1863 | ||
1868 | // calculate things that ended colliding | 1864 | // calculate things that ended colliding |
@@ -1904,6 +1900,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1904 | List<DetectedObject> colliding = new List<DetectedObject>(); | 1900 | List<DetectedObject> colliding = new List<DetectedObject>(); |
1905 | foreach (uint localId in startedColliders) | 1901 | foreach (uint localId in startedColliders) |
1906 | { | 1902 | { |
1903 | if (localId == 0) | ||
1904 | return; | ||
1907 | // always running this check because if the user deletes the object it would return a null reference. | 1905 | // always running this check because if the user deletes the object it would return a null reference. |
1908 | if (m_parentGroup == null) | 1906 | if (m_parentGroup == null) |
1909 | return; | 1907 | return; |
@@ -2039,7 +2037,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2039 | { | 2037 | { |
2040 | // always running this check because if the user deletes the object it would return a null reference. | 2038 | // always running this check because if the user deletes the object it would return a null reference. |
2041 | if (localId == 0) | 2039 | if (localId == 0) |
2042 | continue; | 2040 | return; |
2043 | 2041 | ||
2044 | if (m_parentGroup == null) | 2042 | if (m_parentGroup == null) |
2045 | return; | 2043 | return; |
@@ -2171,7 +2169,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2171 | foreach (uint localId in endedColliders) | 2169 | foreach (uint localId in endedColliders) |
2172 | { | 2170 | { |
2173 | if (localId == 0) | 2171 | if (localId == 0) |
2174 | continue; | 2172 | return; |
2175 | 2173 | ||
2176 | // always running this check because if the user deletes the object it would return a null reference. | 2174 | // always running this check because if the user deletes the object it would return a null reference. |
2177 | if (m_parentGroup == null) | 2175 | if (m_parentGroup == null) |
@@ -2293,6 +2291,120 @@ namespace OpenSim.Region.Framework.Scenes | |||
2293 | } | 2291 | } |
2294 | } | 2292 | } |
2295 | } | 2293 | } |
2294 | if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_start) != 0) | ||
2295 | { | ||
2296 | if (startedColliders.Count > 0) | ||
2297 | { | ||
2298 | ColliderArgs LandStartCollidingMessage = new ColliderArgs(); | ||
2299 | List<DetectedObject> colliding = new List<DetectedObject>(); | ||
2300 | foreach (uint localId in startedColliders) | ||
2301 | { | ||
2302 | if (localId == 0) | ||
2303 | { | ||
2304 | //Hope that all is left is ground! | ||
2305 | DetectedObject detobj = new DetectedObject(); | ||
2306 | detobj.keyUUID = UUID.Zero; | ||
2307 | detobj.nameStr = ""; | ||
2308 | detobj.ownerUUID = UUID.Zero; | ||
2309 | detobj.posVector = m_parentGroup.RootPart.AbsolutePosition; | ||
2310 | detobj.rotQuat = Quaternion.Identity; | ||
2311 | detobj.velVector = Vector3.Zero; | ||
2312 | detobj.colliderType = 0; | ||
2313 | detobj.groupUUID = UUID.Zero; | ||
2314 | colliding.Add(detobj); | ||
2315 | } | ||
2316 | } | ||
2317 | |||
2318 | if (colliding.Count > 0) | ||
2319 | { | ||
2320 | LandStartCollidingMessage.Colliders = colliding; | ||
2321 | // always running this check because if the user deletes the object it would return a null reference. | ||
2322 | if (m_parentGroup == null) | ||
2323 | return; | ||
2324 | |||
2325 | if (m_parentGroup.Scene == null) | ||
2326 | return; | ||
2327 | |||
2328 | m_parentGroup.Scene.EventManager.TriggerScriptLandCollidingStart(LocalId, LandStartCollidingMessage); | ||
2329 | } | ||
2330 | } | ||
2331 | } | ||
2332 | if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision) != 0) | ||
2333 | { | ||
2334 | if (m_lastColliders.Count > 0) | ||
2335 | { | ||
2336 | ColliderArgs LandCollidingMessage = new ColliderArgs(); | ||
2337 | List<DetectedObject> colliding = new List<DetectedObject>(); | ||
2338 | foreach (uint localId in startedColliders) | ||
2339 | { | ||
2340 | if (localId == 0) | ||
2341 | { | ||
2342 | //Hope that all is left is ground! | ||
2343 | DetectedObject detobj = new DetectedObject(); | ||
2344 | detobj.keyUUID = UUID.Zero; | ||
2345 | detobj.nameStr = ""; | ||
2346 | detobj.ownerUUID = UUID.Zero; | ||
2347 | detobj.posVector = m_parentGroup.RootPart.AbsolutePosition; | ||
2348 | detobj.rotQuat = Quaternion.Identity; | ||
2349 | detobj.velVector = Vector3.Zero; | ||
2350 | detobj.colliderType = 0; | ||
2351 | detobj.groupUUID = UUID.Zero; | ||
2352 | colliding.Add(detobj); | ||
2353 | } | ||
2354 | } | ||
2355 | |||
2356 | if (colliding.Count > 0) | ||
2357 | { | ||
2358 | LandCollidingMessage.Colliders = colliding; | ||
2359 | // always running this check because if the user deletes the object it would return a null reference. | ||
2360 | if (m_parentGroup == null) | ||
2361 | return; | ||
2362 | |||
2363 | if (m_parentGroup.Scene == null) | ||
2364 | return; | ||
2365 | |||
2366 | m_parentGroup.Scene.EventManager.TriggerScriptLandColliding(LocalId, LandCollidingMessage); | ||
2367 | } | ||
2368 | } | ||
2369 | } | ||
2370 | if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_end) != 0) | ||
2371 | { | ||
2372 | if (endedColliders.Count > 0) | ||
2373 | { | ||
2374 | ColliderArgs LandEndCollidingMessage = new ColliderArgs(); | ||
2375 | List<DetectedObject> colliding = new List<DetectedObject>(); | ||
2376 | foreach (uint localId in startedColliders) | ||
2377 | { | ||
2378 | if (localId == 0) | ||
2379 | { | ||
2380 | //Hope that all is left is ground! | ||
2381 | DetectedObject detobj = new DetectedObject(); | ||
2382 | detobj.keyUUID = UUID.Zero; | ||
2383 | detobj.nameStr = ""; | ||
2384 | detobj.ownerUUID = UUID.Zero; | ||
2385 | detobj.posVector = m_parentGroup.RootPart.AbsolutePosition; | ||
2386 | detobj.rotQuat = Quaternion.Identity; | ||
2387 | detobj.velVector = Vector3.Zero; | ||
2388 | detobj.colliderType = 0; | ||
2389 | detobj.groupUUID = UUID.Zero; | ||
2390 | colliding.Add(detobj); | ||
2391 | } | ||
2392 | } | ||
2393 | |||
2394 | if (colliding.Count > 0) | ||
2395 | { | ||
2396 | LandEndCollidingMessage.Colliders = colliding; | ||
2397 | // always running this check because if the user deletes the object it would return a null reference. | ||
2398 | if (m_parentGroup == null) | ||
2399 | return; | ||
2400 | |||
2401 | if (m_parentGroup.Scene == null) | ||
2402 | return; | ||
2403 | |||
2404 | m_parentGroup.Scene.EventManager.TriggerScriptLandCollidingEnd(LocalId, LandEndCollidingMessage); | ||
2405 | } | ||
2406 | } | ||
2407 | } | ||
2296 | } | 2408 | } |
2297 | 2409 | ||
2298 | public void PhysicsOutOfBounds(Vector3 pos) | 2410 | public void PhysicsOutOfBounds(Vector3 pos) |
@@ -3698,6 +3810,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3698 | ((AggregateScriptEvents & scriptEvents.collision) != 0) || | 3810 | ((AggregateScriptEvents & scriptEvents.collision) != 0) || |
3699 | ((AggregateScriptEvents & scriptEvents.collision_end) != 0) || | 3811 | ((AggregateScriptEvents & scriptEvents.collision_end) != 0) || |
3700 | ((AggregateScriptEvents & scriptEvents.collision_start) != 0) || | 3812 | ((AggregateScriptEvents & scriptEvents.collision_start) != 0) || |
3813 | ((AggregateScriptEvents & scriptEvents.land_collision_start) != 0) || | ||
3814 | ((AggregateScriptEvents & scriptEvents.land_collision) != 0) || | ||
3815 | ((AggregateScriptEvents & scriptEvents.land_collision_end) != 0) || | ||
3701 | (CollisionSound != UUID.Zero) | 3816 | (CollisionSound != UUID.Zero) |
3702 | ) | 3817 | ) |
3703 | { | 3818 | { |
@@ -3902,6 +4017,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3902 | ((AggregateScriptEvents & scriptEvents.collision) != 0) || | 4017 | ((AggregateScriptEvents & scriptEvents.collision) != 0) || |
3903 | ((AggregateScriptEvents & scriptEvents.collision_end) != 0) || | 4018 | ((AggregateScriptEvents & scriptEvents.collision_end) != 0) || |
3904 | ((AggregateScriptEvents & scriptEvents.collision_start) != 0) || | 4019 | ((AggregateScriptEvents & scriptEvents.collision_start) != 0) || |
4020 | ((AggregateScriptEvents & scriptEvents.land_collision_start) != 0) || | ||
4021 | ((AggregateScriptEvents & scriptEvents.land_collision) != 0) || | ||
4022 | ((AggregateScriptEvents & scriptEvents.land_collision_end) != 0) || | ||
3905 | (CollisionSound != UUID.Zero) | 4023 | (CollisionSound != UUID.Zero) |
3906 | ) | 4024 | ) |
3907 | { | 4025 | { |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs index 8195f33..b2eab45 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs | |||
@@ -63,6 +63,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
63 | myScriptEngine.World.EventManager.OnScriptColliderStart += collision_start; | 63 | myScriptEngine.World.EventManager.OnScriptColliderStart += collision_start; |
64 | myScriptEngine.World.EventManager.OnScriptColliding += collision; | 64 | myScriptEngine.World.EventManager.OnScriptColliding += collision; |
65 | myScriptEngine.World.EventManager.OnScriptCollidingEnd += collision_end; | 65 | myScriptEngine.World.EventManager.OnScriptCollidingEnd += collision_end; |
66 | myScriptEngine.World.EventManager.OnScriptLandColliderStart += land_collision_start; | ||
67 | myScriptEngine.World.EventManager.OnScriptLandColliding += land_collision; | ||
68 | myScriptEngine.World.EventManager.OnScriptLandColliderEnd += land_collision_end; | ||
66 | IMoneyModule money=myScriptEngine.World.RequestModuleInterface<IMoneyModule>(); | 69 | IMoneyModule money=myScriptEngine.World.RequestModuleInterface<IMoneyModule>(); |
67 | if (money != null) | 70 | if (money != null) |
68 | { | 71 | { |
@@ -285,29 +288,63 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
285 | det.ToArray())); | 288 | det.ToArray())); |
286 | } | 289 | } |
287 | 290 | ||
288 | public void land_collision_start(uint localID, UUID itemID) | 291 | public void land_collision_start(uint localID, ColliderArgs col) |
289 | { | 292 | { |
290 | myScriptEngine.PostObjectEvent(localID, new EventParams( | 293 | List<DetectParams> det = new List<DetectParams>(); |
291 | "land_collision_start", | 294 | |
292 | new object[0], | 295 | foreach (DetectedObject detobj in col.Colliders) |
293 | new DetectParams[0])); | 296 | { |
297 | DetectParams d = new DetectParams(); | ||
298 | d.Position = new LSL_Types.Vector3(detobj.posVector.X, | ||
299 | detobj.posVector.Y, | ||
300 | detobj.posVector.Z); | ||
301 | d.Populate(myScriptEngine.World); | ||
302 | det.Add(d); | ||
303 | myScriptEngine.PostObjectEvent(localID, new EventParams( | ||
304 | "land_collision_start", | ||
305 | new Object[] { new LSL_Types.Vector3(d.Position) }, | ||
306 | det.ToArray())); | ||
307 | } | ||
308 | |||
294 | } | 309 | } |
295 | 310 | ||
296 | public void land_collision(uint localID, UUID itemID) | 311 | public void land_collision(uint localID, ColliderArgs col) |
297 | { | 312 | { |
298 | myScriptEngine.PostObjectEvent(localID, new EventParams( | 313 | List<DetectParams> det = new List<DetectParams>(); |
299 | "land_collision", | 314 | |
300 | new object[0], | 315 | foreach (DetectedObject detobj in col.Colliders) |
301 | new DetectParams[0])); | 316 | { |
317 | DetectParams d = new DetectParams(); | ||
318 | d.Position = new LSL_Types.Vector3(detobj.posVector.X, | ||
319 | detobj.posVector.Y, | ||
320 | detobj.posVector.Z); | ||
321 | d.Populate(myScriptEngine.World); | ||
322 | det.Add(d); | ||
323 | myScriptEngine.PostObjectEvent(localID, new EventParams( | ||
324 | "land_collision", | ||
325 | new Object[] { new LSL_Types.Vector3(d.Position) }, | ||
326 | det.ToArray())); | ||
327 | } | ||
302 | } | 328 | } |
303 | 329 | ||
304 | public void land_collision_end(uint localID, UUID itemID) | 330 | public void land_collision_end(uint localID, ColliderArgs col) |
305 | { | 331 | { |
306 | myScriptEngine.PostObjectEvent(localID, new EventParams( | 332 | List<DetectParams> det = new List<DetectParams>(); |
307 | "land_collision_end", | 333 | |
308 | new object[0], | 334 | foreach (DetectedObject detobj in col.Colliders) |
309 | new DetectParams[0])); | 335 | { |
310 | } | 336 | DetectParams d = new DetectParams(); |
337 | d.Position = new LSL_Types.Vector3(detobj.posVector.X, | ||
338 | detobj.posVector.Y, | ||
339 | detobj.posVector.Z); | ||
340 | d.Populate(myScriptEngine.World); | ||
341 | det.Add(d); | ||
342 | myScriptEngine.PostObjectEvent(localID, new EventParams( | ||
343 | "land_collision_end", | ||
344 | new Object[] { new LSL_Types.Vector3(d.Position) }, | ||
345 | det.ToArray())); | ||
346 | } | ||
347 | } | ||
311 | 348 | ||
312 | // timer: not handled here | 349 | // timer: not handled here |
313 | // listen: not handled here | 350 | // listen: not handled here |