public virtual void PreSolve(Contact contact, Manifold oldManifold) { Manifold manifold = contact.GetManifold(); if (manifold.points.Count() == 0) { return; } Fixture fixtureA = contact.FixtureA; Fixture fixtureB = contact.FixtureB; PointState[] state1 = new PointState[Settings._maxManifoldPoints]; PointState[] state2 = new PointState[Settings._maxManifoldPoints]; Collision.GetPointStates(state1, state2, oldManifold, manifold); WorldManifold worldManifold; contact.GetWorldManifold(out worldManifold); for (int i = 0; i < manifold.points.Count() && m_pointCount < Program.k_maxContactPoints; ++i) { ContactPoint cp = m_points[m_pointCount]; cp.fixtureA = fixtureA; cp.fixtureB = fixtureB; cp.position = worldManifold.points[i]; cp.normal = worldManifold.normal; cp.state = state2[i]; cp.normalImpulse = manifold.points[i].normalImpulse; cp.tangentImpulse = manifold.points[i].tangentImpulse; ++m_pointCount; } }