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; }
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); } } } }
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); } } } } }