50 if (a_right < b_left || a_left > b_right || a_top < b_bottom ||
64static inline int gm_circle_vs_circle(
gmBody *a,
gmBody *b) {
67 double distance_sq = dx * dx + dy * dy;
69 return distance_sq < (total_radius * total_radius);
78static inline int gm_circle_vs_aabb(
const gmBody *circle,
const gmBody *rect) {
79 double half_w = rect->
width * 0.5;
80 double half_h = rect->
height * 0.5;
90 double dx = circle->
position.
x - closest_x;
91 double dy = circle->
position.
y - closest_y;
94 return (dx * dx + dy * dy) <= (circle->
radius * circle->
radius);
114 collided = gm_aabb_vs_aabb(a, b);
118 collided = gm_circle_vs_circle(a, b);
122 collided = gm_circle_vs_aabb(a, b);
126 collided = gm_circle_vs_aabb(b, a);
133 collision->
normals = gmpos(0, 0);
135 collision->
since = 0;
136 collision->
sys = NULL;
156 return (dx < body->width * 0.5) && (dy < body->
height * 0.5);
158 return (dx * dx) + (dy * dy) < (body->
radius * body->
radius);
@ GM_COLLIDER_RECT
Definition body.h:18
@ GM_COLLIDER_CIRCLE
Definition body.h:17
struct gm_collision gmCollision
Structure to store detailed information about a collision between two bodies.
int gm_mouse_in_rect(const double x, const double y, const double w, const double h)
Checks if the mouse cursor is currently within a given rectangular area.
Definition collision.h:172
gmCollision * gm_collision_detect(gmBody *a, gmBody *b)
Detects a collision between two physics bodies based on their collider types.
Definition collision.h:110
int gm_mouse_in_circle(const double x, const double y, const double r)
Checks if the mouse cursor is currently within a given circular area.
Definition collision.h:184
int gm_body_contains(gmBody *body, double x, double y)
Checks if a given point (x, y) is contained within a body's collider.
Definition collision.h:151
void * malloc(size_t size)
Custom implementation of malloc using a static memory pool.
Definition malloc.h:144
double fmin(double a, double b)
Returns the smaller of two double values.
Definition math.h:413
double fmax(double a, double b)
Returns the larger of two double values.
Definition math.h:428
double pow(double base, double exp)
Calculates the base raised to the power of the exponent (base^exp).
Definition math.h:358
double fabs(double x)
Calculates the absolute value of a double.
Definition math.h:369
struct _gmMouse gm_mouse
Definition mouse.h:32
Structure to store detailed information about a collision between two bodies.
Definition collision.h:18
gmPos normals
Definition collision.h:20
double since
Definition collision.h:22
double penetration
Definition collision.h:21
gmBody * bodies[2]
Definition collision.h:19
gmSystem * sys
Definition collision.h:23
Structure representing a physics body with properties for collision and movement.
Definition body.h:25
double width
Definition body.h:35
gmColliderType collider_type
Definition body.h:30
double height
Definition body.h:35
double radius
Definition body.h:35
gmPos position
Definition body.h:31
Represents a 2D position or vector.
Definition position.h:8
double x
Definition position.h:9
double y
Definition position.h:9
Manages physics bodies, their interactions, and collision detection within a simulation.
struct gm_system gmSystem
Structure representing a physics system containing bodies and collision information.