fix: Circles Not Colliding Accurately Fixed
This commit is contained in:
		@@ -66,19 +66,6 @@ public class CollisionDetector : ICollisionDetector
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        collisionInformation = default;
 | 
					        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;
 | 
					        var vertices = shapeCollider.ShapeWorld.Vertices;
 | 
				
			||||||
        int count = vertices.Count;
 | 
					        int count = vertices.Count;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -96,6 +83,19 @@ public class CollisionDetector : ICollisionDetector
 | 
				
			|||||||
                collisionInformation = new(shapeCollider, circleCollider, projectionVector, depth);
 | 
					                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;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user