public static List<RayCastData> RayCast(Vector2 worldCoordA, Vector2 worldCoordB, RayCastCallback callback = null)
{
if (callback == null) callback = Raycast_DefaultCallback;
Vector2 fsWorldCoordA = PhysicsConvert.ToPhysicalUnit(worldCoordA);
Vector2 fsWorldCoordB = PhysicsConvert.ToPhysicalUnit(worldCoordB);
List<RayCastData> hitData = new List<RayCastData>();
Scene.PhysicsWorld.RayCast(delegate(Fixture fixture, Vector2 pos, Vector2 normal, float fraction)
{
RayCastData data = new RayCastData(
fixture.UserData as ShapeInfo,
PhysicsConvert.ToDualityUnit(pos),
normal,
fraction);
float result = callback(data);
if (result >= 0.0f) hitData.Add(data);
return result;
}, fsWorldCoordA, fsWorldCoordB);
hitData.StableSort((d1, d2) => (int)(1000000.0f * (d1.Fraction - d2.Fraction)));
return hitData;
}