public void step( float dt )
{
if( !enabled )
return;
if( Settings.enableDiagnostics )
_watch.Start();
processChanges();
if( Settings.enableDiagnostics )
addRemoveTime = _watch.ElapsedTicks;
// If new fixtures were added, we need to find the new contacts.
if( _worldHasNewFixture )
{
contactManager.findNewContacts();
_worldHasNewFixture = false;
}
if( Settings.enableDiagnostics )
newContactsTime = _watch.ElapsedTicks - addRemoveTime;
// FPE only: moved position and velocity iterations into Settings.cs
TimeStep step;
step.inv_dt = dt > 0.0f ? 1.0f / dt : 0.0f;
step.dt = dt;
step.dtRatio = _invDt0 * dt;
// Update controllers
for( var i = 0; i < controllerList.Count; i++ )
controllerList[i].Update( dt );
if( Settings.enableDiagnostics )
controllersUpdateTime = _watch.ElapsedTicks - ( addRemoveTime + newContactsTime );
// Update contacts. This is where some contacts are destroyed.
contactManager.collide();
if( Settings.enableDiagnostics )
contactsUpdateTime = _watch.ElapsedTicks - ( addRemoveTime + newContactsTime + controllersUpdateTime );
// Integrate velocities, solve velocity raints, and integrate positions.
solve( ref step );
if( Settings.enableDiagnostics )
solveUpdateTime = _watch.ElapsedTicks - ( addRemoveTime + newContactsTime + controllersUpdateTime + contactsUpdateTime );
// Handle TOI events.
if( Settings.continuousPhysics )
{
solveTOI( ref step );
}
if( Settings.enableDiagnostics )
continuousPhysicsTime = _watch.ElapsedTicks - ( addRemoveTime + newContactsTime + controllersUpdateTime + contactsUpdateTime + solveUpdateTime );
if( Settings.autoClearForces )
clearForces();
for( var i = 0; i < breakableBodyList.Count; i++ )
breakableBodyList[i].update();
_invDt0 = step.inv_dt;
if( Settings.enableDiagnostics )
{
_watch.Stop();
updateTime = _watch.ElapsedTicks;
_watch.Reset();
}
}