addContact method

void addContact(
  1. Particle particleA,
  2. Particle particleB
)

Implementation

void addContact(Particle particleA, Particle particleB) {
  assert(
    particleA != particleB,
    "The particles in contact can't be the same",
  );
  final pa = particleA.position;
  final pb = particleB.position;
  final dx = pb.x - pa.x;
  final dy = pb.y - pa.y;
  final d2 = dx * dx + dy * dy;
  if (d2 < squaredDiameter) {
    final invD = d2 != 0 ? sqrt(1 / d2) : double.maxFinite;
    final contact = ParticleContact(particleA, particleB)
      ..flags = particleA.flags | particleB.flags
      ..weight = 1 - d2 * invD * inverseDiameter
      ..normal.x = invD * dx
      ..normal.y = invD * dy;
    contactBuffer.add(contact);
  }
}