From 604f1fa4f9f2ebfbfc1e8175a914073c0fa974b7 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Fri, 26 Mar 2021 11:32:42 -0400 Subject: collision: Add rectangle/AABB collision functions --- (limited to 'src') diff --git a/src/collision.c b/src/collision.c index 2abd8a2..e17e78a 100644 --- a/src/collision.c +++ b/src/collision.c @@ -38,6 +38,31 @@ db_pt_in_rect(int x, int y, SDL_Rect *rect) return 1; } +void +db_closest_pt_on_rect(int x, int y, SDL_Rect *rect, int *close_x, int *close_y) +{ + *close_x = x; + if (x < rect->x) { + *close_x = rect->x; + } else if (x > rect->x + rect->w) { + *close_x = rect->x + rect->w; + } + *close_y = y; + if (y < rect->y) { + *close_y = rect->y; + } else if (y > rect->y + rect->h) { + *close_y = rect->y + rect->h; + } +} + +int +db_col_cir_rect(int x, int y, int r, SDL_Rect *rect, int *col_x, int *col_y) +{ + db_closest_pt_on_rect(x, y, rect, col_x, col_y); + return (r * r) >= + ((*col_x - x) * (*col_x - x) + (*col_y - y) * (*col_y - y)); +} + int db_col_cir_cir(int x1, int y1, int r1, int x2, int y2, int r2) { diff --git a/src/collision.h b/src/collision.h index 58cd95e..896620b 100644 --- a/src/collision.h +++ b/src/collision.h @@ -23,6 +23,10 @@ #include int db_pt_in_rect(int x, int y, SDL_Rect *rect) __attribute__((__pure__)); +void db_closest_pt_on_rect(int x, int y, SDL_Rect *rect, + int *close_x, int *close_y); +int db_col_cir_rect(int x, int y, int r, SDL_Rect *rect, + int *col_x, int *col_y); int db_col_cir_cir(int x1, int y1, int r1, int x2, int y2, int r2) __attribute__((__const__)); int db_col_pt_cir_cir(int x1, int y1, int r1, int x2, int y2, int r2, -- cgit v0.9.1