summaryrefslogtreecommitdiffstats
path: root/src/collision.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/collision.c')
-rw-r--r--src/collision.c25
1 files changed, 25 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)
{