public static void RayTestAllLessGarbage(Ray ray, List <RayTestCollision> reusableList, uint maxResults = DEFAULT_MAX_RAY_TEST_RESULTS) { if (ray.IsInfiniteLength) { ray = ray.WithLength(RAY_TEST_INF_LENGTH_ACTUAL); } if (reusableRTResultsList == null) { reusableRTResultsList = new List <RayTestCollisionDesc>(); rtcdComparer = new RTCDComparer(); } PhysicsManager.RayTestAllLessGarbage(ray.StartPoint, ray.EndPoint.Value, maxResults, reusableRTResultsList); rtcdComparer.RayOrigin = ray.StartPoint; reusableRTResultsList.Sort(rtcdComparer); reusableList.Clear(); lock (staticMutationLock) { for (int i = 0; i < reusableRTResultsList.Count; ++i) { var rtcd = reusableRTResultsList[i]; Entity firstMatchingEntity = null; for (int e = 0; e < entityList.Count; ++e) { if (entityList[e].PhysicsBody == rtcd.BodyHandle) { firstMatchingEntity = entityList[e]; break; } } if (firstMatchingEntity == null) { for (int e = 0; e < entitiesToBeAdded.Count; ++e) { if (entitiesToBeAdded[e].PhysicsBody == rtcd.BodyHandle) { firstMatchingEntity = entitiesToBeAdded[e]; break; } } } var result = new RayTestCollision(firstMatchingEntity, (Vector3)rtcd.Position); reusableList.Add(result); } } }