addPair method

  1. @override
void addPair(
  1. covariant FixtureProxy proxyUserDataA,
  2. covariant FixtureProxy proxyUserDataB
)
override

Broad-phase callback.

Implementation

@override
void addPair(FixtureProxy proxyUserDataA, FixtureProxy proxyUserDataB) {
  final proxyA = proxyUserDataA;
  final proxyB = proxyUserDataB;

  final fixtureA = proxyA.fixture;
  final fixtureB = proxyB.fixture;

  final indexA = proxyA.childIndex;
  final indexB = proxyB.childIndex;

  final bodyA = fixtureA.body;
  final bodyB = fixtureB.body;

  // Are the fixtures on the same body?
  if (bodyA == bodyB) {
    return;
  }

  // Check whether a contact already exists
  for (final contact in bodyB.contacts) {
    if (contact.containsBody(bodyA)) {
      if (contact.representsArguments(fixtureA, indexA, fixtureB, indexB)) {
        // A contact already exists.
        return;
      }
    }
  }

  // Does a joint override collision? is at least one body dynamic?
  if (!bodyB.shouldCollide(bodyA)) {
    return;
  }

  // Check user filtering.
  if (contactFilter?.shouldCollide(fixtureA, fixtureB) == false) {
    return;
  }

  final contact = Contact.init(fixtureA, indexA, fixtureB, indexB);

  // Insert into the world.
  contacts.add(contact);

  // Connect to island graph.

  // Connect to ths bodies
  bodyA.contacts.add(contact);
  bodyB.contacts.add(contact);

  // Wake up the bodies
  if (!fixtureA.isSensor && !fixtureB.isSensor) {
    bodyA.setAwake(true);
    bodyB.setAwake(true);
  }
}