aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs')
-rw-r--r--OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs245
1 files changed, 84 insertions, 161 deletions
diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs
index 004ee7f..5f63a7b 100644
--- a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs
+++ b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs
@@ -179,12 +179,13 @@ namespace OpenSim.Region.PhysicsModule.ubOde
179 179
180// const d.ContactFlags comumContactFlags = d.ContactFlags.SoftERP | d.ContactFlags.SoftCFM |d.ContactFlags.Approx1 | d.ContactFlags.Bounce; 180// const d.ContactFlags comumContactFlags = d.ContactFlags.SoftERP | d.ContactFlags.SoftCFM |d.ContactFlags.Approx1 | d.ContactFlags.Bounce;
181 181
182 const d.ContactFlags comumContactFlags = d.ContactFlags.Bounce | d.ContactFlags.Approx1 | d.ContactFlags.Slip1 | d.ContactFlags.Slip2; 182// const d.ContactFlags comumContactFlags = d.ContactFlags.Bounce | d.ContactFlags.Approx1 | d.ContactFlags.Slip1 | d.ContactFlags.Slip2;
183 const d.ContactFlags comumContactFlags = d.ContactFlags.Bounce | d.ContactFlags.Approx1;
183 const float comumContactERP = 0.75f; 184 const float comumContactERP = 0.75f;
184 const float comumContactCFM = 0.0001f; 185 const float comumContactCFM = 0.0001f;
185 const float comumContactSLIP = 0f; 186 const float comumContactSLIP = 0f;
186 187
187 float frictionMovementMult = 0.8f; 188// float frictionMovementMult = 0.2f;
188 189
189 float TerrainBounce = 0.001f; 190 float TerrainBounce = 0.001f;
190 float TerrainFriction = 0.3f; 191 float TerrainFriction = 0.3f;
@@ -200,7 +201,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
200 public float ODE_STEPSIZE = 0.020f; 201 public float ODE_STEPSIZE = 0.020f;
201 public float HalfOdeStep = 0.01f; 202 public float HalfOdeStep = 0.01f;
202 public int odetimestepMS = 20; // rounded 203 public int odetimestepMS = 20; // rounded
203 private float metersInSpace = 25.6f;
204 private float m_timeDilation = 1.0f; 204 private float m_timeDilation = 1.0f;
205 205
206 private double m_lastframe; 206 private double m_lastframe;
@@ -283,16 +283,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
283 public IntPtr StaticSpace; // space for the static things around 283 public IntPtr StaticSpace; // space for the static things around
284 public IntPtr GroundSpace; // space for ground 284 public IntPtr GroundSpace; // space for ground
285 285
286 // some speedup variables
287 private int spaceGridMaxX;
288 private int spaceGridMaxY;
289 private float spacesPerMeterX;
290 private float spacesPerMeterY;
291
292 // split static geometry collision into a grid as before
293 private IntPtr[,] staticPrimspace;
294 private IntPtr[] staticPrimspaceOffRegion;
295
296 public Object OdeLock; 286 public Object OdeLock;
297 public static Object SimulationLock; 287 public static Object SimulationLock;
298 288
@@ -385,13 +375,23 @@ namespace OpenSim.Region.PhysicsModule.ubOde
385 try 375 try
386 { 376 {
387 world = d.WorldCreate(); 377 world = d.WorldCreate();
388 TopSpace = d.HashSpaceCreate(IntPtr.Zero); 378 TopSpace = d.SimpleSpaceCreate(IntPtr.Zero);
389 379 ActiveSpace = d.SimpleSpaceCreate(TopSpace);
390 // now the major subspaces 380 CharsSpace = d.SimpleSpaceCreate(TopSpace);
391 ActiveSpace = d.HashSpaceCreate(TopSpace); 381 GroundSpace = d.SimpleSpaceCreate(TopSpace);
392 CharsSpace = d.HashSpaceCreate(TopSpace); 382 float sx = WorldExtents.X + 16;
393 StaticSpace = d.HashSpaceCreate(TopSpace); 383 float sy = WorldExtents.Y + 16;
394 GroundSpace = d.HashSpaceCreate(TopSpace); 384 d.Vector3 ex =new d.Vector3(sx, sy, 0);
385 d.Vector3 px =new d.Vector3(sx * 0.5f, sx * 0.5f, 0);
386 if(sx < sy)
387 sx = sy;
388 sx = (float)Math.Log(sx) * 1.442695f + 0.5f;
389 int dp = (int)sx - 2;
390 if(dp > 8)
391 dp = 8;
392 else if(dp < 4)
393 dp = 4;
394 StaticSpace = d.QuadTreeSpaceCreate(TopSpace, ref px, ref ex, dp);
395 } 395 }
396 catch 396 catch
397 { 397 {
@@ -399,12 +399,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
399 // i did! 399 // i did!
400 } 400 }
401 401
402 d.HashSpaceSetLevels(TopSpace, -5, 12);
403 d.HashSpaceSetLevels(ActiveSpace, -5, 10);
404 d.HashSpaceSetLevels(CharsSpace, -4, 3);
405 d.HashSpaceSetLevels(StaticSpace, -5, 12);
406 d.HashSpaceSetLevels(GroundSpace, 0, 8);
407
408 // demote to second level 402 // demote to second level
409 d.SpaceSetSublevel(ActiveSpace, 1); 403 d.SpaceSetSublevel(ActiveSpace, 1);
410 d.SpaceSetSublevel(CharsSpace, 1); 404 d.SpaceSetSublevel(CharsSpace, 1);
@@ -468,8 +462,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
468 gravityy = physicsconfig.GetFloat("world_gravityy", gravityy); 462 gravityy = physicsconfig.GetFloat("world_gravityy", gravityy);
469 gravityz = physicsconfig.GetFloat("world_gravityz", gravityz); 463 gravityz = physicsconfig.GetFloat("world_gravityz", gravityz);
470 464
471 metersInSpace = physicsconfig.GetFloat("meters_in_small_space", metersInSpace);
472
473 // contactsurfacelayer = physicsconfig.GetFloat("world_contact_surface_layer", contactsurfacelayer); 465 // contactsurfacelayer = physicsconfig.GetFloat("world_contact_surface_layer", contactsurfacelayer);
474 466
475 ODE_STEPSIZE = physicsconfig.GetFloat("world_stepsize", ODE_STEPSIZE); 467 ODE_STEPSIZE = physicsconfig.GetFloat("world_stepsize", ODE_STEPSIZE);
@@ -559,76 +551,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
559 m_materialContactsData[(int)Material.light].mu = 0.0f; 551 m_materialContactsData[(int)Material.light].mu = 0.0f;
560 m_materialContactsData[(int)Material.light].bounce = 0.0f; 552 m_materialContactsData[(int)Material.light].bounce = 0.0f;
561 553
562
563 spacesPerMeterX = 1.0f / metersInSpace;
564 spacesPerMeterY = spacesPerMeterX;
565 spaceGridMaxX = (int)(WorldExtents.X * spacesPerMeterX);
566 spaceGridMaxY = (int)(WorldExtents.Y * spacesPerMeterY);
567
568 if (spaceGridMaxX > 24)
569 {
570 spaceGridMaxX = 24;
571 spacesPerMeterX = spaceGridMaxX / WorldExtents.X;
572 }
573
574 if (spaceGridMaxY > 24)
575 {
576 spaceGridMaxY = 24;
577 spacesPerMeterY = spaceGridMaxY / WorldExtents.Y;
578 }
579
580 staticPrimspace = new IntPtr[spaceGridMaxX, spaceGridMaxY];
581
582 // create all spaces now
583 int i, j;
584 IntPtr newspace;
585
586 for (i = 0; i < spaceGridMaxX; i++)
587 for (j = 0; j < spaceGridMaxY; j++)
588 {
589 newspace = d.HashSpaceCreate(StaticSpace);
590 d.GeomSetCategoryBits(newspace, (int)CollisionCategories.Space);
591 waitForSpaceUnlock(newspace);
592 d.SpaceSetSublevel(newspace, 2);
593 d.HashSpaceSetLevels(newspace, -2, 8);
594 d.GeomSetCategoryBits(newspace, (uint)(CollisionCategories.Space |
595 CollisionCategories.Geom |
596 CollisionCategories.Land |
597 CollisionCategories.Water |
598 CollisionCategories.Phantom |
599 CollisionCategories.VolumeDtc
600 ));
601 d.GeomSetCollideBits(newspace, 0);
602
603 staticPrimspace[i, j] = newspace;
604 }
605
606 // let this now be index limit
607 spaceGridMaxX--;
608 spaceGridMaxY--;
609
610 // create 4 off world spaces (x<0,x>max,y<0,y>max)
611 staticPrimspaceOffRegion = new IntPtr[4];
612
613 for (i = 0; i < 4; i++)
614 {
615 newspace = d.HashSpaceCreate(StaticSpace);
616 d.GeomSetCategoryBits(newspace, (int)CollisionCategories.Space);
617 waitForSpaceUnlock(newspace);
618 d.SpaceSetSublevel(newspace, 2);
619 d.HashSpaceSetLevels(newspace, -2, 8);
620 d.GeomSetCategoryBits(newspace, (uint)(CollisionCategories.Space |
621 CollisionCategories.Geom |
622 CollisionCategories.Land |
623 CollisionCategories.Water |
624 CollisionCategories.Phantom |
625 CollisionCategories.VolumeDtc
626 ));
627 d.GeomSetCollideBits(newspace, 0);
628
629 staticPrimspaceOffRegion[i] = newspace;
630 }
631
632 m_lastframe = Util.GetTimeStamp(); 554 m_lastframe = Util.GetTimeStamp();
633 m_lastMeshExpire = m_lastframe; 555 m_lastMeshExpire = m_lastframe;
634 step_time = -1; 556 step_time = -1;
@@ -757,7 +679,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
757 // 679 //
758 */ 680 */
759 681
760
761 if (d.GeomGetCategoryBits(g1) == (uint)CollisionCategories.VolumeDtc || 682 if (d.GeomGetCategoryBits(g1) == (uint)CollisionCategories.VolumeDtc ||
762 d.GeomGetCategoryBits(g2) == (uint)CollisionCategories.VolumeDtc) 683 d.GeomGetCategoryBits(g2) == (uint)CollisionCategories.VolumeDtc)
763 { 684 {
@@ -866,9 +787,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
866 break; 787 break;
867 788
868 case (int)ActorTypes.Prim: 789 case (int)ActorTypes.Prim:
869 Vector3 relV = p1.rootVelocity - p2.rootVelocity; 790// Vector3 relV = p1.rootVelocity - p2.rootVelocity;
870 float relVlenSQ = relV.LengthSquared(); 791// float relVlenSQ = relV.LengthSquared();
871 if (relVlenSQ > 0.0001f) 792// if (relVlenSQ > 0.0001f)
872 { 793 {
873 p1.CollidingObj = true; 794 p1.CollidingObj = true;
874 p2.CollidingObj = true; 795 p2.CollidingObj = true;
@@ -878,8 +799,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
878 bounce = contactdata1.bounce * contactdata2.bounce; 799 bounce = contactdata1.bounce * contactdata2.bounce;
879 mu = (float)Math.Sqrt(contactdata1.mu * contactdata2.mu); 800 mu = (float)Math.Sqrt(contactdata1.mu * contactdata2.mu);
880 801
881 if (relVlenSQ > 0.01f) 802// if (relVlenSQ > 0.01f)
882 mu *= frictionMovementMult; 803// mu *= frictionMovementMult;
883 804
884 if(d.GeomGetClass(g2) == d.GeomClassID.TriMeshClass && 805 if(d.GeomGetClass(g2) == d.GeomClassID.TriMeshClass &&
885 d.GeomGetClass(g1) == d.GeomClassID.TriMeshClass) 806 d.GeomGetClass(g1) == d.GeomClassID.TriMeshClass)
@@ -891,9 +812,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
891 bounce = contactdata1.bounce * TerrainBounce; 812 bounce = contactdata1.bounce * TerrainBounce;
892 mu = (float)Math.Sqrt(contactdata1.mu * TerrainFriction); 813 mu = (float)Math.Sqrt(contactdata1.mu * TerrainFriction);
893 814
894 Vector3 v1 = p1.rootVelocity; 815// Vector3 v1 = p1.rootVelocity;
895 if (Math.Abs(v1.X) > 0.1f || Math.Abs(v1.Y) > 0.1f) 816// if (Math.Abs(v1.X) > 0.1f || Math.Abs(v1.Y) > 0.1f)
896 mu *= frictionMovementMult; 817// mu *= frictionMovementMult;
897 p1.CollidingGround = true; 818 p1.CollidingGround = true;
898 819
899 if(d.GeomGetClass(g1) == d.GeomClassID.TriMeshClass) 820 if(d.GeomGetClass(g1) == d.GeomClassID.TriMeshClass)
@@ -918,9 +839,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
918 839
919// if (curContact.side1 > 0) // should be 2 ? 840// if (curContact.side1 > 0) // should be 2 ?
920// IgnoreNegSides = true; 841// IgnoreNegSides = true;
921 Vector3 v2 = p2.rootVelocity; 842// Vector3 v2 = p2.rootVelocity;
922 if (Math.Abs(v2.X) > 0.1f || Math.Abs(v2.Y) > 0.1f) 843// if (Math.Abs(v2.X) > 0.1f || Math.Abs(v2.Y) > 0.1f)
923 mu *= frictionMovementMult; 844// mu *= frictionMovementMult;
924 845
925 if(d.GeomGetClass(g2) == d.GeomClassID.TriMeshClass) 846 if(d.GeomGetClass(g2) == d.GeomClassID.TriMeshClass)
926 smoothMesh = true; 847 smoothMesh = true;
@@ -1306,6 +1227,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1306 public override void RemoveAvatar(PhysicsActor actor) 1227 public override void RemoveAvatar(PhysicsActor actor)
1307 { 1228 {
1308 //m_log.Debug("[PHYSICS]:ODELOCK"); 1229 //m_log.Debug("[PHYSICS]:ODELOCK");
1230 if (world == IntPtr.Zero)
1231 return;
1232
1309 lock (OdeLock) 1233 lock (OdeLock)
1310 { 1234 {
1311 d.AllocateODEDataForThread(0); 1235 d.AllocateODEDataForThread(0);
@@ -1460,27 +1384,23 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1460 1384
1461 /// <summary> 1385 /// <summary>
1462 /// Called when a static prim moves or becomes static 1386 /// Called when a static prim moves or becomes static
1463 /// Places the prim in a space one the static sub-spaces grid 1387 /// Places the prim in a space one the static space
1464 /// </summary> 1388 /// </summary>
1465 /// <param name="geom">the pointer to the geom that moved</param> 1389 /// <param name="geom">the pointer to the geom that moved</param>
1466 /// <param name="pos">the position that the geom moved to</param>
1467 /// <param name="currentspace">a pointer to the space it was in before it was moved.</param> 1390 /// <param name="currentspace">a pointer to the space it was in before it was moved.</param>
1468 /// <returns>a pointer to the new space it's in</returns> 1391 /// <returns>a pointer to the new space it's in</returns>
1469 public IntPtr MoveGeomToStaticSpace(IntPtr geom, Vector3 pos, IntPtr currentspace) 1392 public IntPtr MoveGeomToStaticSpace(IntPtr geom, IntPtr currentspace)
1470 { 1393 {
1471 // moves a prim into another static sub-space or from another space into a static sub-space 1394 // moves a prim into static sub-space
1472 1395
1473 // Called ODEPrim so 1396 // Called ODEPrim so
1474 // it's already in locked space. 1397 // it's already in locked space.
1475 1398
1476 if (geom == IntPtr.Zero) // shouldn't happen 1399 if (geom == IntPtr.Zero) // shouldn't happen
1477 return IntPtr.Zero; 1400 return IntPtr.Zero;
1478 1401
1479 // get the static sub-space for current position 1402 if (StaticSpace == currentspace) // if we are there all done
1480 IntPtr newspace = calculateSpaceForGeom(pos); 1403 return StaticSpace;
1481
1482 if (newspace == currentspace) // if we are there all done
1483 return newspace;
1484 1404
1485 // else remove it from its current space 1405 // else remove it from its current space
1486 if (currentspace != IntPtr.Zero && d.SpaceQuery(currentspace, geom)) 1406 if (currentspace != IntPtr.Zero && d.SpaceQuery(currentspace, geom))
@@ -1515,44 +1435,17 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1515 { 1435 {
1516 d.SpaceDestroy(currentspace); 1436 d.SpaceDestroy(currentspace);
1517 } 1437 }
1518
1519 } 1438 }
1520 } 1439 }
1521 } 1440 }
1522 1441
1523 // put the geom in the newspace 1442 // put the geom in the newspace
1524 waitForSpaceUnlock(newspace); 1443 waitForSpaceUnlock(StaticSpace);
1525 d.SpaceAdd(newspace, geom); 1444 d.SpaceAdd(StaticSpace, geom);
1526 1445
1527 // let caller know this newspace 1446 return StaticSpace;
1528 return newspace;
1529 } 1447 }
1530 1448
1531 /// <summary>
1532 /// Calculates the space the prim should be in by its position
1533 /// </summary>
1534 /// <param name="pos"></param>
1535 /// <returns>a pointer to the space. This could be a new space or reused space.</returns>
1536 public IntPtr calculateSpaceForGeom(Vector3 pos)
1537 {
1538 int x, y;
1539
1540 if (pos.X < 0)
1541 return staticPrimspaceOffRegion[0];
1542
1543 if (pos.Y < 0)
1544 return staticPrimspaceOffRegion[2];
1545
1546 x = (int)(pos.X * spacesPerMeterX);
1547 if (x > spaceGridMaxX)
1548 return staticPrimspaceOffRegion[1];
1549
1550 y = (int)(pos.Y * spacesPerMeterY);
1551 if (y > spaceGridMaxY)
1552 return staticPrimspaceOffRegion[3];
1553
1554 return staticPrimspace[x, y];
1555 }
1556 1449
1557 #endregion 1450 #endregion
1558 1451
@@ -1641,6 +1534,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1641 /// <returns></returns> 1534 /// <returns></returns>
1642 public override float Simulate(float reqTimeStep) 1535 public override float Simulate(float reqTimeStep)
1643 { 1536 {
1537 if (world == IntPtr.Zero)
1538 return 0;
1539
1644 double now = Util.GetTimeStamp(); 1540 double now = Util.GetTimeStamp();
1645 double timeStep = now - m_lastframe; 1541 double timeStep = now - m_lastframe;
1646 m_lastframe = now; 1542 m_lastframe = now;
@@ -1679,10 +1575,16 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1679 double maxChangestime = (int)(reqTimeStep * 500f); // half the time 1575 double maxChangestime = (int)(reqTimeStep * 500f); // half the time
1680 double maxLoopTime = (int)(reqTimeStep * 1200f); // 1.2 the time 1576 double maxLoopTime = (int)(reqTimeStep * 1200f); // 1.2 the time
1681 1577
1682// double collisionTime = 0; 1578/*
1683// double qstepTIme = 0; 1579 double collisionTime = 0;
1684// double tmpTime = 0; 1580 double qstepTIme = 0;
1685 1581 double tmpTime = 0;
1582 double changestot = 0;
1583 double collisonRepo = 0;
1584 double updatesTime = 0;
1585 double moveTime = 0;
1586 double rayTime = 0;
1587*/
1686 d.AllocateODEDataForThread(~0U); 1588 d.AllocateODEDataForThread(~0U);
1687 1589
1688 if (ChangesQueue.Count > 0) 1590 if (ChangesQueue.Count > 0)
@@ -1719,6 +1621,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1719 m_global_contactcount = 0; 1621 m_global_contactcount = 0;
1720 1622
1721 1623
1624// tmpTime = Util.GetTimeStampMS();
1625
1722 // Move characters 1626 // Move characters
1723 lock (_characters) 1627 lock (_characters)
1724 { 1628 {
@@ -1746,13 +1650,17 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1746 aprim.Move(); 1650 aprim.Move();
1747 } 1651 }
1748 } 1652 }
1653// moveTime += Util.GetTimeStampMS() - tmpTime;
1749 1654
1655// tmpTime = Util.GetTimeStampMS();
1750 m_rayCastManager.ProcessQueuedRequests(); 1656 m_rayCastManager.ProcessQueuedRequests();
1657// rayTime += Util.GetTimeStampMS() - tmpTime;
1751 1658
1752// tmpTime = Util.GetTimeStampMS(); 1659// tmpTime = Util.GetTimeStampMS();
1753 collision_optimized(); 1660 collision_optimized();
1754// collisionTime += Util.GetTimeStampMS() - tmpTime; 1661// collisionTime += Util.GetTimeStampMS() - tmpTime;
1755 1662
1663// tmpTime = Util.GetTimeStampMS();
1756 lock(_collisionEventPrimRemove) 1664 lock(_collisionEventPrimRemove)
1757 { 1665 {
1758 foreach (PhysicsActor obj in _collisionEventPrimRemove) 1666 foreach (PhysicsActor obj in _collisionEventPrimRemove)
@@ -1791,6 +1699,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1791 foreach(OdePrim prm in sleepers) 1699 foreach(OdePrim prm in sleepers)
1792 prm.SleeperAddCollisionEvents(); 1700 prm.SleeperAddCollisionEvents();
1793 sleepers.Clear(); 1701 sleepers.Clear();
1702// collisonRepo += Util.GetTimeStampMS() - tmpTime;
1703
1794 1704
1795 // do a ode simulation step 1705 // do a ode simulation step
1796// tmpTime = Util.GetTimeStampMS(); 1706// tmpTime = Util.GetTimeStampMS();
@@ -1814,7 +1724,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1814 } 1724 }
1815 } 1725 }
1816 */ 1726 */
1817 1727// tmpTime = Util.GetTimeStampMS();
1818 lock (_activegroups) 1728 lock (_activegroups)
1819 { 1729 {
1820 { 1730 {
@@ -1827,6 +1737,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1827 } 1737 }
1828 } 1738 }
1829 } 1739 }
1740// updatesTime += Util.GetTimeStampMS() - tmpTime;
1830 } 1741 }
1831 catch (Exception e) 1742 catch (Exception e)
1832 { 1743 {
@@ -1834,10 +1745,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1834// ode.dunlock(world); 1745// ode.dunlock(world);
1835 } 1746 }
1836 1747
1748
1837 step_time -= ODE_STEPSIZE; 1749 step_time -= ODE_STEPSIZE;
1838 nodeframes++; 1750 nodeframes++;
1839 1751
1840 looptimeMS = Util.GetTimeStampMS() - loopstartMS; 1752 looptimeMS = Util.GetTimeStampMS() - loopstartMS;
1753
1841 if (looptimeMS > maxLoopTime) 1754 if (looptimeMS > maxLoopTime)
1842 break; 1755 break;
1843 } 1756 }
@@ -1854,9 +1767,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1854 _badCharacter.Clear(); 1767 _badCharacter.Clear();
1855 } 1768 }
1856 } 1769 }
1857
1858// information block for in debug breakpoint only
1859/* 1770/*
1771// information block for in debug breakpoint only
1772
1860 int ntopactivegeoms = d.SpaceGetNumGeoms(ActiveSpace); 1773 int ntopactivegeoms = d.SpaceGetNumGeoms(ActiveSpace);
1861 int ntopstaticgeoms = d.SpaceGetNumGeoms(StaticSpace); 1774 int ntopstaticgeoms = d.SpaceGetNumGeoms(StaticSpace);
1862 int ngroundgeoms = d.SpaceGetNumGeoms(GroundSpace); 1775 int ngroundgeoms = d.SpaceGetNumGeoms(GroundSpace);
@@ -1898,14 +1811,24 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1898 int nbodies = d.NTotalBodies; 1811 int nbodies = d.NTotalBodies;
1899 int ngeoms = d.NTotalGeoms; 1812 int ngeoms = d.NTotalGeoms;
1900*/ 1813*/
1814
1901/* 1815/*
1902 looptimeMS /= nodeframes; 1816 looptimeMS /= nodeframes;
1903 if(looptimeMS > 0.080) 1817 collisionTime /= nodeframes;
1818 qstepTIme /= nodeframes;
1819 changestot /= nodeframes;
1820 collisonRepo /= nodeframes;
1821 updatesTime /= nodeframes;
1822 moveTime /= nodeframes;
1823 rayTime /= nodeframes;
1824
1825 if(looptimeMS > .05)
1904 { 1826 {
1905 collisionTime /= nodeframes; 1827
1906 qstepTIme /= nodeframes; 1828
1907 } 1829 }
1908*/ 1830*/
1831/*
1909 // Finished with all sim stepping. If requested, dump world state to file for debugging. 1832 // Finished with all sim stepping. If requested, dump world state to file for debugging.
1910 // TODO: This call to the export function is already inside lock (OdeLock) - but is an extra lock needed? 1833 // TODO: This call to the export function is already inside lock (OdeLock) - but is an extra lock needed?
1911 // TODO: This overwrites all dump files in-place. Should this be a growing logfile, or separate snapshots? 1834 // TODO: This overwrites all dump files in-place. Should this be a growing logfile, or separate snapshots?
@@ -1924,7 +1847,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1924 1847
1925 d.WorldExportDIF(world, fname, physics_logging_append_existing_logfile, prefix); 1848 d.WorldExportDIF(world, fname, physics_logging_append_existing_logfile, prefix);
1926 } 1849 }
1927 1850*/
1928 fps = (float)nodeframes * ODE_STEPSIZE / reqTimeStep; 1851 fps = (float)nodeframes * ODE_STEPSIZE / reqTimeStep;
1929 1852
1930 if(step_time < HalfOdeStep) 1853 if(step_time < HalfOdeStep)