diff options
| author | realtradam <[email protected]> | 2022-01-20 02:23:23 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2022-01-20 02:23:23 -0500 |
| commit | ced40dd6205b6c74101dc97d3f932870e7cb231b (patch) | |
| tree | 07ea4f476087134db6cf0f9a5a5eb2a24ec5c980 | |
| parent | 3e7084f7ec4f00fda1b2f63219b8ba94ca57dc04 (diff) | |
| download | mruby-raylib-ced40dd6205b6c74101dc97d3f932870e7cb231b.tar.gz mruby-raylib-ced40dd6205b6c74101dc97d3f932870e7cb231b.zip | |
texture rendering
| -rw-r--r-- | mrblib/raylib.rb | 4 | ||||
| -rw-r--r-- | src/raylib.c | 52 |
2 files changed, 53 insertions, 3 deletions
diff --git a/mrblib/raylib.rb b/mrblib/raylib.rb index fb45ad8..7c8f6c2 100644 --- a/mrblib/raylib.rb +++ b/mrblib/raylib.rb @@ -19,5 +19,9 @@ module Raylib def draw_text(text:, x:, y:, font_size:, color:) self._draw_text(text, x, y, font_size, color) end + + def draw_texture(texture:, x:, y:, tint: Rl::Color.new(255,255,255,255)) + self._draw_texture(texture, x, y, tint) + end end end diff --git a/src/raylib.c b/src/raylib.c index 777fafe..4a3eece 100644 --- a/src/raylib.c +++ b/src/raylib.c @@ -16,6 +16,45 @@ static const struct mrb_data_type Color_type = { "Color", mrb_free }; +static const struct mrb_data_type Texture_type = { + "Texture", mrb_free +}; + +static mrb_value +mrb_Texture_initialize(mrb_state* mrb, mrb_value self) { + char* path = NULL; + mrb_get_args(mrb, "z", &path); + + struct Texture *texture = (struct Texture *)DATA_PTR(self); + if(texture) { mrb_free(mrb, texture); } + mrb_data_init(self, NULL, &Texture_type); + texture = (struct Texture *)mrb_malloc(mrb, sizeof(struct Texture)); + + *texture = LoadTexture(path); + + mrb_data_init(self, texture, &Texture_type); + return self; +} + +static mrb_value +mrb_draw_texture(mrb_state* mrb, mrb_value self) { + mrb_value texture; + mrb_int x; + mrb_int y; + mrb_value color; + mrb_get_args(mrb, "oiio", &texture, &x, &y, &color); + + Texture *texture_data = DATA_GET_PTR(mrb, texture, &Texture_type, Texture); + struct Color *color_data; + color_data = DATA_GET_PTR(mrb, color, &Color_type, Color); + + DrawTexture(*texture_data, x, y, *color_data); + + return mrb_nil_value(); +} + + + static mrb_value mrb_Color_initialize(mrb_state* mrb, mrb_value self) { mrb_int r = 255; @@ -222,9 +261,6 @@ mrb_time(mrb_state* mrb, mrb_value self) { void mrb_mruby_raylib_gem_init(mrb_state* mrb) { struct RClass *raylib = mrb_define_module(mrb, "Raylib"); - //struct RClass *color_class = mrb_define_class(mrb, "Color", mrb->object_class); - struct RClass *color_class = mrb_define_class_under(mrb, raylib, "Color", mrb->object_class); - MRB_SET_INSTANCE_TT(color_class, MRB_TT_DATA); mrb_define_class_method(mrb, raylib, "init_window", mrb_init_window, MRB_ARGS_REQ(3)); mrb_define_class_method(mrb, raylib, "platform", mrb_platform, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "_draw_text", mrb_draw_text, MRB_ARGS_REQ(5)); @@ -237,6 +273,10 @@ mrb_mruby_raylib_gem_init(mrb_state* mrb) { mrb_define_class_method(mrb, raylib, "fps", mrb_fps, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "frame_time", mrb_frame_time, MRB_ARGS_NONE()); mrb_define_class_method(mrb, raylib, "time", mrb_time, MRB_ARGS_NONE()); + mrb_define_class_method(mrb, raylib, "_draw_texture", mrb_draw_texture, MRB_ARGS_REQ(4)); + + struct RClass *color_class = mrb_define_class_under(mrb, raylib, "Color", mrb->object_class); + MRB_SET_INSTANCE_TT(color_class, MRB_TT_DATA); mrb_define_method(mrb, color_class, "initialize", mrb_Color_initialize, MRB_ARGS_REQ(4)); mrb_define_method(mrb, color_class, "r", mrb_Color_get_red, MRB_ARGS_NONE()); mrb_define_method(mrb, color_class, "r=", mrb_Color_set_red, MRB_ARGS_REQ(1)); @@ -246,6 +286,12 @@ mrb_mruby_raylib_gem_init(mrb_state* mrb) { mrb_define_method(mrb, color_class, "b=", mrb_Color_set_blue, MRB_ARGS_REQ(1)); mrb_define_method(mrb, color_class, "a", mrb_Color_get_alpha, MRB_ARGS_NONE()); mrb_define_method(mrb, color_class, "a=", mrb_Color_set_alpha, MRB_ARGS_REQ(1)); + + + struct RClass *texture_class = mrb_define_class_under(mrb, raylib, "Texture", mrb->object_class); + MRB_SET_INSTANCE_TT(texture_class, MRB_TT_DATA); + mrb_define_method(mrb, texture_class, "initialize", mrb_Texture_initialize, 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()); #endif |
