aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs')
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs56
1 files changed, 40 insertions, 16 deletions
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index cbe129a..4c16f8e 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -277,7 +277,23 @@ namespace OpenSim.Region.Physics.OdePlugin
277 cdata.mu *= veh.FrictionFactor; 277 cdata.mu *= veh.FrictionFactor;
278// cdata.mu *= 0; 278// cdata.mu *= 0;
279 } 279 }
280 } 280 }
281
282 public override float PhysicsCost
283 {
284 get
285 {
286 return m_physCost;
287 }
288 }
289
290 public override float StreamCost
291 {
292 get
293 {
294 return m_streamCost;
295 }
296 }
281 297
282 public override int PhysicsActorType 298 public override int PhysicsActorType
283 { 299 {
@@ -1373,6 +1389,11 @@ namespace OpenSim.Region.Physics.OdePlugin
1373 m_mesh = null; 1389 m_mesh = null;
1374 return false; 1390 return false;
1375 } 1391 }
1392
1393 m_physCost = 0.0013f * (float)indexCount;
1394 // todo
1395 m_streamCost = 1.0f;
1396
1376 return true; 1397 return true;
1377 } 1398 }
1378 1399
@@ -1386,7 +1407,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1386 if (m_assetState == AssetState.AssetFailed) 1407 if (m_assetState == AssetState.AssetFailed)
1387 m_NoColide = true; 1408 m_NoColide = true;
1388 1409
1389 else if (m_mesh != null) 1410 else if(m_mesh != null)
1390 { 1411 {
1391 if (GetMeshGeom()) 1412 if (GetMeshGeom())
1392 hasMesh = true; 1413 hasMesh = true;
@@ -2058,7 +2079,23 @@ namespace OpenSim.Region.Physics.OdePlugin
2058 m_OBBOffset.Y, 2079 m_OBBOffset.Y,
2059 m_OBBOffset.Z); 2080 m_OBBOffset.Z);
2060 2081
2061 primOOBradiusSQ = m_OBBOffset.LengthSquared(); 2082 primOOBradiusSQ = m_OBB.LengthSquared();
2083
2084 if (_triMeshData != IntPtr.Zero)
2085 {
2086 float pc = m_physCost;
2087 float psf = primOOBradiusSQ;
2088 psf *= 1.33f * .2f;
2089 pc *= psf;
2090 if (pc < 0.1f)
2091 pc = 0.1f;
2092
2093 m_physCost = pc;
2094 }
2095 else
2096 m_physCost = 0.1f;
2097
2098 m_streamCost = 1.0f;
2062 } 2099 }
2063 2100
2064 #endregion 2101 #endregion
@@ -2717,10 +2754,6 @@ namespace OpenSim.Region.Physics.OdePlugin
2717 m_OBBOffset = repData.OBBOffset; 2754 m_OBBOffset = repData.OBBOffset;
2718 m_OBB = repData.OBB; 2755 m_OBB = repData.OBB;
2719 2756
2720// m_NoColide = repData.NoColide;
2721 m_physCost = repData.physCost;
2722 m_streamCost = repData.streamCost;
2723
2724 primVolume = repData.volume; 2757 primVolume = repData.volume;
2725 2758
2726 CreateGeom(); 2759 CreateGeom();
@@ -2793,9 +2826,6 @@ namespace OpenSim.Region.Physics.OdePlugin
2793 m_OBBOffset = repData.OBBOffset; 2826 m_OBBOffset = repData.OBBOffset;
2794 m_OBB = repData.OBB; 2827 m_OBB = repData.OBB;
2795 2828
2796 m_physCost = repData.physCost;
2797 m_streamCost = repData.streamCost;
2798
2799 primVolume = repData.volume; 2829 primVolume = repData.volume;
2800 2830
2801 CreateGeom(); 2831 CreateGeom();
@@ -2806,14 +2836,8 @@ namespace OpenSim.Region.Physics.OdePlugin
2806 2836
2807 UpdatePrimBodyData(); 2837 UpdatePrimBodyData();
2808 2838
2809 try
2810 {
2811 _parent_scene.actor_name_map[prim_geom] = this; 2839 _parent_scene.actor_name_map[prim_geom] = this;
2812 }
2813 catch
2814 {
2815 2840
2816 }
2817 2841
2818 d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); 2842 d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
2819 d.Quaternion myrot = new d.Quaternion(); 2843 d.Quaternion myrot = new d.Quaternion();