[UNTESTED] core Ode: let broken mesh physical prims collide with land as

UbitUmarov [2012-10-19 00:25:30]
[UNTESTED] core Ode: let broken mesh physical prims collide with land as
the defaul basic box so they don't go off world.
Filename
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index a6c657f..5a1fdf9 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -344,7 +344,7 @@ namespace OpenSim.Region.Physics.OdePlugin
             if (m_assetFailed)
             {
                 d.GeomSetCategoryBits(prim_geom, 0);
-                d.GeomSetCollideBits(prim_geom, 0);
+                d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
             }
             else
             {
@@ -418,7 +418,7 @@ namespace OpenSim.Region.Physics.OdePlugin
                 if (m_assetFailed)
                 {
                     d.GeomSetCategoryBits(prim_geom, 0);
-                    d.GeomSetCollideBits(prim_geom, 0);
+                    d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
                 }
                 else
                 {
@@ -851,6 +851,11 @@ namespace OpenSim.Region.Physics.OdePlugin

         private static Dictionary<IMesh, IntPtr> m_MeshToTriMeshMap = new Dictionary<IMesh, IntPtr>();

+        public int BadAssetColideBits()
+        {
+            return (m_isphysical ? (int)CollisionCategories.Land : 0);
+        }
+
         private void setMesh(OdeScene parent_scene, IMesh mesh)
         {
 //            m_log.DebugFormat("[ODE PRIM]: Setting mesh on {0} to {1}", Name, mesh);
@@ -1132,7 +1137,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
                     if (prm.m_assetFailed)
                     {
                         d.GeomSetCategoryBits(prm.prim_geom, 0);
-                        d.GeomSetCollideBits(prm.prim_geom, 0);
+                        d.GeomSetCollideBits(prm.prim_geom, prm.BadAssetColideBits());
                     }
                     else
                     {
@@ -1186,7 +1191,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
                 if (m_assetFailed)
                 {
                     d.GeomSetCategoryBits(prim_geom, 0);
-                    d.GeomSetCollideBits(prim_geom, 0);
+                    d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
                 }
                 else
                 {
@@ -1388,7 +1393,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
                 if (m_assetFailed)
                 {
                     d.GeomSetCategoryBits(prim_geom, 0);
-                    d.GeomSetCollideBits(prim_geom, 0);
+                    d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
                 }
                 else
                 {
@@ -2132,7 +2137,7 @@ Console.WriteLine(" JointCreateFixed");
             }

             if (m_assetFailed)
-                d.GeomSetCollideBits(prim_geom, 0);
+                d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
             else

                 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
ViewGit