summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/play.c43
-rw-r--r--src/play.h1
2 files changed, 27 insertions, 17 deletions
diff --git a/src/play.c b/src/play.c
index 5c51cbf..0a4630d 100644
--- a/src/play.c
+++ b/src/play.c
@@ -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;
}
}
diff --git a/src/play.h b/src/play.h
index 1d4ec6b..b3c56b5 100644
--- a/src/play.h
+++ b/src/play.h
@@ -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, ...);
© All Rights Reserved