diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/raylib.c | 178 |
1 files changed, 118 insertions, 60 deletions
diff --git a/src/raylib.c b/src/raylib.c index 0396e42..c66a303 100644 --- a/src/raylib.c +++ b/src/raylib.c @@ -31,10 +31,10 @@ static const struct mrb_data_type Rectangle_type = { static mrb_value mrb_Rectangle_initialize(mrb_state* mrb, mrb_value self) { - mrb_float x = 0.0; - mrb_float y = 0.0; - mrb_float w = 10.0; - mrb_float h = 10.0; + mrb_float x = 0.0; + mrb_float y = 0.0; + mrb_float w = 10.0; + mrb_float h = 10.0; mrb_get_args(mrb, "|ffff", &x, &y, &w, &h); Rectangle *rectangle = (Rectangle *)DATA_PTR(self); @@ -62,7 +62,7 @@ mrb_Rectangle_set_x(mrb_state* mrb, mrb_value self) { Rectangle *rect = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle); mrb_float x; mrb_get_args(mrb, "f", &x); - rect->x = x; + rect->x = x; return mrb_fixnum_value(rect->x); } @@ -77,7 +77,7 @@ mrb_Rectangle_set_y(mrb_state* mrb, mrb_value self) { Rectangle *rect = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle); mrb_float y; mrb_get_args(mrb, "f", &y); - rect->x = y; + rect->x = y; return mrb_fixnum_value(rect->y); } @@ -92,7 +92,7 @@ mrb_Rectangle_set_width(mrb_state* mrb, mrb_value self) { Rectangle *rect = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle); mrb_float width; mrb_get_args(mrb, "f", &width); - rect->x = width; + rect->x = width; return mrb_fixnum_value(rect->width); } @@ -101,7 +101,7 @@ mrb_Rectangle_set_height(mrb_state* mrb, mrb_value self) { Rectangle *rect = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle); mrb_float height; mrb_get_args(mrb, "f", &height); - rect->x = height; + rect->x = height; return mrb_fixnum_value(rect->height); } @@ -113,8 +113,8 @@ mrb_Rectangle_get_height(mrb_state* mrb, mrb_value self) { static mrb_value mrb_Vector2_initialize(mrb_state* mrb, mrb_value self) { - mrb_float x = 1.0; - mrb_float y = 1.0; + mrb_float x = 1.0; + mrb_float y = 1.0; mrb_get_args(mrb, "|ff", &x, &y); Vector2 *vector2 = (Vector2 *)DATA_PTR(self); @@ -140,7 +140,7 @@ mrb_Vector2_set_x(mrb_state* mrb, mrb_value self) { Vector2 *vec2 = DATA_GET_PTR(mrb, self, &Vector2_type, Vector2); mrb_float x; mrb_get_args(mrb, "f", &x); - vec2->x = x; + vec2->x = x; return mrb_fixnum_value(vec2->x); } @@ -155,7 +155,7 @@ mrb_Vector2_set_y(mrb_state* mrb, mrb_value self) { Vector2 *vec2 = DATA_GET_PTR(mrb, self, &Vector2_type, Vector2); mrb_float y; mrb_get_args(mrb, "f", &y); - vec2->y = y; + vec2->y = y; return mrb_fixnum_value(vec2->y); } @@ -186,7 +186,7 @@ mrb_Texture_set_width(mrb_state* mrb, mrb_value self) { Texture *texture = DATA_GET_PTR(mrb, self, &Texture_type, Texture); mrb_int width; mrb_get_args(mrb, "i", &width); - texture->width = width; + texture->width = width; return mrb_fixnum_value(texture->width); } @@ -201,7 +201,7 @@ mrb_Texture_set_height(mrb_state* mrb, mrb_value self) { Texture *texture = DATA_GET_PTR(mrb, self, &Texture_type, Texture); mrb_int height; mrb_get_args(mrb, "i", &height); - texture->height = height; + texture->height = height; return mrb_fixnum_value(texture->height); } @@ -243,13 +243,13 @@ static mrb_value mrb_draw_texture_ex(mrb_state* mrb, mrb_value self) { mrb_value texture_obj; mrb_value pos_obj; - mrb_float rotation; - mrb_float scale; - mrb_value tint_obj; + mrb_float rotation; + mrb_float scale; + mrb_value tint_obj; mrb_get_args(mrb, "ooffo", &texture_obj, &pos_obj, &rotation, &scale, &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); + Vector2 *pos_data = DATA_GET_PTR(mrb, pos_obj, &Vector2_type, Vector2); Color *tint_data = DATA_GET_PTR(mrb, tint_obj, &Color_type, Color); DrawTextureEx(*texture_data, *pos_data, rotation, scale, *tint_data); @@ -263,14 +263,14 @@ mrb_draw_texture_pro(mrb_state* mrb, mrb_value self) { mrb_value pos_obj; mrb_value source_rect_obj; mrb_value dest_rect_obj; - mrb_float rotation; - mrb_value tint_obj; + mrb_float rotation; + mrb_value tint_obj; mrb_get_args(mrb, "oooofo", &texture_obj, &pos_obj, &source_rect_obj, &dest_rect_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); + 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); 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); @@ -279,6 +279,24 @@ mrb_draw_texture_pro(mrb_state* mrb, mrb_value self) { } static mrb_value +mrb_begin_scissor_mode(mrb_state* mrb, mrb_value self) { + mrb_int x; + mrb_int y; + mrb_int width; + mrb_int height; + mrb_get_args(mrb, "iiii", &x, &y, &width, &height); + + BeginScissorMode(x, y, width, height); + return mrb_nil_value(); +} + +static mrb_value +mrb_end_scissor_mode(mrb_state* mrb, mrb_value self) { + EndScissorMode(); + return mrb_nil_value(); +} + +static mrb_value mrb_Color_initialize(mrb_state* mrb, mrb_value self) { mrb_int r = 255; mrb_int g = 0; @@ -366,6 +384,38 @@ mrb_Color_set_alpha(mrb_state* mrb, mrb_value self) { } static mrb_value +mrb_is_mouse_button_pressed(mrb_state* mrb, mrb_value self) { + mrb_int button; + mrb_get_args(mrb, "i", &button); + + return mrb_bool_value(IsMouseButtonPressed(button)); +} + +static mrb_value +mrb_is_mouse_button_down(mrb_state* mrb, mrb_value self) { + mrb_int button; + mrb_get_args(mrb, "i", &button); + + return mrb_bool_value(IsMouseButtonDown(button)); +} + +static mrb_value +mrb_is_mouse_button_released(mrb_state* mrb, mrb_value self) { + mrb_int button; + mrb_get_args(mrb, "i", &button); + + return mrb_bool_value(IsMouseButtonReleased(button)); +} + +static mrb_value +mrb_is_mouse_button_up(mrb_state* mrb, mrb_value self) { + mrb_int button; + mrb_get_args(mrb, "i", &button); + + return mrb_bool_value(IsMouseButtonUp(button)); +} + +static mrb_value mrb_is_key_pressed(mrb_state* mrb, mrb_value self) { mrb_int key; mrb_get_args(mrb, "i", &key); @@ -450,7 +500,7 @@ mrb_draw_text(mrb_state* mrb, mrb_value self) { mrb_get_args(mrb, "|ziiio", &text, &x, &y, &fontSize, &color_obj); - Color *color = DATA_GET_PTR(mrb, color_obj, &Color_type, Color); + Color *color = DATA_GET_PTR(mrb, color_obj, &Color_type, Color); DrawText(text, x, y, fontSize, *color); return mrb_nil_value(); } @@ -469,7 +519,10 @@ mrb_end_drawing(mrb_state* mrb, mrb_value self) { static mrb_value mrb_clear_background(mrb_state* mrb, mrb_value self) { - ClearBackground(RAYWHITE); + mrb_value color_obj; + mrb_get_args(mrb, "o", &color_obj); + Color *color_data = DATA_GET_PTR(mrb, color_obj, &Color_type, Color); + ClearBackground(*color_data); return mrb_nil_value(); } @@ -525,16 +578,16 @@ static mrb_value mrb_Circle_collide_with_circ(mrb_state* mrb, mrb_value self) { mrb_value circle_obj; mrb_get_args(mrb, "o", &circle_obj); - - mrb_value vector_obj1 = mrb_funcall(mrb, self, "vector", 0); - Vector2 *center1 = DATA_GET_PTR(mrb, vector_obj1, &Vector2_type, Vector2); - mrb_float radius1 = mrb_as_float(mrb, mrb_funcall(mrb, self, "radius", 0)); - mrb_value vector_obj2 = mrb_funcall(mrb, circle_obj, "vector", 0); - Vector2 *center2 = DATA_GET_PTR(mrb, vector_obj2, &Vector2_type, Vector2); - mrb_float radius2 = mrb_as_float(mrb, mrb_funcall(mrb, circle_obj, "radius", 0)); + mrb_value vector_obj1 = mrb_funcall(mrb, self, "vector", 0); + Vector2 *center1 = DATA_GET_PTR(mrb, vector_obj1, &Vector2_type, Vector2); + mrb_float radius1 = mrb_as_float(mrb, mrb_funcall(mrb, self, "radius", 0)); - return mrb_bool_value(CheckCollisionCircles(*center1, radius1, *center2, radius2)); + mrb_value vector_obj2 = mrb_funcall(mrb, circle_obj, "vector", 0); + Vector2 *center2 = DATA_GET_PTR(mrb, vector_obj2, &Vector2_type, Vector2); + mrb_float radius2 = mrb_as_float(mrb, mrb_funcall(mrb, circle_obj, "radius", 0)); + + return mrb_bool_value(CheckCollisionCircles(*center1, radius1, *center2, radius2)); } static mrb_value @@ -542,36 +595,36 @@ mrb_Rectangle_collide_with_rec(mrb_state* mrb, mrb_value self) { mrb_value rec1_obj; mrb_get_args(mrb, "o", &rec1_obj); - Rectangle *rec1 = DATA_GET_PTR(mrb, rec1_obj, &Rectangle_type, Rectangle); - Rectangle *rec2 = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle); + Rectangle *rec1 = DATA_GET_PTR(mrb, rec1_obj, &Rectangle_type, Rectangle); + Rectangle *rec2 = DATA_GET_PTR(mrb, self, &Rectangle_type, Rectangle); - return mrb_bool_value(CheckCollisionRecs(*rec1, *rec2)); + return mrb_bool_value(CheckCollisionRecs(*rec1, *rec2)); } 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)); + 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)); } 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 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)); + 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)); } void @@ -582,7 +635,7 @@ mrb_mruby_raylib_gem_init(mrb_state* mrb) { mrb_define_class_method(mrb, raylib, "_draw_text", mrb_draw_text, MRB_ARGS_REQ(5)); mrb_define_class_method(mrb, raylib, "begin_drawing", mrb_begin_drawing, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "end_drawing", mrb_end_drawing, MRB_ARGS_NONE()); - mrb_define_class_method(mrb, raylib, "clear_background", mrb_clear_background, MRB_ARGS_NONE()); + mrb_define_class_method(mrb, raylib, "clear_background", mrb_clear_background, MRB_ARGS_REQ(1)); mrb_define_class_method(mrb, raylib, "call_main_loop", mrb_call_main_loop, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "window_should_close?", mrb_window_should_close, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "target_fps=", mrb_target_fps, MRB_ARGS_REQ(1)); @@ -592,14 +645,20 @@ mrb_mruby_raylib_gem_init(mrb_state* mrb) { mrb_define_class_method(mrb, raylib, "_draw_texture", mrb_draw_texture, MRB_ARGS_REQ(4)); mrb_define_class_method(mrb, raylib, "_draw_texture_ex", mrb_draw_texture_ex, MRB_ARGS_REQ(5)); mrb_define_class_method(mrb, raylib, "_draw_texture_pro", mrb_draw_texture_pro, MRB_ARGS_REQ(6)); - mrb_define_class_method(mrb, raylib, "is_key_pressed?", mrb_is_key_pressed, MRB_ARGS_REQ(1)); - mrb_define_class_method(mrb, raylib, "is_key_down?", mrb_is_key_down, MRB_ARGS_REQ(1)); - mrb_define_class_method(mrb, raylib, "is_key_released?", mrb_is_key_released, MRB_ARGS_REQ(1)); - mrb_define_class_method(mrb, raylib, "is_key_up?", mrb_is_key_up, MRB_ARGS_REQ(1)); - mrb_define_class_method(mrb, raylib, "_key_pressed", mrb_get_key_pressed, MRB_ARGS_NONE()); + mrb_define_class_method(mrb, raylib, "mouse_button_pressed?", mrb_is_mouse_button_pressed, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, raylib, "mouse_button_down?", mrb_is_mouse_button_down, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, raylib, "mouse_button_released?", mrb_is_mouse_button_released, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, raylib, "mouse_button_up?", mrb_is_mouse_button_up, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, raylib, "key_pressed?", mrb_is_key_pressed, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, raylib, "key_down?", mrb_is_key_down, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, raylib, "key_released?", mrb_is_key_released, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, raylib, "key_up?", mrb_is_key_up, MRB_ARGS_REQ(1)); + 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_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()); struct RClass *color_class = mrb_define_class_under(mrb, raylib, "Color", mrb->object_class); MRB_SET_INSTANCE_TT(color_class, MRB_TT_DATA); @@ -651,13 +710,12 @@ 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, "collide_with_circle?", mrb_Rectangle_collide_with_circ, 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, "collide_with_circle?", mrb_Rectangle_collide_with_circ, MRB_ARGS_REQ(1)); 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_circle?", mrb_Circle_collide_with_circ, MRB_ARGS_REQ(1)); + //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_circle?", mrb_Circle_collide_with_circ, MRB_ARGS_REQ(1)); #if defined(PLATFORM_WEB) mrb_define_class_method(mrb, raylib, "emscripten_set_main_loop", mrb_emscripten_set_main_loop, MRB_ARGS_NONE()); |
