diff options
Diffstat (limited to 'src/play.c')
-rw-r--r-- | src/play.c | 43 |
1 files changed, 26 insertions, 17 deletions
@@ -448,29 +448,38 @@ int play_shutdown(play_t *play) } -void play_run(play_t *play) +int play_run_slice(play_t *play) { - for (;;) { - SDL_Event ev; + SDL_Event ev; - do { - play->update_needed = 0; + do { + play->update_needed = 0; - if (play->ops[play->context]->update) - play->ops[play->context]->update(play, play->contexts[play->context]); + if (play->ops[play->context]->update) + play->ops[play->context]->update(play, play->contexts[play->context]); - /* see comment in play_context_enter() for why play->update_needed exists */ - } while (play->update_needed); + /* see comment in play_context_enter() for why play->update_needed exists */ + } while (play->update_needed); - if (play->ops[play->context]->render) - play->ops[play->context]->render(play, play->contexts[play->context]); + if (play->ops[play->context]->render) + play->ops[play->context]->render(play, play->contexts[play->context]); - while (!play->update_needed && SDL_PollEvent(&ev)) { - if (ev.type == SDL_APP_TERMINATING || ev.type == SDL_QUIT) - return; + while (!play->update_needed && SDL_PollEvent(&ev)) { + if (ev.type == SDL_APP_TERMINATING || ev.type == SDL_QUIT) + return 0; - if (play->ops[play->context]->dispatch) - play->ops[play->context]->dispatch(play, play->contexts[play->context], &ev); - } + if (play->ops[play->context]->dispatch) + play->ops[play->context]->dispatch(play, play->contexts[play->context], &ev); + } + + return 1; +} + + +void play_run(play_t *play) +{ + for (;;) { + if (!play_run_slice(play)) + return; } } |