fix: Circles Not Colliding Accurately Fixed
This commit is contained in:
		@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user