collideCircles method

void collideCircles(
  1. Manifold manifold,
  2. CircleShape circle1,
  3. Transform xfA,
  4. CircleShape circle2,
  5. Transform xfB,
)

Compute the collision manifold between two circles.

Implementation

void collideCircles(
  Manifold manifold,
  CircleShape circle1,
  Transform xfA,
  CircleShape circle2,
  Transform xfB,
) {
  manifold.pointCount = 0;

  // after inline:
  final circle1p = circle1.position;
  final circle2p = circle2.position;
  final pAx = (xfA.q.cos * circle1p.x - xfA.q.sin * circle1p.y) + xfA.p.x;
  final pAy = (xfA.q.sin * circle1p.x + xfA.q.cos * circle1p.y) + xfA.p.y;
  final pBx = (xfB.q.cos * circle2p.x - xfB.q.sin * circle2p.y) + xfB.p.x;
  final pBy = (xfB.q.sin * circle2p.x + xfB.q.cos * circle2p.y) + xfB.p.y;
  final dx = pBx - pAx;
  final dy = pBy - pAy;
  final distSqr = dx * dx + dy * dy;
  // end inline

  final radius = circle1.radius + circle2.radius;
  if (distSqr > radius * radius) {
    return;
  }

  manifold.type = ManifoldType.circles;
  manifold.localPoint.setFrom(circle1p);
  manifold.localNormal.setZero();
  manifold.pointCount = 1;

  manifold.points[0].localPoint.setFrom(circle2p);
  manifold.points[0].id.zero();
}