void report(ContactVelocityConstraint[] constraints)
        {
            if (_contactManager == null)
            {
                return;
            }

            for (int i = 0; i < ContactCount; ++i)
            {
                Contact c = _contacts[i];

                //FPE optimization: We don't store the impulses and send it to the delegate. We just send the whole contact.
                //FPE feature: added after collision
                if (c.fixtureA.afterCollision != null)
                {
                    c.fixtureA.afterCollision(c.fixtureA, c.fixtureB, c, constraints[i]);
                }

                if (c.fixtureB.afterCollision != null)
                {
                    c.fixtureB.afterCollision(c.fixtureB, c.fixtureA, c, constraints[i]);
                }

                if (_contactManager.onPostSolve != null)
                {
                    _contactManager.onPostSolve(c, constraints[i]);
                }
            }
        }