Collide() public method

public Collide ( ) : void
return void
Beispiel #1
0
        /// <summary>
        /// Take a time step. This performs collision detection, integration,
        /// and constraint solution.
        /// </summary>
        /// <param name="dt">The amount of time to simulate, this should not vary.</param>
        /// <param name="velocityIterations">For the velocity constraint solver.</param>
        /// <param name="positionIteration">For the positionconstraint solver.</param>
        public void Step(float dt, int velocityIterations, int positionIteration)
        {
            int height;

            height = _contactManager._broadPhase.ComputeHeight();

            // If new fixtures were added, we need to find the new contacts.
            if ((_flags & WorldFlags.NewFixture) != 0)
            {
                _contactManager.FindNewContacts();
                _flags &= ~WorldFlags.NewFixture;
            }

            _flags |= WorldFlags.Locked;

            TimeStep step = new TimeStep();

            step.Dt = dt;
            step.VelocityIterations = velocityIterations;
            step.PositionIterations = positionIteration;
            if (dt > 0.0f)
            {
                step.Inv_Dt = 1.0f / dt;
            }
            else
            {
                step.Inv_Dt = 0.0f;
            }

            step.DtRatio = _inv_dt0 * dt;

            step.WarmStarting = _warmStarting;

            // Update contacts. This is where some contacts are destroyed.
            _contactManager.Collide();

            // Integrate velocities, solve velocity constraints, and integrate positions.
            if (step.Dt > 0.0f)
            {
                Solve(step);
            }

            // Handle TOI events.
            if (_continuousPhysics && step.Dt > 0.0f)
            {
                SolveTOI(step);
            }

            if (step.Dt > 0.0f)
            {
                _inv_dt0 = step.Inv_Dt;
            }

            _flags &= ~WorldFlags.Locked;
        }