diff options
author | Melanie | 2013-01-23 20:58:47 +0100 |
---|---|---|
committer | Melanie | 2013-01-23 20:58:47 +0100 |
commit | dd6ddcc7a53565cc540def336c5b4bd2307a1d63 (patch) | |
tree | 56494e19d8652ab54620ca7a30eafee65ac96678 /OpenSim/Region/ScriptEngine/Shared/Api | |
parent | Fix a type (Suports => Supports). Also put the normal terrain collision check (diff) | |
download | opensim-SC-dd6ddcc7a53565cc540def336c5b4bd2307a1d63.zip opensim-SC-dd6ddcc7a53565cc540def336c5b4bd2307a1d63.tar.gz opensim-SC-dd6ddcc7a53565cc540def336c5b4bd2307a1d63.tar.bz2 opensim-SC-dd6ddcc7a53565cc540def336c5b4bd2307a1d63.tar.xz |
Prevent double ground collisions and prefer the physics result if there is one.
ODE is known to not see the ground sometimes on raycast so the double test is
needed.
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 703c54d..a8763ea 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -12287,11 +12287,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
12287 | } | 12287 | } |
12288 | } | 12288 | } |
12289 | 12289 | ||
12290 | // Double check this | ||
12290 | if (checkTerrain) | 12291 | if (checkTerrain) |
12291 | { | 12292 | { |
12292 | ContactResult? groundContact = GroundIntersection(rayStart, rayEnd); | 12293 | bool skipGroundCheck = false; |
12293 | if (groundContact != null) | 12294 | |
12294 | results.Add((ContactResult)groundContact); | 12295 | foreach (ContactResult c in results) |
12296 | { | ||
12297 | if (c.ConsumerID == 0) // Physics gave us a ground collision | ||
12298 | skipGroundCheck = true; | ||
12299 | } | ||
12300 | |||
12301 | if (!skipGroundCheck) | ||
12302 | { | ||
12303 | ContactResult? groundContact = GroundIntersection(rayStart, rayEnd); | ||
12304 | if (groundContact != null) | ||
12305 | results.Add((ContactResult)groundContact); | ||
12306 | } | ||
12295 | } | 12307 | } |
12296 | 12308 | ||
12297 | results.Sort(delegate(ContactResult a, ContactResult b) | 12309 | results.Sort(delegate(ContactResult a, ContactResult b) |