summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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,