diff options
| author | realtradam <[email protected]> | 2022-02-09 09:54:43 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2022-02-09 09:54:43 -0500 |
| commit | 96580c44bff6b466188b0e71d974829228e2fa88 (patch) | |
| tree | debd5839be1919439b3097a0a2d446355b206d81 /src | |
| parent | aaed2a48f4565862aed1694e68105f1a06ebd3c8 (diff) | |
| download | mruby-raylib-96580c44bff6b466188b0e71d974829228e2fa88.tar.gz mruby-raylib-96580c44bff6b466188b0e71d974829228e2fa88.zip | |
started work on text drawing methods
Diffstat (limited to 'src')
| -rw-r--r-- | src/raylib.c | 2 | ||||
| -rw-r--r-- | src/text.c | 107 | ||||
| -rw-r--r-- | src/textures.c | 2 |
3 files changed, 110 insertions, 1 deletions
diff --git a/src/raylib.c b/src/raylib.c index 4869f14..c293a16 100644 --- a/src/raylib.c +++ b/src/raylib.c @@ -1,6 +1,7 @@ #include "mruby-raylib/types.h" #include "mruby-raylib/core.h" #include "mruby-raylib/textures.h" +#include "mruby-raylib/text.h" #include <raylib.h> #include <mruby/array.h> #include <mruby/class.h> @@ -811,6 +812,7 @@ void mrb_mruby_raylib_gem_init(mrb_state* mrb) { mrb_init_raylib_core(mrb); mrb_init_raylib_textures(mrb); + mrb_init_raylib_text(mrb); struct RClass *raylib = mrb_define_module(mrb, "Raylib"); mrb_define_module_function(mrb, raylib, "platform", mrb_platform, MRB_ARGS_NONE()); diff --git a/src/text.c b/src/text.c new file mode 100644 index 0000000..eb6133b --- /dev/null +++ b/src/text.c @@ -0,0 +1,107 @@ +/** + * @author : tradam (tradam@skyx4c-artix) + * @file : text + * @created : Wednesday Feb 09, 2022 07:30:48 EST + */ + +#include "mruby-raylib/text.h" +#include "mruby-raylib/types.h" +#include <raylib.h> + +//Font font, +//const char *text, +//Vector2 position, # replace with x/y? +//Vector2 origin, +//float rotation, +//float fontSize, +//float spacing, +//Color tint +static mrb_value +mrb_String_draw_text(mrb_state* mrb, mrb_value self) { + int x = 0; + int y = 0; + float rotation = 0; + float font_size = 10.0; + float spacing = 10.0; + Font default_font = GetFontDefault(); + + uint32_t kw_num = 8; + const mrb_sym kw_names[] = { + mrb_intern_lit(mrb, "font"), + mrb_intern_lit(mrb, "x"), + mrb_intern_lit(mrb, "y"), + mrb_intern_lit(mrb, "origin"), + mrb_intern_lit(mrb, "rotation"), + mrb_intern_lit(mrb, "font_size"), + mrb_intern_lit(mrb, "spacing"), + mrb_intern_lit(mrb, "color"), + }; + mrb_value kw_values[kw_num]; + const mrb_kwargs kwargs = { kw_num, 0, kw_names, kw_values, NULL }; + mrb_get_args(mrb, "|:", &kwargs); + + // x + if (!mrb_undef_p(kw_values[1])) { + x = mrb_as_int(mrb, kw_values[1]); + } + + // y + if (!mrb_undef_p(kw_values[2])) { + y = mrb_as_int(mrb, kw_values[2]); + } + + // origin + if (mrb_undef_p(kw_values[3])) { + struct RClass *raylib = mrb_module_get(mrb, "Raylib"); + struct RClass *vector2 = mrb_class_get_under(mrb, raylib, Vector2_type.struct_name); + kw_values[3] = mrb_funcall(mrb, mrb_obj_value(vector2), "default", 0); + } + + // rotation + if (!mrb_undef_p(kw_values[4])) { + rotation = mrb_as_float(mrb, kw_values[4]) / 0.017453; + } + + // font_size + if (!mrb_undef_p(kw_values[5])) { + font_size = mrb_as_float(mrb, kw_values[5]); + } + + // spacing + if (!mrb_undef_p(kw_values[5])) { + spacing = mrb_as_float(mrb, kw_values[5]); + } else { + spacing = font_size/10.0; + } + + // color + if (mrb_undef_p(kw_values[6])) { + struct RClass *raylib = mrb_module_get(mrb, "Raylib"); + struct RClass *color = mrb_class_get_under(mrb, raylib, Color_type.struct_name); + kw_values[6] = mrb_funcall(mrb, mrb_obj_value(color), "black", 0); + } + + Color *tint_data; + UNWRAPSTRUCT(Color, Color_type, kw_values[6], tint_data); + + Vector2 *vector2_data; + UNWRAPSTRUCT(Vector2, Vector2_type, kw_values[3], vector2_data); + + Vector2 position = { x, y }; + + printf("TEST: "); + printf(mrb_str_to_cstr(mrb, self)); + DrawTextPro(default_font, mrb_str_to_cstr(mrb, self), position, *vector2_data, rotation, font_size, spacing, *tint_data); + DrawText(x, y, mrb_str_to_cstr(mrb, self), font_size, *tint_data); + + return mrb_nil_value(); +} + +void +mrb_init_raylib_text(mrb_state* mrb) { + //struct RClass *string_class = mrb->string_class;//mrb_define_class(mrb, "String"); // built in string class + struct RClass *raylib = mrb_define_module(mrb, "Raylib"); + struct RClass *font_class = mrb_define_class_under(mrb, raylib, "Font", mrb->object_class); + mrb_define_method(mrb, mrb->string_class, "draw", mrb_String_draw_text, MRB_ARGS_OPT(1)); +} + diff --git a/src/textures.c b/src/textures.c index 4126c21..3a0b4bc 100644 --- a/src/textures.c +++ b/src/textures.c @@ -152,7 +152,7 @@ mrb_Texture_draw_texture(mrb_state* mrb, mrb_value self) { UNWRAPSTRUCT(Texture, Texture_type, self, texture_data); //mrb_value tint_obj = mrb_funcall(mrb, mrb_obj_value(color), "white", 0); //Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint - uint32_t kw_num = 7; + uint32_t kw_num = 5; const mrb_sym kw_names[] = { mrb_intern_lit(mrb, "source"), mrb_intern_lit(mrb, "dest"), |
