diff options
| author | arngo <[email protected]> | 2022-01-21 14:26:23 -0500 |
|---|---|---|
| committer | arngo <[email protected]> | 2022-01-21 14:26:23 -0500 |
| commit | 6a2ff66cf4490b81b1a76f4951ded5945222df38 (patch) | |
| tree | aef76b4000d1a7b8caa4c7d77660c113c5717f87 /src | |
| parent | 7eb05dc1694279ea3e3a7fcdca67ef1a3380cb44 (diff) | |
| download | mruby-raylib-6a2ff66cf4490b81b1a76f4951ded5945222df38.tar.gz mruby-raylib-6a2ff66cf4490b81b1a76f4951ded5945222df38.zip | |
helper function for circ-rect collision functions
Diffstat (limited to 'src')
| -rw-r--r-- | src/raylib.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/raylib.c b/src/raylib.c index c66a303..63239fe 100644 --- a/src/raylib.c +++ b/src/raylib.c @@ -13,6 +13,8 @@ void execute_emscripten_block(void*); #endif +bool check_collision_circle_rec(mrb_state* mrb, mrb_value circle_obj, mrb_value rect_obj); + static const struct mrb_data_type Color_type = { "Color", mrb_free }; @@ -601,17 +603,22 @@ mrb_Rectangle_collide_with_rec(mrb_state* mrb, mrb_value self) { return mrb_bool_value(CheckCollisionRecs(*rec1, *rec2)); } +bool +check_collision_circle_rec(mrb_state* mrb, mrb_value circle_obj, mrb_value rect_obj) { + mrb_value vector_obj = mrb_funcall(mrb, circle_obj, "vector", 0); + mrb_float radius = mrb_as_float(mrb, mrb_funcall(mrb, circle_obj, "radius", 0)); + Vector2 *center = DATA_GET_PTR(mrb, vector_obj, &Vector2_type, Vector2); + Rectangle *rec = DATA_GET_PTR(mrb, rect_obj, &Rectangle_type, Rectangle); + + return CheckCollisionCircleRec(*center, radius, *rec); +} + static mrb_value mrb_Rectangle_collide_with_circ(mrb_state* mrb, mrb_value self) { mrb_value circle_obj; mrb_get_args(mrb, "o", &circle_obj); - mrb_value vector_obj = mrb_funcall(mrb, circle_obj, "vector", 0); - mrb_float radius = mrb_as_float(mrb, mrb_funcall(mrb, circle_obj, "radius", 0)); - Rectangle *rec = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle); - Vector2 *center = DATA_GET_PTR(mrb, vector_obj, &Vector2_type, Vector2); - - return mrb_bool_value(CheckCollisionCircleRec(*center, radius, *rec)); + return mrb_bool_value(check_collision_circle_rec(mrb, circle_obj, self)); } static mrb_value @@ -619,12 +626,7 @@ mrb_Circle_collide_with_rec(mrb_state* mrb, mrb_value self) { mrb_value rect_obj; mrb_get_args(mrb, "o", &rect_obj); - mrb_value vector_obj = mrb_funcall(mrb, self, "vector", 0); - mrb_float radius = mrb_as_float(mrb, mrb_funcall(mrb, self, "radius", 0)); - Rectangle *rec = DATA_GET_PTR(mrb, rect_obj, &Rectangle_type, Rectangle); - Vector2 *center = DATA_GET_PTR(mrb, vector_obj, &Vector2_type, Vector2); - - return mrb_bool_value(CheckCollisionCircleRec(*center, radius, *rec)); + return mrb_bool_value(check_collision_circle_rec(mrb, self, rect_obj)); } void |
