Sfoglia il codice sorgente

Update GetCollisionRec (#3052)

* Update rshapes.c

Add a much more efficient GetCollisionRec implementation

* Update GetCollisionRec

Replace macros with ternary operators
pull/3053/head
manuel5975p 2 anni fa
committed by GitHub
parent
commit
af4b97a301
Non sono state trovate chiavi note per questa firma nel database ID Chiave GPG: 4AEE18F83AFDEB23
1 ha cambiato i file con 22 aggiunte e 63 eliminazioni
  1. +22
    -63
      src/rshapes.c

+ 22
- 63
src/rshapes.c Vedi File

@ -1756,70 +1756,29 @@ bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshol
}
// Get collision rectangle for two rectangles collision
Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2)
{
Rectangle rec = { 0, 0, 0, 0 };
if (CheckCollisionRecs(rec1, rec2))
{
float dxx = fabsf(rec1.x - rec2.x);
float dyy = fabsf(rec1.y - rec2.y);
if (rec1.x <= rec2.x)
{
if (rec1.y <= rec2.y)
{
rec.x = rec2.x;
rec.y = rec2.y;
rec.width = rec1.width - dxx;
rec.height = rec1.height - dyy;
}
else
{
rec.x = rec2.x;
rec.y = rec1.y;
rec.width = rec1.width - dxx;
rec.height = rec2.height - dyy;
}
}
else
{
if (rec1.y <= rec2.y)
{
rec.x = rec1.x;
rec.y = rec2.y;
rec.width = rec2.width - dxx;
rec.height = rec1.height - dyy;
}
else
{
rec.x = rec1.x;
rec.y = rec1.y;
rec.width = rec2.width - dxx;
rec.height = rec2.height - dyy;
}
}
if (rec1.width > rec2.width)
{
if (rec.width >= rec2.width) rec.width = rec2.width;
}
else
{
if (rec.width >= rec1.width) rec.width = rec1.width;
}
if (rec1.height > rec2.height)
{
if (rec.height >= rec2.height) rec.height = rec2.height;
}
else
{
if (rec.height >= rec1.height) rec.height = rec1.height;
}
Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2){
Rectangle overlap;
float left = ((rec1.x) > (rec2.x) ? (rec1.x) : (rec2.x));
float right1 = rec1.x + rec1.width;
float right2 = rec2.x + rec2.width;
float right = ((right1) < (right2) ? (right1) : (right2));
float top = ((rec1.y) > (rec2.y) ? (rec1.y) : (rec2.y));
float bottom1 = rec1.y + rec1.height;
float bottom2 = rec2.y + rec2.height;
float bottom = ((bottom1) < (bottom2) ? (bottom1) : (bottom2));
if (left < right && top < bottom){
overlap.x = (left);
overlap.y = (top);
overlap.width = (right - left );
overlap.height = (bottom - top);
}
return rec;
else{
overlap.x = 0;
overlap.y = 0;
overlap.width = 0;
overlap.height = 0;
}
return overlap;
}
//----------------------------------------------------------------------------------

Caricamento…
Annulla
Salva