private void ProcessSingleCollisionEvent(ColEvent colEvent)
{
// Ignore disposed fixtures / bodies
if (colEvent.FixtureA.Body == null) return;
if (colEvent.FixtureB.Body == null) return;
Component otherComponent = colEvent.FixtureB.Body.UserData as Component;
GameObject otherObject = otherComponent != null ? otherComponent.GameObj : colEvent.FixtureB.Body.UserData as GameObject;
RigidBodyCollisionEventArgs args = new RigidBodyCollisionEventArgs(
otherObject,
colEvent.Data,
colEvent.FixtureA.UserData as ShapeInfo,
colEvent.FixtureB.UserData as ShapeInfo);
if (colEvent.Type == ColEvent.EventType.Collision)
this.NotifyCollisionBegin(args);
else if (colEvent.Type == ColEvent.EventType.Separation)
this.NotifyCollisionEnd(args);
else if (colEvent.Type == ColEvent.EventType.PostSolve)
this.NotifyCollisionSolve(args);
}