FarseerPhysics.Dynamics.World.step C# (CSharp) 메소드

step() 공개 메소드

Take a time step. This performs collision detection, integration, and consraint solution.
public step ( float dt ) : void
dt float The amount of time to simulate, this should not vary.
리턴 void
		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();
			}
		}