static int demo_enter(struct state *st, struct state *prev) { if (!items || (prev == &st_demo_del)) { if (items) { demo_dir_free(items); items = NULL; } items = demo_dir_scan(); total = array_len(items); } first = first < total ? first : 0; last = MIN(first + DEMO_STEP - 1, total - 1); last_viewed = MIN(MAX(first, last_viewed), last); if (total) demo_dir_load(items, first, last); audio_music_fade_to(0.5f, "bgm/inter.ogg"); return demo_gui(); }
static int demo_enter(void) { int id, jd; if (items) demo_dir_free(items); items = demo_dir_scan(); total = array_len(items); id = gui_vstack(0); if (total) { if ((jd = gui_hstack(id))) { gui_label(jd, _("Select Replay"), GUI_SML, GUI_ALL, 0,0); gui_filler(jd); gui_navig(jd, first > 0, first + DEMO_STEP < total); } gui_demo_thumbs(id); gui_filler(id); gui_demo_status(id); gui_layout(id, 0, 0); gui_demo_update_thumbs(); gui_demo_update_status(last_viewed); } else { gui_label(id, _("No Replays"), GUI_MED, GUI_ALL, 0, 0); gui_layout(id, 0, 0); } audio_music_fade_to(0.5f, "bgm/inter.ogg"); return id; }
static void title_timer(int id, float dt) { static const char *demo = NULL; real_time += dt; switch (mode) { case MODE_LEVEL: /* Pan across title level. */ if (real_time <= 20.0f) { game_client_fly(fcosf(V_PI * real_time / 20.0f)); } else { game_fade(+1.0f); real_time = 0.0f; mode = MODE_LEVEL_FADE; } break; case MODE_LEVEL_FADE: /* Fade out. Load demo level. */ if (real_time > 1.0f) { if (!items) items = demo_dir_scan(); if ((demo = pick_demo(items))) { demo_replay_init(demo, NULL, NULL, NULL, NULL, NULL); game_client_fly(0.0f); real_time = 0.0f; mode = MODE_DEMO; } else { game_fade(-1.0f); real_time = 0.0f; mode = MODE_LEVEL; } } break; case MODE_DEMO: /* Run demo. */ if (!demo_replay_step(dt)) { demo_replay_stop(0); game_fade(+1.0f); real_time = 0.0f; mode = MODE_DEMO_FADE; } else game_client_blend(demo_replay_blend()); break; case MODE_DEMO_FADE: /* Fade out. Load title level. */ if (real_time > 1.0f) { init_title_level(); real_time = 0.0f; mode = MODE_LEVEL; } break; } gui_timer(id, dt); game_step_fade(dt); }