From 8228f344ca7bd78ebf4e0005bc90abd719520857 Mon Sep 17 00:00:00 2001 From: Alberto Mardegan Date: Sat, 20 Aug 2011 23:02:59 +0300 Subject: [PATCH] Add a "idle" method to the state structure This method is called before checking for events. The goal is to make possible for states to call SDL_WaitEvents() and avoid using 100% of the CPU when unnecessary. --- ball/main.c | 2 ++ ball/st_ball.c | 3 ++- ball/st_conf.c | 7 +++++-- ball/st_demo.c | 15 ++++++++++----- ball/st_done.c | 3 ++- ball/st_fail.c | 3 ++- ball/st_goal.c | 3 ++- ball/st_help.c | 6 ++++-- ball/st_level.c | 9 ++++++--- ball/st_name.c | 3 ++- ball/st_over.c | 3 ++- ball/st_pause.c | 3 ++- ball/st_play.c | 12 ++++++++---- ball/st_save.c | 6 ++++-- ball/st_set.c | 3 ++- ball/st_start.c | 3 ++- ball/st_title.c | 3 ++- putt/main.c | 2 ++ putt/st_all.c | 42 ++++++++++++++++++++++++++++-------------- share/state.c | 6 ++++++ share/state.h | 2 ++ 21 files changed, 97 insertions(+), 42 deletions(-) diff --git a/ball/main.c b/ball/main.c index af312f6..beff11d 100644 --- a/ball/main.c +++ b/ball/main.c @@ -176,6 +176,8 @@ static int loop(void) SDL_Event e; int d = 1; + st_idle(); + /* Process SDL events. */ while (d && SDL_PollEvent(&e)) diff --git a/ball/st_ball.c b/ball/st_ball.c index 4c02ab1..21294a0 100644 --- a/ball/st_ball.c +++ b/ball/st_ball.c @@ -268,5 +268,6 @@ struct state st_ball = { NULL, shared_click, NULL, - ball_buttn + ball_buttn, + NULL }; diff --git a/ball/st_conf.c b/ball/st_conf.c index 12c1f6a..838dc10 100644 --- a/ball/st_conf.c +++ b/ball/st_conf.c @@ -453,7 +453,8 @@ struct state st_conf = { shared_angle, shared_click, NULL, - conf_shared_buttn + conf_shared_buttn, + NULL }; struct state st_conf_video = { @@ -466,7 +467,8 @@ struct state st_conf_video = { shared_angle, shared_click, NULL, - conf_shared_buttn + conf_shared_buttn, + NULL }; struct state st_null = { @@ -479,5 +481,6 @@ struct state st_null = { NULL, NULL, NULL, + NULL, NULL }; diff --git a/ball/st_demo.c b/ball/st_demo.c index f087d7d..0439bfa 100644 --- a/ball/st_demo.c +++ b/ball/st_demo.c @@ -766,7 +766,8 @@ struct state st_demo = { shared_angle, shared_click, NULL, - demo_buttn + demo_buttn, + NULL }; struct state st_demo_play = { @@ -779,7 +780,8 @@ struct state st_demo_play = { NULL, demo_play_click, demo_play_keybd, - demo_play_buttn + demo_play_buttn, + NULL }; struct state st_demo_end = { @@ -792,7 +794,8 @@ struct state st_demo_end = { shared_angle, shared_click, demo_end_keybd, - demo_end_buttn + demo_end_buttn, + NULL }; struct state st_demo_del = { @@ -805,7 +808,8 @@ struct state st_demo_del = { shared_angle, shared_click, NULL, - demo_del_buttn + demo_del_buttn, + NULL }; struct state st_demo_compat = { @@ -818,5 +822,6 @@ struct state st_demo_compat = { shared_angle, shared_click, NULL, - demo_compat_buttn + demo_compat_buttn, + NULL }; diff --git a/ball/st_done.c b/ball/st_done.c index 4ba2953..41c40c9 100644 --- a/ball/st_done.c +++ b/ball/st_done.c @@ -136,5 +136,6 @@ struct state st_done = { shared_angle, shared_click, done_keybd, - done_buttn + done_buttn, + NULL }; diff --git a/ball/st_fail.c b/ball/st_fail.c index eae898a..11982a0 100644 --- a/ball/st_fail.c +++ b/ball/st_fail.c @@ -182,6 +182,7 @@ struct state st_fail = { shared_angle, shared_click, fail_keybd, - fail_buttn + fail_buttn, + NULL }; diff --git a/ball/st_goal.c b/ball/st_goal.c index bce1e62..8fad638 100644 --- a/ball/st_goal.c +++ b/ball/st_goal.c @@ -320,6 +320,7 @@ struct state st_goal = { shared_angle, shared_click, goal_keybd, - goal_buttn + goal_buttn, + NULL }; diff --git a/ball/st_help.c b/ball/st_help.c index ed96797..bd055f1 100644 --- a/ball/st_help.c +++ b/ball/st_help.c @@ -419,7 +419,8 @@ struct state st_help = { shared_angle, shared_click, NULL, - help_buttn + help_buttn, + NULL }; struct state st_help_demo = { @@ -432,5 +433,6 @@ struct state st_help_demo = { NULL, NULL, NULL, - help_demo_buttn + help_demo_buttn, + NULL }; diff --git a/ball/st_level.c b/ball/st_level.c index a83c6a4..6bf5e32 100644 --- a/ball/st_level.c +++ b/ball/st_level.c @@ -238,7 +238,8 @@ struct state st_level = { NULL, level_click, level_keybd, - level_buttn + level_buttn, + NULL }; struct state st_poser = { @@ -251,7 +252,8 @@ struct state st_poser = { NULL, NULL, NULL, - poser_buttn + poser_buttn, + NULL }; struct state st_nodemo = { @@ -264,7 +266,8 @@ struct state st_nodemo = { shared_angle, shared_click, NULL, - nodemo_buttn + nodemo_buttn, + NULL }; struct state st_exit = { diff --git a/ball/st_name.c b/ball/st_name.c index 44051c8..7355bd2 100644 --- a/ball/st_name.c +++ b/ball/st_name.c @@ -207,6 +207,7 @@ struct state st_name = { shared_angle, shared_click, name_keybd, - name_buttn + name_buttn, + NULL }; diff --git a/ball/st_over.c b/ball/st_over.c index 82f228a..3795681 100644 --- a/ball/st_over.c +++ b/ball/st_over.c @@ -87,5 +87,6 @@ struct state st_over = { NULL, over_click, NULL, - over_buttn + over_buttn, + NULL }; diff --git a/ball/st_pause.c b/ball/st_pause.c index b8b8df4..217a452 100644 --- a/ball/st_pause.c +++ b/ball/st_pause.c @@ -159,5 +159,6 @@ struct state st_pause = { shared_angle, shared_click, pause_keybd, - pause_buttn + pause_buttn, + NULL }; diff --git a/ball/st_play.c b/ball/st_play.c index ad09915..842d49d 100644 --- a/ball/st_play.c +++ b/ball/st_play.c @@ -624,7 +624,8 @@ struct state st_play_ready = { NULL, play_ready_click, play_ready_keybd, - play_ready_buttn + play_ready_buttn, + NULL }; struct state st_play_set = { @@ -637,7 +638,8 @@ struct state st_play_set = { NULL, play_set_click, play_set_keybd, - play_set_buttn + play_set_buttn, + NULL }; struct state st_play_loop = { @@ -650,7 +652,8 @@ struct state st_play_loop = { shared_angle, play_loop_click, play_loop_keybd, - play_loop_buttn + play_loop_buttn, + NULL }; struct state st_look = { @@ -663,5 +666,6 @@ struct state st_look = { NULL, NULL, look_keybd, - look_buttn + look_buttn, + NULL }; diff --git a/ball/st_save.c b/ball/st_save.c index 351695c..6b4e694 100644 --- a/ball/st_save.c +++ b/ball/st_save.c @@ -249,7 +249,8 @@ struct state st_save = { shared_angle, shared_click, save_keybd, - save_buttn + save_buttn, + NULL }; struct state st_clobber = { @@ -262,5 +263,6 @@ struct state st_clobber = { shared_angle, shared_click, NULL, - clobber_buttn + clobber_buttn, + NULL }; diff --git a/ball/st_set.c b/ball/st_set.c index aeaf439..3a7d652 100644 --- a/ball/st_set.c +++ b/ball/st_set.c @@ -193,5 +193,6 @@ struct state st_set = { shared_angle, shared_click, NULL, - set_buttn + set_buttn, + NULL }; diff --git a/ball/st_start.c b/ball/st_start.c index 87ef31c..dad7bcf 100644 --- a/ball/st_start.c +++ b/ball/st_start.c @@ -348,5 +348,6 @@ struct state st_start = { shared_angle, shared_click, start_keybd, - start_buttn + start_buttn, + NULL }; diff --git a/ball/st_title.c b/ball/st_title.c index 77077db..5af5964 100644 --- a/ball/st_title.c +++ b/ball/st_title.c @@ -316,6 +316,7 @@ struct state st_title = { shared_angle, shared_click, title_keybd, - title_buttn + title_buttn, + NULL }; diff --git a/putt/main.c b/putt/main.c index e636580..e9d3a94 100644 --- a/putt/main.c +++ b/putt/main.c @@ -94,6 +94,8 @@ static int loop(void) int d = 1; int c; + st_idle(); + while (d && SDL_PollEvent(&e)) { if (e.type == SDL_QUIT) diff --git a/putt/st_all.c b/putt/st_all.c index 907102c..31a7b9a 100644 --- a/putt/st_all.c +++ b/putt/st_all.c @@ -1401,7 +1401,8 @@ struct state st_title = { NULL, title_click, NULL, - title_buttn + title_buttn, + NULL }; struct state st_course = { @@ -1414,7 +1415,8 @@ struct state st_course = { NULL, course_click, NULL, - course_buttn + course_buttn, + NULL }; struct state st_party = { @@ -1427,7 +1429,8 @@ struct state st_party = { NULL, party_click, NULL, - party_buttn + party_buttn, + NULL }; struct state st_next = { @@ -1440,7 +1443,8 @@ struct state st_next = { NULL, next_click, next_keybd, - next_buttn + next_buttn, + NULL }; struct state st_poser = { @@ -1453,7 +1457,8 @@ struct state st_poser = { NULL, NULL, NULL, - poser_buttn + poser_buttn, + NULL }; struct state st_flyby = { @@ -1466,7 +1471,8 @@ struct state st_flyby = { NULL, flyby_click, shared_keybd, - flyby_buttn + flyby_buttn, + NULL }; struct state st_stroke = { @@ -1479,7 +1485,8 @@ struct state st_stroke = { NULL, stroke_click, shared_keybd, - stroke_buttn + stroke_buttn, + NULL }; struct state st_roll = { @@ -1492,7 +1499,8 @@ struct state st_roll = { NULL, NULL, shared_keybd, - roll_buttn + roll_buttn, + NULL }; struct state st_goal = { @@ -1505,7 +1513,8 @@ struct state st_goal = { NULL, goal_click, shared_keybd, - goal_buttn + goal_buttn, + NULL }; struct state st_stop = { @@ -1518,7 +1527,8 @@ struct state st_stop = { NULL, stop_click, shared_keybd, - stop_buttn + stop_buttn, + NULL }; struct state st_fall = { @@ -1531,7 +1541,8 @@ struct state st_fall = { NULL, fall_click, shared_keybd, - fall_buttn + fall_buttn, + NULL }; struct state st_score = { @@ -1544,7 +1555,8 @@ struct state st_score = { NULL, score_click, shared_keybd, - score_buttn + score_buttn, + NULL }; struct state st_over = { @@ -1557,7 +1569,8 @@ struct state st_over = { NULL, over_click, NULL, - over_buttn + over_buttn, + NULL }; struct state st_pause = { @@ -1570,5 +1583,6 @@ struct state st_pause = { NULL, pause_click, pause_keybd, - pause_buttn + pause_buttn, + NULL }; diff --git a/share/state.c b/share/state.c index 36fc960..e8f52ed 100644 --- a/share/state.c +++ b/share/state.c @@ -163,4 +163,10 @@ int st_buttn(int b, int d) return (state && state->buttn) ? state->buttn(b, d) : 1; } +void st_idle(void) +{ + if (state && state->idle) + state->idle(); +} + /*---------------------------------------------------------------------------*/ diff --git a/share/state.h b/share/state.h index 1247fc6..31206fd 100644 --- a/share/state.h +++ b/share/state.h @@ -15,6 +15,7 @@ struct state int (*click)(int b, int d); int (*keybd)(int c, int d); int (*buttn)(int b, int d); + void (*idle)(void); int gui_id; }; @@ -33,6 +34,7 @@ void st_angle(float, float); int st_click(int, int); int st_keybd(int, int); int st_buttn(int, int); +void st_idle(); /*---------------------------------------------------------------------------*/ -- 1.7.9.5