///<summary> /// Cleans up the pair handler. ///</summary> 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. }
///<summary> /// Cleans up the pair handler. ///</summary> 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. CollidableA.pairs.Remove(this); CollidableB.pairs.Remove(this); //Notify the colliders that the pair went away. if (!suppressEvents) { CollidableA.EventTriggerer.OnPairRemoved(CollidableB); CollidableB.EventTriggerer.OnPairRemoved(CollidableA); } broadPhaseOverlap = new BroadPhaseOverlap(); (this as NarrowPhasePair).NeedsUpdate = false; (this as NarrowPhasePair).NarrowPhase = null; 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. }