Update rshapes.c
Added "CheckCollisionRayLine()" function for 2D raycasting.
This commit is contained in:
parent
dcb0e62095
commit
1e7919c24e
|
|
@ -1714,6 +1714,8 @@ bool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2,
|
|||
return collision;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]
|
||||
bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshold)
|
||||
{
|
||||
|
|
@ -1734,6 +1736,23 @@ bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshol
|
|||
return collision;
|
||||
}
|
||||
|
||||
bool CheckCollisionRayLine(Vector2 rayPosition, Vector2 rayDirection, Vector2 startPos, Vector2 endPos, Vector2 *collisionPoint)
|
||||
{
|
||||
bool collision = false;
|
||||
Vector2 offsetPosition;
|
||||
offsetPosition.x = rayPosition.x + rayDirection.x;
|
||||
offsetPosition.y = rayPosition.y + rayDirection.y;
|
||||
|
||||
float denom = (startPos.x - endPos.x)*(rayPosition.y-offsetPosition.y) - (startPos.y - endPos.y)*(rayPosition.x-offsetPosition.x);
|
||||
if (denom == 0) return collision;
|
||||
float t = ((startPos.x - rayPosition.x)*(rayPosition.y - offsetPosition.y) - (startPos.y-rayPosition.y)*(rayPosition.x-offsetPosition.x)) / denom;
|
||||
float u = ((startPos.x - rayPosition.x)*(startPos.y - endPos.y) - (startPos.y-rayPosition.y)*(startPos.x - endPos.x)) / denom;
|
||||
collision = (t >= 0 && t <= 1 && u >= 0);
|
||||
if (collision)
|
||||
*collisionPoint = (Vector2){startPos.x + t * (endPos.x-startPos.x),startPos.y + t * (endPos.y-startPos.y)};
|
||||
return collision;
|
||||
}
|
||||
|
||||
// Get collision rectangle for two rectangles collision
|
||||
Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user