From 34e315e6edb9fca2c86df44b1ce071726000245d Mon Sep 17 00:00:00 2001 From: arngo <27396817+arngo@users.noreply.github.com> Date: Sat, 15 Jan 2022 18:49:26 -0500 Subject: implement main loop --- src/raylib.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'src') 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 #endif +void call_main_loop(); + static mrb_value mrb_init_window(mrb_state *mrb, mrb_value self) { @@ -64,13 +66,41 @@ 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); return mrb_nil_value(); } +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"); @@ -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 -- cgit v1.2.3