private void UpdateContacts(ArbiterMap selectedArbiterMap) { foreach (Arbiter current in selectedArbiterMap.Arbiters) { this.UpdateArbiterContacts(current); } while (this.removedArbiterStack.Count > 0) { Arbiter arbiter = this.removedArbiterStack.Pop(); Arbiter.Pool.GiveBack(arbiter); selectedArbiterMap.Remove(arbiter); bool flag = selectedArbiterMap == this.arbiterMap; if (flag) { this.removedArbiterQueue.Enqueue(arbiter); this.events.RaiseBodiesEndCollide(arbiter.body1, arbiter.body2); this.cacheOverPairContact.SetBodies(arbiter.body1, arbiter.body2); this.initialCollisions.Remove(this.cacheOverPairContact); } else { bool isColliderOnly = arbiter.body1.isColliderOnly; if (isColliderOnly) { this.events.RaiseTriggerEndCollide(arbiter.body1, arbiter.body2); } else { this.events.RaiseTriggerEndCollide(arbiter.body2, arbiter.body1); } this.cacheOverPairContact.SetBodies(arbiter.body1, arbiter.body2); this.initialTriggers.Remove(this.cacheOverPairContact); } } }