diff options
| author | arngo <[email protected]> | 2022-01-15 18:49:26 -0500 |
|---|---|---|
| committer | arngo <[email protected]> | 2022-01-15 18:49:26 -0500 |
| commit | 34e315e6edb9fca2c86df44b1ce071726000245d (patch) | |
| tree | ac2ec9173e85855a04fed64f66de52f8e663ed9d | |
| parent | d8c7c6d3faac6c3cdbe5badbb1740fee4163ce15 (diff) | |
| download | mruby-raylib-34e315e6edb9fca2c86df44b1ce071726000245d.tar.gz mruby-raylib-34e315e6edb9fca2c86df44b1ce071726000245d.zip | |
implement main loop
| -rw-r--r-- | mrblib/raylib.rb | 14 | ||||
| -rw-r--r-- | src/raylib.c | 33 |
2 files changed, 46 insertions, 1 deletions
diff --git a/mrblib/raylib.rb b/mrblib/raylib.rb new file mode 100644 index 0000000..53dc28f --- /dev/null +++ b/mrblib/raylib.rb @@ -0,0 +1,14 @@ +class Raylib + class << self + attr_accessor :main_loop + + #def call_main_loop + # self.main_loop.call + #end + + def window_open(&block) + self.main_loop = block + self.execute_main_loop + end + end +end 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 |
