static void title_timer(int id, float dt) { static const char *demo = NULL; float t; real_time += dt; switch (mode) { case 0: /* Mode 0: Pan across title level. */ if (real_time <= 20.0f) game_set_fly(fcosf(V_PI * real_time / 20.0f)); else { game_fade(+1.0f); real_time = 0.0f; mode = 1; } break; case 1: /* Mode 1: Fade out. Load demo level. */ if (real_time > 1.0f) { if ((demo = demo_pick())) { demo_replay_init(demo, NULL, NULL, NULL, NULL); demo_time = 0.0f; real_time = 0.0f; mode = 2; } else { game_fade(-1.0f); real_time = 0.0f; mode = 0; } } break; case 2: /* Mode 2: Run demo. */ while (demo_time < real_time) if (demo_replay_step(&t)) demo_time += t; else { demo_replay_stop(0); game_fade(+1.0f); real_time = 0.0f; mode = 3; } break; case 3: /* Mode 3: Fade out. Load title level. */ if (real_time > 1.0f) { game_init("map-rlk/title.sol", "map-back/jupiter.sol", "png/space.png", 0, 1); real_time = 0.0f; mode = 0; } break; } gui_timer(id, dt); audio_timer(dt); game_step_fade(dt); }
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); }