diff --git a/Engine.Physics2D/CollisionDetector.cs b/Engine.Physics2D/CollisionDetector.cs index 32b0e4b..93efd8e 100644 --- a/Engine.Physics2D/CollisionDetector.cs +++ b/Engine.Physics2D/CollisionDetector.cs @@ -66,19 +66,6 @@ public class CollisionDetector : ICollisionDetector { collisionInformation = default; - { - Vector2D shapeToCircleProjectionVector = shapeCollider.Transform.Position.FromTo(circleCollider.CircleWorld.Center).Normalized; - - Projection shapeProjection = shapeCollider.ShapeWorld.ToProjection(shapeToCircleProjectionVector); - Projection circleProjection = circleCollider.CircleWorld.ToProjection(shapeToCircleProjectionVector); - - if (!shapeProjection.Overlaps(circleProjection, out float depth)) - return false; - - if (Math.Abs(collisionInformation.Penetration) > Math.Abs(depth)) - collisionInformation = new(shapeCollider, circleCollider, shapeToCircleProjectionVector, depth); - } - var vertices = shapeCollider.ShapeWorld.Vertices; int count = vertices.Count; @@ -96,6 +83,19 @@ public class CollisionDetector : ICollisionDetector collisionInformation = new(shapeCollider, circleCollider, projectionVector, depth); } + { + Vector2D shapeToCircleProjectionVector = shapeCollider.Transform.Position.FromTo(circleCollider.CircleWorld.Center).Normalized; + + Projection shapeProjection = shapeCollider.ShapeWorld.ToProjection(shapeToCircleProjectionVector); + Projection circleProjection = circleCollider.CircleWorld.ToProjection(shapeToCircleProjectionVector); + + if (!shapeProjection.Overlaps(circleProjection, out float depth)) + return false; + + if (collisionInformation.Left is null || Math.Abs(collisionInformation.Penetration) > Math.Abs(depth)) + collisionInformation = new(shapeCollider, circleCollider, shapeToCircleProjectionVector, depth); + } + return true; }