Files
ld58/code/game/impl/aabb.c

49 lines
1.4 KiB
C
Raw Normal View History

#include "game/aabb.h"
2025-10-05 16:05:57 +01:00
#include <math.h>
2025-10-04 14:57:09 +01:00
2025-10-04 17:36:47 +01:00
bool AABB_Collide(AABB a, AABB b)
{
2025-10-04 14:57:09 +01:00
bool collision_x = a.pos.x + a.size.x >= b.pos.x && b.pos.x + b.size.x >= a.pos.x;
bool collision_y = a.pos.y + a.size.x >= b.pos.y && b.pos.y + b.size.y >= a.pos.y;
return collision_x && collision_y;
}
2025-10-04 17:36:47 +01:00
bool AABB_Point(AABB a, V2f v)
{
2025-10-04 14:57:09 +01:00
bool collision_x = a.pos.x + a.size.x >= v.x && a.pos.x <= v.x;
2025-10-06 21:07:55 +01:00
bool collision_y = a.pos.y + a.size.y >= v.y && a.pos.y <= v.y;
2025-10-04 14:57:09 +01:00
return collision_x && collision_y;
}
2025-10-04 17:36:47 +01:00
bool AABB_Slab(V2f origin, V2f point, AABB a)
{
V2f start = a.pos;
V2f finish = {a.pos.x + a.size.x, a.pos.y + a.size.y};
2025-10-05 16:05:57 +01:00
V2f invdirection = {1 / (origin.x - point.x), 1 / (origin.y - point.y)};
2025-10-04 17:36:47 +01:00
// x
2025-10-05 16:05:57 +01:00
F32 tLow = (start.x - origin.x) * invdirection.x;
F32 tHigh = (finish.x - origin.x) * invdirection.x;
2025-10-05 16:51:59 +01:00
F32 tMin = Min(tLow, tHigh);
F32 tMax = Max(tLow, tHigh);
2025-10-04 17:36:47 +01:00
// y
2025-10-05 16:05:57 +01:00
tLow = (start.y - origin.y) * invdirection.y;
tHigh = (finish.y - origin.y) * invdirection.y;
2025-10-04 17:36:47 +01:00
2025-10-05 16:51:59 +01:00
tMin = Max(tMin, Min(tLow, tHigh));
tMax = Min(tMax, Max(tLow, tHigh));
2025-10-05 16:05:57 +01:00
return tMax >= tMin;
2025-10-05 16:51:59 +01:00
}
2025-10-05 22:35:34 +01:00
V2f AABB_Centre(AABB a) {
return V2F(a.pos.x + a.size.x/2, a.pos.y + a.size.y/2);
}
2025-10-06 17:30:49 +01:00
bool AABB_Circle(F32 rad, V2f radOrigin, AABB a)
{
V2f aCentre = AABB_Centre(a);
F32 xSq = (Abs(aCentre.x) - Abs(radOrigin.x)) * (Abs(aCentre.x) - Abs(radOrigin.x));
F32 ySq = (Abs(aCentre.y) - Abs(radOrigin.y)) * (Abs(aCentre.y) - Abs(radOrigin.y));
return SDL_sqrt(xSq + ySq) < rad;
2025-10-06 21:07:55 +01:00
}