Example #1
0
 public void Report(ContactConstraint[] constraints)
 {
     if (this._listener != null)
     {
         for (int i = 0; i < this._contactCount; i++)
         {
             Contact           contact           = this._contacts[i];
             ContactConstraint contactConstraint = constraints[i];
             ContactResult     contactResult     = new ContactResult();
             contactResult.Shape1 = contact.GetShape1();
             contactResult.Shape2 = contact.GetShape2();
             Body       body          = contactResult.Shape1.GetBody();
             int        manifoldCount = contact.GetManifoldCount();
             Manifold[] manifolds     = contact.GetManifolds();
             for (int j = 0; j < manifoldCount; j++)
             {
                 Manifold manifold = manifolds[j];
                 contactResult.Normal = manifold.Normal;
                 for (int k = 0; k < manifold.PointCount; k++)
                 {
                     ManifoldPoint          manifoldPoint          = manifold.Points[k];
                     ContactConstraintPoint contactConstraintPoint = contactConstraint.Points[k];
                     contactResult.Position       = body.GetWorldPoint(manifoldPoint.LocalPoint1);
                     contactResult.NormalImpulse  = contactConstraintPoint.NormalImpulse;
                     contactResult.TangentImpulse = contactConstraintPoint.TangentImpulse;
                     contactResult.ID             = manifoldPoint.ID;
                     this._listener.Result(contactResult);
                 }
             }
         }
     }
 }
 /// <summary>
 /// Called after a contact point is solved.
 /// </summary>
 public virtual void Result(ContactResult point)
 {
     return;
 }
Example #3
0
 public virtual void Result(ContactResult point)
 {
 }
        public void Report(ContactConstraint[] constraints)
        {
            if (_listener == null)
            {
                return;
            }

            for (int i = 0; i < _contactCount; ++i)
            {
                Contact c = _contacts[i];
                ContactConstraint cc = constraints[i];
                ContactResult cr = new ContactResult();
                cr.Shape1 = c.GetShape1();
                cr.Shape2 = c.GetShape2();
                Body b1 = cr.Shape1.GetBody();
                int manifoldCount = c.GetManifoldCount();
                Manifold[] manifolds = c.GetManifolds();
                for (int j = 0; j < manifoldCount; ++j)
                {
                    Manifold manifold = manifolds[j];
                    cr.Normal = manifold.Normal;
                    for (int k = 0; k < manifold.PointCount; ++k)
                    {
                        ManifoldPoint point = manifold.Points[k];
                        ContactConstraintPoint ccp = cc.Points[k];
                        cr.Position = b1.GetWorldPoint(point.LocalPoint1);

                        // TOI constraint results are not stored, so get
                        // the result from the constraint.
                        cr.NormalImpulse = ccp.NormalImpulse;
                        cr.TangentImpulse = ccp.TangentImpulse;
                        cr.ID = point.ID;

                        _listener.Result(cr);
                    }
                }
            }
        }
Example #5
0
 public void Report(ContactConstraint[] constraints)
 {
     if (this._listener != null)
     {
         for (int i = 0; i < this._contactCount; i++)
         {
             Contact contact = this._contacts[i];
             ContactConstraint contactConstraint = constraints[i];
             ContactResult contactResult = new ContactResult();
             contactResult.Shape1 = contact.GetShape1();
             contactResult.Shape2 = contact.GetShape2();
             Body body = contactResult.Shape1.GetBody();
             int manifoldCount = contact.GetManifoldCount();
             Manifold[] manifolds = contact.GetManifolds();
             for (int j = 0; j < manifoldCount; j++)
             {
                 Manifold manifold = manifolds[j];
                 contactResult.Normal = manifold.Normal;
                 for (int k = 0; k < manifold.PointCount; k++)
                 {
                     ManifoldPoint manifoldPoint = manifold.Points[k];
                     ContactConstraintPoint contactConstraintPoint = contactConstraint.Points[k];
                     contactResult.Position = body.GetWorldPoint(manifoldPoint.LocalPoint1);
                     contactResult.NormalImpulse = contactConstraintPoint.NormalImpulse;
                     contactResult.TangentImpulse = contactConstraintPoint.TangentImpulse;
                     contactResult.ID = manifoldPoint.ID;
                     this._listener.Result(contactResult);
                 }
             }
         }
     }
 }