Improve loop with fps control
This commit is contained in:
@@ -1487,11 +1487,29 @@ static mrb_value scene_hash(mrb_state *mrb, mrb_value self) {
|
||||
|
||||
static mrb_value app_run(mrb_state *mrb, mrb_value) {
|
||||
mrb_int width, height;
|
||||
mrb_value options_hash;
|
||||
char *title = nullptr;
|
||||
mrb_get_args(mrb, "iiz", &width, &height, &title);
|
||||
mrb_get_args(mrb, "iiz|H", &width, &height, &title, &options_hash);
|
||||
|
||||
app_ = new app::App({(float)width, (float)height}, title);
|
||||
|
||||
float fps = 60;
|
||||
if (!mrb_nil_p(options_hash))
|
||||
HASH_FLOAT(options_hash, fps, fps);
|
||||
|
||||
app_->set_fps(fps);
|
||||
|
||||
return mrb_nil_value();
|
||||
}
|
||||
|
||||
static mrb_value app_fps_get(mrb_state *mrb, mrb_value) {
|
||||
return mrb_float_value(mrb, app_->get_fps());
|
||||
}
|
||||
|
||||
static mrb_value app_fps_set(mrb_state *mrb, mrb_value) {
|
||||
mrb_float fps;
|
||||
mrb_get_args(mrb, "f", &fps);
|
||||
app_->set_fps(fps);
|
||||
return mrb_nil_value();
|
||||
}
|
||||
|
||||
@@ -1750,9 +1768,11 @@ inline void setup() {
|
||||
ADD_METHOD(Scene, "elements", scene_elements, MRB_ARGS_NONE());
|
||||
|
||||
DEF_MODULE(App);
|
||||
ADD_MODULE_METHOD(App, "run", app_run, MRB_ARGS_REQ(3));
|
||||
ADD_MODULE_METHOD(App, "run", app_run, MRB_ARGS_REQ(3) | MRB_ARGS_OPT(1));
|
||||
ADD_MODULE_METHOD(App, "start", app_start, MRB_ARGS_REQ(1));
|
||||
ADD_MODULE_METHOD(App, "switch_to", app_switch_to, MRB_ARGS_REQ(1));
|
||||
ADD_MODULE_METHOD(App, "fps=", app_fps_set, MRB_ARGS_REQ(1));
|
||||
ADD_MODULE_METHOD(App, "fps", app_fps_get, MRB_ARGS_NONE());
|
||||
ADD_MODULE_METHOD(App, "localize", app_localize, MRB_ARGS_REQ(3));
|
||||
ADD_MODULE_METHOD(App, "language=", app_language_set, MRB_ARGS_REQ(1));
|
||||
ADD_MODULE_METHOD(App, "language", app_language_get, MRB_ARGS_NONE());
|
||||
|
||||
Reference in New Issue
Block a user