summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-03-26 11:32:42 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-03-26 11:32:42 (EDT)
commit604f1fa4f9f2ebfbfc1e8175a914073c0fa974b7 (patch)
tree9fca406ea0719f72fb379c52414bdaba9d80aba7 /src
parent693d232ab6d8180292c776347a33b6c9c5f0f997 (diff)
downloaddodge-balls-604f1fa4f9f2ebfbfc1e8175a914073c0fa974b7.zip
dodge-balls-604f1fa4f9f2ebfbfc1e8175a914073c0fa974b7.tar.gz
dodge-balls-604f1fa4f9f2ebfbfc1e8175a914073c0fa974b7.tar.bz2
collision: Add rectangle/AABB collision functions
Diffstat (limited to 'src')
-rw-r--r--src/collision.c25
-rw-r--r--src/collision.h4
2 files changed, 29 insertions, 0 deletions
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 <SDL.h>
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,