aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/OdePlugin
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/OdePlugin')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs7
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs20
2 files changed, 25 insertions, 2 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 6f5abfa..b9c0936 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -127,6 +127,8 @@ namespace OpenSim.Region.Physics.OdePlugin
127 private bool m_isphysical = false; 127 private bool m_isphysical = false;
128 private bool m_isSelected = false; 128 private bool m_isSelected = false;
129 129
130 internal bool m_isVolumeDetect = false; // If true, this prim only detects collisions but doesn't collide actively
131
130 private bool m_throttleUpdates = false; 132 private bool m_throttleUpdates = false;
131 private int throttleCounter = 0; 133 private int throttleCounter = 0;
132 public int m_interpenetrationcount = 0; 134 public int m_interpenetrationcount = 0;
@@ -2226,7 +2228,10 @@ namespace OpenSim.Region.Physics.OdePlugin
2226 2228
2227 public override void SetVolumeDetect(int param) 2229 public override void SetVolumeDetect(int param)
2228 { 2230 {
2229 2231 lock (_parent_scene.OdeLock)
2232 {
2233 m_isVolumeDetect = (param!=0);
2234 }
2230 } 2235 }
2231 2236
2232 public override PhysicsVector CenterOfMass 2237 public override PhysicsVector CenterOfMass
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
index 7589750..c0b4b45 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -797,7 +797,25 @@ namespace OpenSim.Region.Physics.OdePlugin
797 797
798 #endregion 798 #endregion
799 799
800 if (contacts[i].depth >= 0f && !checkDupe(contacts[i], p2.PhysicsActorType)) 800 // Logic for collision handling
801 // Note, that if *all* contacts are skipped (VolumeDetect)
802 // The prim still detects (and forwards) collision events but
803 // appears to be phantom for the world
804 Boolean skipThisContact = false;
805
806 if (contacts[i].depth < 0f)
807 skipThisContact = true;
808
809 if (checkDupe(contacts[i], p2.PhysicsActorType))
810 skipThisContact = true;
811
812 if ((p1 is OdePrim) && (((OdePrim)p1).m_isVolumeDetect))
813 skipThisContact = true; // No collision on volume detect prims
814
815 if ((p2 is OdePrim) && (((OdePrim)p2).m_isVolumeDetect))
816 skipThisContact = true; // No collision on volume detect prims
817
818 if (!skipThisContact)
801 { 819 {
802 // If we're colliding against terrain 820 // If we're colliding against terrain
803 if (name1 == "Terrain" || name2 == "Terrain") 821 if (name1 == "Terrain" || name2 == "Terrain")