aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs29
1 files changed, 17 insertions, 12 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 5a1fdf9..d11dff1 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -67,6 +67,17 @@ namespace OpenSim.Region.Physics.OdePlugin
67 private int m_expectedCollisionContacts = 0; 67 private int m_expectedCollisionContacts = 0;
68 68
69 /// <summary> 69 /// <summary>
70 /// Gets collide bits so that we can still perform land collisions if a mesh fails to load.
71 /// </summary>
72 /// <value>
73 /// The bad asset collide bits.
74 /// </value>
75 private int BadMeshAssetCollideBits
76 {
77 get { return m_isphysical ? (int)CollisionCategories.Land : 0; }
78 }
79
80 /// <summary>
70 /// Is this prim subject to physics? Even if not, it's still solid for collision purposes. 81 /// Is this prim subject to physics? Even if not, it's still solid for collision purposes.
71 /// </summary> 82 /// </summary>
72 public override bool IsPhysical 83 public override bool IsPhysical
@@ -344,11 +355,10 @@ namespace OpenSim.Region.Physics.OdePlugin
344 if (m_assetFailed) 355 if (m_assetFailed)
345 { 356 {
346 d.GeomSetCategoryBits(prim_geom, 0); 357 d.GeomSetCategoryBits(prim_geom, 0);
347 d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); 358 d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
348 } 359 }
349 else 360 else
350 { 361 {
351
352 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); 362 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
353 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 363 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
354 } 364 }
@@ -418,7 +428,7 @@ namespace OpenSim.Region.Physics.OdePlugin
418 if (m_assetFailed) 428 if (m_assetFailed)
419 { 429 {
420 d.GeomSetCategoryBits(prim_geom, 0); 430 d.GeomSetCategoryBits(prim_geom, 0);
421 d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); 431 d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
422 } 432 }
423 else 433 else
424 { 434 {
@@ -851,11 +861,6 @@ namespace OpenSim.Region.Physics.OdePlugin
851 861
852 private static Dictionary<IMesh, IntPtr> m_MeshToTriMeshMap = new Dictionary<IMesh, IntPtr>(); 862 private static Dictionary<IMesh, IntPtr> m_MeshToTriMeshMap = new Dictionary<IMesh, IntPtr>();
853 863
854 public int BadAssetColideBits()
855 {
856 return (m_isphysical ? (int)CollisionCategories.Land : 0);
857 }
858
859 private void setMesh(OdeScene parent_scene, IMesh mesh) 864 private void setMesh(OdeScene parent_scene, IMesh mesh)
860 { 865 {
861// m_log.DebugFormat("[ODE PRIM]: Setting mesh on {0} to {1}", Name, mesh); 866// m_log.DebugFormat("[ODE PRIM]: Setting mesh on {0} to {1}", Name, mesh);
@@ -1137,7 +1142,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
1137 if (prm.m_assetFailed) 1142 if (prm.m_assetFailed)
1138 { 1143 {
1139 d.GeomSetCategoryBits(prm.prim_geom, 0); 1144 d.GeomSetCategoryBits(prm.prim_geom, 0);
1140 d.GeomSetCollideBits(prm.prim_geom, prm.BadAssetColideBits()); 1145 d.GeomSetCollideBits(prm.prim_geom, prm.BadMeshAssetCollideBits);
1141 } 1146 }
1142 else 1147 else
1143 { 1148 {
@@ -1191,7 +1196,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
1191 if (m_assetFailed) 1196 if (m_assetFailed)
1192 { 1197 {
1193 d.GeomSetCategoryBits(prim_geom, 0); 1198 d.GeomSetCategoryBits(prim_geom, 0);
1194 d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); 1199 d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
1195 } 1200 }
1196 else 1201 else
1197 { 1202 {
@@ -1393,7 +1398,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
1393 if (m_assetFailed) 1398 if (m_assetFailed)
1394 { 1399 {
1395 d.GeomSetCategoryBits(prim_geom, 0); 1400 d.GeomSetCategoryBits(prim_geom, 0);
1396 d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); 1401 d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
1397 } 1402 }
1398 else 1403 else
1399 { 1404 {
@@ -2137,7 +2142,7 @@ Console.WriteLine(" JointCreateFixed");
2137 } 2142 }
2138 2143
2139 if (m_assetFailed) 2144 if (m_assetFailed)
2140 d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); 2145 d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
2141 else 2146 else
2142 2147
2143 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 2148 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);