addPair method
void
addPair(
- covariant FixtureProxy proxyUserDataA,
- 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.fromPair(
fixtureA,
indexA,
fixtureB,
indexB,
collision,
distance,
);
// 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);
}
}