diff options
| author | arngo <[email protected]> | 2022-01-29 01:53:26 -0500 |
|---|---|---|
| committer | arngo <[email protected]> | 2022-01-29 01:53:26 -0500 |
| commit | afc1e3c663dc5fb2c3889608c2c2fef870ba428b (patch) | |
| tree | 44b0d87d18c565bf063c55b18cf0f9b91f180368 /src/raylib.c | |
| parent | 1dd435f0413e84d3779ab87fea0b691aa71832db (diff) | |
| download | mruby-raylib-afc1e3c663dc5fb2c3889608c2c2fef870ba428b.tar.gz mruby-raylib-afc1e3c663dc5fb2c3889608c2c2fef870ba428b.zip | |
mouse position, rect collide with point
Diffstat (limited to 'src/raylib.c')
| -rw-r--r-- | src/raylib.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/raylib.c b/src/raylib.c index 37d8d87..1385307 100644 --- a/src/raylib.c +++ b/src/raylib.c @@ -763,6 +763,15 @@ mrb_get_mouse_y(mrb_state* mrb, mrb_value self) { } static mrb_value +mrb_get_mouse_position(mrb_state* mrb, mrb_value self) { + Vector2 *pos = (Vector2 *)mrb_malloc(mrb, sizeof(Vector2)); + *pos = GetMousePosition(); + struct RClass *c = mrb_module_get(mrb, "Raylib"); + struct RClass *vec_class = mrb_class_get_under(mrb, c, Vector2_type.struct_name); + return mrb_obj_value(Data_Wrap_Struct(mrb, vec_class, &Vector2_type, pos)); +} + +static mrb_value mrb_get_mouse_wheel_move(mrb_state* mrb, mrb_value self) { return mrb_float_value(mrb, GetMouseWheelMove()); } @@ -927,6 +936,16 @@ mrb_Rectangle_collide_with_rec(mrb_state* mrb, mrb_value self) { return mrb_bool_value(CheckCollisionRecs(*rec1, *rec2)); } +static mrb_value +mrb_Rectangle_collide_with_point(mrb_state* mrb, mrb_value self) { + mrb_value vec_obj; + mrb_get_args(mrb, "o", &vec_obj); + Vector2 *point = DATA_GET_PTR(mrb, vec_obj, &Vector2_type, Vector2); + Rectangle *rec_self = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle); + + return mrb_bool_value(CheckCollisionPointRec(*point, *rec_self)); +} + bool check_collision_circle_rec(mrb_state* mrb, mrb_value circle_obj, mrb_value rec_obj) { mrb_value vector_obj = mrb_funcall(mrb, circle_obj, "vector", 0); @@ -1022,6 +1041,7 @@ mrb_mruby_raylib_gem_init(mrb_state* mrb) { mrb_define_class_method(mrb, raylib, "_next_key_pressed", mrb_get_key_pressed, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "mouse_x", mrb_get_mouse_x, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "mouse_y", mrb_get_mouse_y, MRB_ARGS_NONE()); + mrb_define_class_method(mrb, raylib, "mouse_position", mrb_get_mouse_position, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "mouse_wheel", mrb_get_mouse_wheel_move, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "begin_scissor_mode", mrb_begin_scissor_mode, MRB_ARGS_REQ(4)); mrb_define_class_method(mrb, raylib, "end_scissor_mode", mrb_end_scissor_mode, MRB_ARGS_NONE()); @@ -1111,6 +1131,7 @@ mrb_mruby_raylib_gem_init(mrb_state* mrb) { mrb_define_method(mrb, rectangle_class, "collision_rec", mrb_Rectangle_get_collision_rec, MRB_ARGS_REQ(1)); mrb_define_method(mrb, rectangle_class, "collide_with_rec?", mrb_Rectangle_collide_with_rec, MRB_ARGS_REQ(1)); mrb_define_method(mrb, rectangle_class, "collide_with_circle?", mrb_Rectangle_collide_with_circ, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, rectangle_class, "collide_with_point?", mrb_Rectangle_collide_with_point, MRB_ARGS_REQ(1)); mrb_define_method(mrb, rectangle_class, "_draw", mrb_Rectangle_draw_rectangle_rec, MRB_ARGS_REQ(1)); mrb_define_method(mrb, rectangle_class, "_draw_lines", mrb_Rectangle_draw_rectangle_lines_ex, MRB_ARGS_REQ(2)); |
