mirror of
https://github.com/raysan5/raylib.git
synced 2025-09-17 16:58:14 +00:00
Reviewed function: CheckCollisionCircleRec()
This commit is contained in:
18
src/shapes.c
18
src/shapes.c
@@ -391,16 +391,24 @@ bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, floa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check collision between circle and rectangle
|
// Check collision between circle and rectangle
|
||||||
|
// NOTE: Reviewed version to take into account corner limit case
|
||||||
bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec)
|
bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec)
|
||||||
{
|
{
|
||||||
bool collision = false;
|
int recCenterX = rec.x + rec.width/2;
|
||||||
|
int recCenterY = rec.y + rec.height/2;
|
||||||
|
|
||||||
float dx = fabs((rec.x + rec.width/2) - center.x);
|
float dx = abs(center.x - recCenterX);
|
||||||
float dy = fabs((rec.y + rec.height/2) - center.y);
|
float dy = abs(center.y - recCenterY);
|
||||||
|
|
||||||
if ((dx <= (rec.width/2 + radius)) && (dy <= (rec.height/2 + radius))) collision = true;
|
if (dx > (rec.width/2 + radius)) { return false; }
|
||||||
|
if (dy > (rec.height/2 + radius)) { return false; }
|
||||||
|
|
||||||
return collision;
|
if (dx <= (rec.width/2)) { return true; }
|
||||||
|
if (dy <= (rec.height/2)) { return true; }
|
||||||
|
|
||||||
|
float cornerDistanceSq = pow(dx - rec.width/2, 2) + pow(dy - rec.height/2, 2);
|
||||||
|
|
||||||
|
return (cornerDistanceSq <= (radius*radius));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get collision rectangle for two rectangles collision
|
// Get collision rectangle for two rectangles collision
|
||||||
|
Reference in New Issue
Block a user