summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorarngo <[email protected]>2022-01-15 18:49:26 -0500
committerarngo <[email protected]>2022-01-15 18:49:26 -0500
commit34e315e6edb9fca2c86df44b1ce071726000245d (patch)
treeac2ec9173e85855a04fed64f66de52f8e663ed9d /src
parentd8c7c6d3faac6c3cdbe5badbb1740fee4163ce15 (diff)
downloadmruby-raylib-34e315e6edb9fca2c86df44b1ce071726000245d.tar.gz
mruby-raylib-34e315e6edb9fca2c86df44b1ce071726000245d.zip
implement main loop
Diffstat (limited to 'src')
-rw-r--r--src/raylib.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/raylib.c b/src/raylib.c
index bd9e6da..f2fef48 100644
--- a/src/raylib.c
+++ b/src/raylib.c
@@ -5,6 +5,8 @@
#include <emscripten/emscripten.h>
#endif
+void call_main_loop();
+
static mrb_value
mrb_init_window(mrb_state *mrb, mrb_value self)
{
@@ -64,7 +66,7 @@ mrb_end_drawing(mrb_state *mrb, mrb_value self)
return mrb_nil_value();
}
- static mrb_value
+ static mrb_value
mrb_clear_background(mrb_state *mrb, mrb_value self)
{
ClearBackground(RAYWHITE);
@@ -72,6 +74,34 @@ mrb_clear_background(mrb_state *mrb, mrb_value self)
}
void
+call_main_loop()
+{
+ mrb_state *mrb = mrb_open();
+ if (!mrb) {}
+ struct RClass *c = mrb_class_get(mrb, "Raylib");
+ mrb_funcall(mrb, mrb_obj_value(c), "main_loop.call", 0);
+}
+
+ static mrb_value
+mrb_execute_main_loop(mrb_state *mrb, mrb_value self)
+{
+#if defined(PLATFORM_WEB)
+ emscripten_set_main_loop(call_main_loop, 0, 1);
+#else
+ SetTargetFPS(60); // Set our game to run at 60 frames-per-second
+ //--------------------------------------------------------------------------------------
+
+ // Main game loop
+ while (!WindowShouldClose()) // Detect window close button or ESC key
+ {
+ call_main_loop();
+ }
+#endif
+ return mrb_nil_value();
+}
+
+
+void
mrb_mruby_raylib_gem_init(mrb_state* mrb) {
struct RClass *raylib = mrb_define_module(mrb, "Raylib");
mrb_define_class_method(mrb, raylib, "init_window", mrb_init_window, MRB_ARGS_REQ(3));
@@ -80,6 +110,7 @@ mrb_mruby_raylib_gem_init(mrb_state* mrb) {
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, "execute_main_loop", mrb_execute_main_loop, MRB_ARGS_NONE());
}
void