summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorarngo <[email protected]>2022-01-23 02:09:42 -0500
committerarngo <[email protected]>2022-01-23 02:09:42 -0500
commit140faf8a4d0a86a848294da39ba7b504f073033f (patch)
tree15336e103a4a9eba51141ef41d77a7fdb688ac0a
parent49037d3ce6a171a3b1128c2bac6edea22f80d282 (diff)
downloadmruby-raylib-140faf8a4d0a86a848294da39ba7b504f073033f.tar.gz
mruby-raylib-140faf8a4d0a86a848294da39ba7b504f073033f.zip
bindings for DrawRectangleRec, DrawRectangleLinesEx, GetCollideRec under Rectangle class
-rw-r--r--mrblib/raylib.rb14
-rw-r--r--src/raylib.c71
2 files changed, 69 insertions, 16 deletions
diff --git a/mrblib/raylib.rb b/mrblib/raylib.rb
index e3c99cb..1b0dfda 100644
--- a/mrblib/raylib.rb
+++ b/mrblib/raylib.rb
@@ -1,6 +1,16 @@
Rl = Raylib
module Raylib
+ class Rectangle
+ def draw(color: Rl::Color.new(255,255,255,255))
+ self._draw(color)
+ end
+
+ def draw_lines(line_thick: 1, color: Rl::Color.new(255,255,255,255))
+ self._draw_lines(line_thick, color)
+ end
+ end
+
class Circle
attr_accessor :vector
attr_accessor :radius
@@ -60,8 +70,8 @@ module Raylib
self._draw_texture_ex(texture, pos, rotation, scale, tint)
end
- def draw_texture_pro(texture:, source_rect:, dest_rect:, origin: Rl::Vector.new(0,0), rotation: 0, tint: Rl::Color.new(255,255,255,255))
- self._draw_texture_pro(texture, source_rect, dest_rect, origin, rotation, tint)
+ def draw_texture_pro(texture:, source_rec:, dest_rec:, origin: Rl::Vector.new(0,0), rotation: 0, tint: Rl::Color.new(255,255,255,255))
+ self._draw_texture_pro(texture, source_rec, dest_rec, origin, rotation, tint)
end
def keys_pressed
diff --git a/src/raylib.c b/src/raylib.c
index 7158a3e..1008d4a 100644
--- a/src/raylib.c
+++ b/src/raylib.c
@@ -14,7 +14,7 @@ void execute_emscripten_block(void*);
#endif
void helper_texture_free(mrb_state*, void*);
-bool check_collision_circle_rec(mrb_state* mrb, mrb_value circle_obj, mrb_value rect_obj);
+bool check_collision_circle_rec(mrb_state* mrb, mrb_value circle_obj, mrb_value rec_obj);
static const struct mrb_data_type Color_type = {
"Color", mrb_free
@@ -291,19 +291,19 @@ static mrb_value
mrb_draw_texture_pro(mrb_state* mrb, mrb_value self) {
mrb_value texture_obj;
mrb_value pos_obj;
- mrb_value source_rect_obj;
- mrb_value dest_rect_obj;
+ mrb_value source_rec_obj;
+ mrb_value dest_rec_obj;
mrb_float rotation;
mrb_value tint_obj;
- mrb_get_args(mrb, "oooofo", &texture_obj, &source_rect_obj, &dest_rect_obj, &pos_obj, &rotation, &tint_obj);
+ mrb_get_args(mrb, "oooofo", &texture_obj, &source_rec_obj, &dest_rec_obj, &pos_obj, &rotation, &tint_obj);
Texture *texture_data = DATA_GET_PTR(mrb, texture_obj, &Texture_type, Texture);
Vector2 *pos_data = DATA_GET_PTR(mrb, pos_obj, &Vector2_type, Vector2);
- Rectangle *source_rect_data = DATA_GET_PTR(mrb, source_rect_obj, &Rectangle_type, Rectangle);
- Rectangle *dest_rect_data = DATA_GET_PTR(mrb, dest_rect_obj, &Rectangle_type, Rectangle);
+ Rectangle *source_rec_data = DATA_GET_PTR(mrb, source_rec_obj, &Rectangle_type, Rectangle);
+ Rectangle *dest_rec_data = DATA_GET_PTR(mrb, dest_rec_obj, &Rectangle_type, Rectangle);
Color *tint_data = DATA_GET_PTR(mrb, tint_obj, &Color_type, Color);
- DrawTexturePro(*texture_data, *source_rect_data, *dest_rect_data, *pos_data, rotation, *tint_data);
+ DrawTexturePro(*texture_data, *source_rec_data, *dest_rec_data, *pos_data, rotation, *tint_data);
return mrb_nil_value();
}
@@ -656,11 +656,11 @@ mrb_Rectangle_collide_with_rec(mrb_state* mrb, mrb_value self) {
}
bool
-check_collision_circle_rec(mrb_state* mrb, mrb_value circle_obj, mrb_value rect_obj) {
+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);
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);
+ Rectangle *rec = DATA_GET_PTR(mrb, rec_obj, &Rectangle_type, Rectangle);
return CheckCollisionCircleRec(*center, radius, *rec);
}
@@ -675,10 +675,49 @@ mrb_Rectangle_collide_with_circ(mrb_state* mrb, mrb_value self) {
static mrb_value
mrb_Circle_collide_with_rec(mrb_state* mrb, mrb_value self) {
- mrb_value rect_obj;
- mrb_get_args(mrb, "o", &rect_obj);
+ mrb_value rec_obj;
+ mrb_get_args(mrb, "o", &rec_obj);
- return mrb_bool_value(check_collision_circle_rec(mrb, self, rect_obj));
+ return mrb_bool_value(check_collision_circle_rec(mrb, self, rec_obj));
+}
+
+static mrb_value
+mrb_Rectangle_get_collision_rec(mrb_state* mrb, mrb_value self) {
+ mrb_value rec_obj;
+ mrb_value collision_rec_obj;
+ mrb_get_args(mrb, "o", &rec_obj);
+
+ Rectangle *rec_self = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle);
+ Rectangle *rec_other = DATA_GET_PTR(mrb, rec_obj, &Rectangle_type, Rectangle);
+ Rectangle collision_rec = GetCollisionRec(*rec_self, *rec_other);
+
+ mrb_data_init(collision_rec_obj, &collision_rec, &Rectangle_type);
+ return collision_rec_obj;
+}
+
+static mrb_value
+mrb_Rectangle_draw_rectangle_rec(mrb_state* mrb, mrb_value self) {
+ mrb_value color_obj;
+ mrb_get_args(mrb, "o", &color_obj);
+
+ Color *color = DATA_GET_PTR(mrb, color_obj, &Color_type, Color);
+ Rectangle *rec_self = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle);
+ DrawRectangleRec(*rec_self, *color);
+
+ return mrb_nil_value();
+}
+
+static mrb_value
+mrb_Rectangle_draw_rectangle_lines_ex(mrb_state* mrb, mrb_value self) {
+ mrb_value color_obj;
+ mrb_float line_thick;
+ mrb_get_args(mrb, "fo", &line_thick, &color_obj);
+
+ Color *color = DATA_GET_PTR(mrb, color_obj, &Color_type, Color);
+ Rectangle *rec_self = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle);
+ DrawRectangleLinesEx(*rec_self, line_thick, *color);
+
+ return mrb_nil_value();
}
void
@@ -771,11 +810,15 @@ mrb_mruby_raylib_gem_init(mrb_state* mrb) {
mrb_define_method(mrb, rectangle_class, "height=", mrb_Rectangle_set_height, MRB_ARGS_REQ(1));
mrb_define_method(mrb, rectangle_class, "h", mrb_Rectangle_get_height, MRB_ARGS_NONE());
mrb_define_method(mrb, rectangle_class, "h=", mrb_Rectangle_set_height, MRB_ARGS_REQ(1));
- mrb_define_method(mrb, rectangle_class, "collide_with_rect?", mrb_Rectangle_collide_with_rec, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, rectangle_class, "collision_rec", mrb_Rectangle_collide_with_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, "_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));
+
struct RClass *circle_class = mrb_define_class_under(mrb, raylib, "Circle", mrb->object_class);
//struct RClass *circle_class = mrb_class_get_under(mrb, raylib, "Circle");
- mrb_define_method(mrb, circle_class, "collide_with_rect?", mrb_Circle_collide_with_rec, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, circle_class, "collide_with_rec?", mrb_Circle_collide_with_rec, MRB_ARGS_REQ(1));
mrb_define_method(mrb, circle_class, "collide_with_circle?", mrb_Circle_collide_with_circ, MRB_ARGS_REQ(1));
#if defined(PLATFORM_WEB)