diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/play.c | 43 | ||||
-rw-r--r-- | src/play.h | 1 |
2 files changed, 27 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; } } @@ -57,6 +57,7 @@ typedef struct play_ops_t { play_t * play_startup(int argc, char *argv[], unsigned flags, const play_ops_t *ops[]); int play_shutdown(play_t *play); +int play_run_slice(play_t *play); void play_run(play_t *play); void play_music_set(play_t *play, unsigned flags, const char *fmt, ...); |