Add global update loop, and cleanup
This commit is contained in:
+10
-3
@@ -169,10 +169,9 @@ struct Scene {
|
||||
}
|
||||
}
|
||||
|
||||
void update_scene(uint64_t delta_time) {
|
||||
void update_scene(mrb_value dt_val) {
|
||||
if (mrb_nil_p(update.proc))
|
||||
return;
|
||||
mrb_value dt_val = mrb_float_value(Ruby::mrb, delta_time / 1e9);
|
||||
update.call(1, &dt_val);
|
||||
}
|
||||
|
||||
@@ -200,6 +199,8 @@ struct Scene {
|
||||
} else if (e->click_mode == ClickMode::BLOCK) {
|
||||
result.push_back(*it);
|
||||
break;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -240,6 +241,7 @@ struct App {
|
||||
std::vector<Key> released_keys;
|
||||
Vec2<float> scroll = {0, 0};
|
||||
std::string text = "";
|
||||
Ruby::Block update;
|
||||
|
||||
void exit() {
|
||||
running = false;
|
||||
@@ -335,7 +337,12 @@ struct App {
|
||||
}
|
||||
}
|
||||
|
||||
scene->update_scene(dt);
|
||||
int ai = mrb_gc_arena_save(Ruby::mrb);
|
||||
mrb_value dt_val = mrb_float_value(Ruby::mrb, dt / 1e9);
|
||||
update.call(1, &dt_val);
|
||||
scene->update_scene(dt_val);
|
||||
mrb_gc_arena_restore(Ruby::mrb, ai);
|
||||
|
||||
scene->render(window, window.get_time());
|
||||
|
||||
window.render();
|
||||
|
||||
Reference in New Issue
Block a user