diff --git a/binding-mruby/binding-mruby.cpp b/binding-mruby/binding-mruby.cpp index 7f52b5e..cc36141 100644 --- a/binding-mruby/binding-mruby.cpp +++ b/binding-mruby/binding-mruby.cpp @@ -258,6 +258,19 @@ runMrbFile(mrb_state *mrb, const char *filename) fclose(f); } +static mrb_state * static_mrb; +static mrb_state * static_scriptmrb; + +void __attribute__ ((optnone)) main_update_loop() { + mrb_load_nstring_cxt(static_mrb, "main_update_loop", 16, NULL); + if (static_mrb->exc) { + printf("Execution Errored\n"); + mrb_close(static_scriptmrb); + shState->texPool().disable(); + mrb_close(static_mrb); + } +} + static void runRMXPScripts(mrb_state *mrb, mrbc_context *ctx) { @@ -309,9 +322,6 @@ runRMXPScripts(mrb_state *mrb, mrbc_context *ctx) for (int i = 0; i < scriptCount; ++i) { -#ifdef __EMSCRIPTEN - emscripten_sleep(10); -#endif mrb_value script = mrb_ary_entry(scriptArray, i); mrb_value scriptChksum = mrb_ary_entry(script, 0); @@ -368,7 +378,23 @@ runRMXPScripts(mrb_state *mrb, mrbc_context *ctx) break; } + static_mrb = mrb; + static_scriptmrb = scriptMrb; + +#ifdef __EMSCRIPTEN__ + /* Use loop for emscripten */ + mrb_load_nstring_cxt(static_mrb, "main_update_loop", 16, NULL); + emscripten_set_main_loop(main_update_loop, 0, 1); + return; +#else + while (true) { + main_update_loop(); + SDL_Delay(20); + if (static_mrb->exc) + break; + } mrb_close(scriptMrb); +#endif } static void mrbBindingExecute() @@ -400,6 +426,7 @@ static void mrbBindingExecute() else runRMXPScripts(mrb, ctx); +#ifndef __EMSCRIPTEN__ checkException(mrb); shState->rtData().rqTermAck.set(); @@ -407,6 +434,7 @@ static void mrbBindingExecute() mrbc_context_free(mrb, ctx); mrb_close(mrb); +#endif } static void mrbBindingTerminate() diff --git a/binding-mruby/run.xxd b/binding-mruby/run.xxd new file mode 100644 index 0000000..552e4d1 --- /dev/null +++ b/binding-mruby/run.xxd @@ -0,0 +1,7 @@ +00000000: 5249 5445 3030 3034 5969 0000 0065 4d41 RITE0004Yi...eMA +00000010: 545a 3030 3030 4952 4550 0000 0047 3030 TZ0000IREP...G00 +00000020: 3030 0000 003f 0001 0004 0000 0000 0004 00...?.......... +00000030: 0080 0006 0100 003d 0080 00a0 0000 004a .......=.......J +00000040: 0000 0001 0000 0b48 656c 6c6f 2057 6f72 .......Hello Wor +00000050: 6c64 0000 0001 0004 7075 7473 0045 4e44 ld......puts.END +00000060: 0000 0000 08 .....