summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorarngo <[email protected]>2023-05-27 16:07:37 -0400
committerarngo <[email protected]>2023-05-27 16:07:37 -0400
commit79cd0ac07a93fefbf59218ee77d44ea2501dfdd5 (patch)
treeee2bcbfe73202c4b018ef7f7c2cc594eacdde9b0
parent68b5d45b66d948db337f50255fa777ce15ee0871 (diff)
downloadRodeoKit-79cd0ac07a93fefbf59218ee77d44ea2501dfdd5.tar.gz
RodeoKit-79cd0ac07a93fefbf59218ee77d44ea2501dfdd5.zip
add collision intersection function from raylib
-rw-r--r--include/rodeo.h1
-rw-r--r--include/rodeo/collision.h8
-rw-r--r--src/collision/rodeo_collision.c29
3 files changed, 38 insertions, 0 deletions
diff --git a/include/rodeo.h b/include/rodeo.h
index c49bd5e..a9dae49 100644
--- a/include/rodeo.h
+++ b/include/rodeo.h
@@ -6,6 +6,7 @@
#include "rodeo/log.h"
#include "rodeo/common.h"
#include "rodeo/audio.h"
+#include "rodeo/collision.h"
// -- external --
#include "stc/cstr.h"
diff --git a/include/rodeo/collision.h b/include/rodeo/collision.h
index 277b780..365522c 100644
--- a/include/rodeo/collision.h
+++ b/include/rodeo/collision.h
@@ -2,6 +2,7 @@
// -- internal --
// public
#include "rodeo/collision_t.h"
+#include "rodeo_types.h"
rodeo_collision_2d_world_t
rodeo_collision_2d_world_create(void);
@@ -50,3 +51,10 @@ rodeo_collision_2d_world_compare_other(
rodeo_collision_2d_world_item_t *b
)
);
+
+// from raylib GetCollisionRect
+rodeo_rectangle_t
+rodeo_collision_2d_get_collision_rect(
+ rodeo_collision_2d_world_item_t *a,
+ rodeo_collision_2d_world_item_t *b
+);
diff --git a/src/collision/rodeo_collision.c b/src/collision/rodeo_collision.c
index de2f9a3..b2a7388 100644
--- a/src/collision/rodeo_collision.c
+++ b/src/collision/rodeo_collision.c
@@ -122,3 +122,32 @@ int rodeo_collision_2d_item_cmp(
return a->id.id > b->id.id ? 1 : -1;
}
}
+
+// from raylib GetCollisionRect
+rodeo_rectangle_t
+rodeo_collision_2d_get_collision_rect(
+ rodeo_collision_2d_world_item_t *a,
+ rodeo_collision_2d_world_item_t *b
+)
+{
+ rodeo_rectangle_t overlap = { 0 };
+
+ float left = (a->x > b->x)? a->x : b->x;
+ float right1 = a->x + a->width;
+ float right2 = b->x + b->width;
+ float right = (right1 < right2)? right1 : right2;
+ float top = (a->y > b->y)? a->y : b->y;
+ float bottom1 = a->y + a->height;
+ float bottom2 = b->y + b->height;
+ float bottom = (bottom1 < bottom2)? bottom1 : bottom2;
+
+ if ((left < right) && (top < bottom))
+ {
+ overlap.x = left;
+ overlap.y = top;
+ overlap.width = right - left;
+ overlap.height = bottom - top;
+ }
+
+ return overlap;
+}