void progress_stop(void) { int d; if (level) d = (curr_clock() == level_time(level)); else d = 0; demo_play_stop(d); }
void hud_timer(float dt) { const int clock = curr_clock(); const int balls = curr_balls(); const int coins = curr_coins(); const int score = curr_score(); const int goal = curr_goal(); if (gui_value(time_id) != clock) gui_set_clock(time_id, clock); if (gui_value(ball_id) != balls) gui_set_count(ball_id, balls); if (gui_value(scor_id) != score) gui_set_count(scor_id, score); if (gui_value(coin_id) != coins) gui_set_count(coin_id, coins); if (gui_value(goal_id) != goal) gui_set_count(goal_id, goal); if (config_get_d(CONFIG_FPS)) hud_fps(); view_timer -= dt; gui_timer(Rhud_id, dt); gui_timer(Lhud_id, dt); gui_timer(time_id, dt); gui_timer(view_id, dt); }
void progress_stat(int s) { int i, dirty = 0; status = s; coins = curr_coins(); timer = (level_time(level) == 0 ? curr_clock() : level_time(level) - curr_clock()); switch (status) { case GAME_GOAL: for (i = curr.score + 1; i <= curr.score + coins; i++) if (progress_reward_ball(i)) curr.balls++; curr.score += coins; curr.times += timer; dirty = level_score_update(level, timer, coins, &time_rank, goal == 0 ? &goal_rank : NULL, &coin_rank); if (!level_completed(level)) { level_complete(level); dirty = 1; } /* Compute next level. */ if (mode == MODE_CHALLENGE) { for (next = level->next; next && level_bonus(next); next = next->next) { if (!level_opened(next)) { level_open(next); dirty = 1; } } } else { for (next = level->next; next && level_bonus(next) && !level_opened(next); next = next->next) /* Do nothing */; } /* Open next level or complete the set. */ if (next) { level_open(next); dirty = 1; } else done = mode == MODE_CHALLENGE; break; case GAME_FALL: /* Fall through. */ case GAME_TIME: for (next = level->next; next && !level_opened(next); next = next->next) /* Do nothing */; curr.times += timer; curr.balls -= 1; break; } if (dirty && mode != MODE_STANDALONE) set_store_hs(); demo_play_stat(status, coins, timer); }