public void Destroy(b2Contact c) { b2Fixture fixtureA = c.FixtureA; b2Fixture fixtureB = c.FixtureB; b2Body bodyA = fixtureA.Body; b2Body bodyB = fixtureB.Body; if (m_contactListener != null && c.IsTouching()) { m_contactListener.EndContact(c); } // Remove from the world. if (c.Prev != null) { c.Prev.Next = c.Next; } if (c.Next != null) { c.Next.Prev = c.Prev; } if (c == m_contactList) { m_contactList = c.Next; } // Remove from body 1 if (c.NodeA.Prev != null) { c.NodeA.Prev.Next = c.NodeA.Next; } if (c.NodeA.Next != null) { c.NodeA.Next.Prev = c.NodeA.Prev; } if (c.NodeA == bodyA.ContactList) { bodyA.ContactList = c.NodeA.Next; } // Remove from body 2 if (c.NodeB.Prev != null) { c.NodeB.Prev.Next = c.NodeB.Next; } if (c.NodeB.Next != null) { c.NodeB.Next.Prev = c.NodeB.Prev; } if (c.NodeB == bodyB.ContactList) { bodyB.ContactList = c.NodeB.Next; } c.Free(); // Call the factory. --m_contactCount; }