From bd43d39367ad5ec12b60b95d92cacf2157950488 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Sat, 27 Jan 2024 15:07:07 +0300 Subject: [PATCH] fix: Circles Not Colliding Accurately Fixed --- Engine.Physics2D/CollisionDetector.cs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) 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; }