diff options
| author | arngo <[email protected]> | 2023-05-27 16:07:37 -0400 |
|---|---|---|
| committer | arngo <[email protected]> | 2023-05-27 16:07:37 -0400 |
| commit | 79cd0ac07a93fefbf59218ee77d44ea2501dfdd5 (patch) | |
| tree | ee2bcbfe73202c4b018ef7f7c2cc594eacdde9b0 | |
| parent | 68b5d45b66d948db337f50255fa777ce15ee0871 (diff) | |
| download | RodeoKit-79cd0ac07a93fefbf59218ee77d44ea2501dfdd5.tar.gz RodeoKit-79cd0ac07a93fefbf59218ee77d44ea2501dfdd5.zip | |
add collision intersection function from raylib
| -rw-r--r-- | include/rodeo.h | 1 | ||||
| -rw-r--r-- | include/rodeo/collision.h | 8 | ||||
| -rw-r--r-- | src/collision/rodeo_collision.c | 29 |
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; +} |
