public void CollideCircles(Manifold manifold, CircleShape circle1, Transform xfA, CircleShape circle2, Transform xfB)
{
manifold.PointCount = 0;
// before inline:
Transform.MulToOut(xfA, circle1.P, P_A);
Transform.MulToOut(xfB, circle2.P, P_B);
D.Set(P_B).SubLocal(P_A);
float distSqr = D.X * D.X + D.Y * D.Y;
// after inline:
// final Vec2 v = circle1.m_p;
// final float pAy = xfA.p.y + xfA.q.ex.y * v.x + xfA.q.ey.y * v.y;
// final float pAx = xfA.p.x + xfA.q.ex.x * v.x + xfA.q.ey.x * v.y;
//
// final Vec2 v1 = circle2.m_p;
// final float pBy = xfB.p.y + xfB.q.ex.y * v1.x + xfB.q.ey.y * v1.y;
// final float pBx = xfB.p.x + xfB.q.ex.x * v1.x + xfB.q.ey.x * v1.y;
//
// final float dx = pBx - pAx;
// final float dy = pBy - pAy;
//
// final float distSqr = dx * dx + dy * dy;
// end inline
float radius = circle1.Radius + circle2.Radius;
if (distSqr > radius * radius)
{
return;
}
manifold.Type = Manifold.ManifoldType.Circles;
manifold.LocalPoint.Set(circle1.P);
manifold.LocalNormal.SetZero();
manifold.PointCount = 1;
manifold.Points[0].LocalPoint.Set(circle2.P);
manifold.Points[0].Id.Zero();
}