public override void CleanUp()
{
//Child types remove contacts from the pair handler and call OnContactRemoved.
//Child types manage the removal of the constraint from the space, if necessary.
//If the contact manifold had any contacts in it on cleanup, then we still need to fire the 'ending' event.
if (previousContactCount > 0 && !suppressEvents)
{
CollidableA.EventTriggerer.OnCollisionEnded(CollidableB, this);
CollidableB.EventTriggerer.OnCollisionEnded(CollidableA, this);
}
//Remove this pair from each collidable. This can be done safely because the CleanUp is called sequentially.
//However, only do it if we have been added to the collidables! This does not happen until this pair is added to the narrow phase.
//For pairs which never get added to the broad phase, such as those in queries, we should not attempt to remove something that isn't there!
if (listIndexA != -1)
{
CollidableA.RemovePair(this, ref listIndexA);
CollidableB.RemovePair(this, ref listIndexB);
}
//Notify the colliders that the pair went away.
if (!suppressEvents)
{
CollidableA.EventTriggerer.OnPairRemoved(CollidableB);
CollidableB.EventTriggerer.OnPairRemoved(CollidableA);
}
broadPhaseOverlap = new BroadPhaseOverlap();
suppressEvents = false;
timeOfImpact = 1;
Parent = null;
previousContactCount = 0;
//Child cleanup is responsible for cleaning up direct references to the involved collidables.
//Child cleanup is responsible for cleaning up contact manifolds.
}