summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2022-02-09 09:54:43 -0500
committerrealtradam <[email protected]>2022-02-09 09:54:43 -0500
commit96580c44bff6b466188b0e71d974829228e2fa88 (patch)
treedebd5839be1919439b3097a0a2d446355b206d81
parentaaed2a48f4565862aed1694e68105f1a06ebd3c8 (diff)
downloadmruby-raylib-96580c44bff6b466188b0e71d974829228e2fa88.tar.gz
mruby-raylib-96580c44bff6b466188b0e71d974829228e2fa88.zip
started work on text drawing methods
-rw-r--r--include/mruby-raylib/text.h14
-rw-r--r--mrblib/core.rb3
-rw-r--r--src/raylib.c2
-rw-r--r--src/text.c107
-rw-r--r--src/textures.c2
5 files changed, 127 insertions, 1 deletions
diff --git a/include/mruby-raylib/text.h b/include/mruby-raylib/text.h
new file mode 100644
index 0000000..0464a30
--- /dev/null
+++ b/include/mruby-raylib/text.h
@@ -0,0 +1,14 @@
+#ifndef MRUBY_RAYLIB_TEXT_H
+#define MRUBY_RAYLIB_TEXT_H
+#include "mruby-raylib/types.h"
+#include <raylib.h>
+#include <mruby/string.h>
+#include <mruby/numeric.h>
+#include <stdlib.h>
+
+
+
+void mrb_init_raylib_text(mrb_state*);
+
+#endif /* end of include guard TEXT_H */
+
diff --git a/mrblib/core.rb b/mrblib/core.rb
index 3b64622..21960c0 100644
--- a/mrblib/core.rb
+++ b/mrblib/core.rb
@@ -1,6 +1,9 @@
module Raylib
class Vector2
class << self
+ # A vector initialized to (0,0). Useful when dont care about the vector
+ # value but you still need to pass it into a function/method and dont want
+ # to initialize a new one many times.
def default
@default ||= self.new(0, 0)
end
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"),