static void gui_set_scores(const char *label, const struct score *s, int hilite) { const char *name; int j, n = score_extra_row ? RANK_LAST : RANK_EASY; if (s == NULL) { gui_set_label(score_label, _("Unavailable")); for (j = RANK_HARD; j <= n; j++) { gui_set_count(score_coin[j], -1); gui_set_label(score_name[j], ""); gui_set_clock(score_time[j], -1); } } else { gui_set_label(score_label, label); for (j = RANK_HARD; j <= n; j++) { name = s->player[j]; if (j == hilite) set_score_color(score_name[j], j, gui_grn, gui_red); else gui_set_color(score_name[j], gui_yel, gui_wht); gui_set_count(score_coin[j], s->coins[j]); gui_set_label(score_name[j], is_special_name(name) ? _(name) : name); gui_set_clock(score_time[j], s->timer[j]); } } }
static int name_action(int tok, int val) { audio_play(AUD_MENU, 1.0f); switch (tok) { case NAME_OK: if (strlen(player) == 0) return 1; config_set_s(CONFIG_PLAYER, player); return goto_state(ok_state); case NAME_CANCEL: return goto_state(cancel_state); case GUI_CL: gui_keyboard_lock(); break; case GUI_BS: if (text_del_char(player)) gui_set_label(name_id, player); break; case GUI_CHAR: if (text_add_char(val, player, sizeof (player))) gui_set_label(name_id, player); } return 1; }
static void gui_demo_update_status(int i) { const struct demo *d; if (!total) return; d = DEMO_GET(items, i < total ? i : 0); if (!d) return; gui_set_label(name_id, d->name); gui_set_label(date_id, date_to_str(d->date)); gui_set_label(player_id, d->player); if (d->status == GAME_GOAL) gui_set_color(status_id, gui_grn, gui_grn); else gui_set_color(status_id, gui_red, gui_red); gui_set_label(status_id, status_to_str(d->status)); gui_set_count(coin_id, d->coins); gui_set_clock(time_id, d->timer); }
void hud_view_pulse(int c) { switch (c) { case 0: gui_set_label(view_id, STR_VIEW0); break; case 1: gui_set_label(view_id, STR_VIEW1); break; case 2: gui_set_label(view_id, STR_VIEW2); break; } gui_pulse(view_id, 1.2f); view_timer = 2.0f; }
static int conf_gui(void) { int id; /* Initialize the configuration GUI. */ if ((id = gui_vstack(0))) { int sound = config_get_d(CONFIG_SOUND_VOLUME); int music = config_get_d(CONFIG_MUSIC_VOLUME); int mouse = MOUSE_RANGE_MAP(config_get_d(CONFIG_MOUSE_SENSE)); const char *player = config_get_s(CONFIG_PLAYER); const char *ball = config_get_s(CONFIG_BALL_FILE); int name_id = 0, ball_id = 0; conf_header(id, _("Options"), GUI_BACK); conf_state(id, _("Graphics"), _("Configure"), CONF_VIDEO); gui_space(id); conf_slider(id, _("Mouse Sensitivity"), CONF_MOUSE_SENSE, mouse, mouse_id, ARRAYSIZE(mouse_id)); gui_space(id); conf_slider(id, _("Sound Volume"), CONF_SOUND_VOLUME, sound, sound_id, ARRAYSIZE(sound_id)); conf_slider(id, _("Music Volume"), CONF_MUSIC_VOLUME, music, music_id, ARRAYSIZE(music_id)); gui_space(id); name_id = conf_state(id, _("Player Name"), " ", CONF_PLAYER); ball_id = conf_state(id, _("Ball Model"), " ", CONF_BALL); gui_layout(id, 0, 0); gui_set_trunc(name_id, TRUNC_TAIL); gui_set_trunc(ball_id, TRUNC_TAIL); gui_set_label(name_id, player); gui_set_label(ball_id, base_name(ball)); } return id; }
static int name_gui(void) { int id, jd; if ((id = gui_vstack(0))) { gui_label(id, _("Player Name"), GUI_MED, 0, 0); gui_space(id); name_id = gui_label(id, " ", GUI_MED, gui_yel, gui_yel); gui_space(id); gui_keyboard(id); gui_space(id); if ((jd = gui_harray(id))) { enter_id = gui_start(jd, _("OK"), GUI_SML, NAME_OK, 0); gui_space(jd); gui_state(jd, _("Cancel"), GUI_SML, GUI_BACK, 0); } gui_layout(id, 0, 0); gui_set_trunc(name_id, TRUNC_HEAD); gui_set_label(name_id, text_input); } return id; }
static int save_gui(void) { int id, jd; if ((id = gui_vstack(0))) { gui_label(id, _("Replay Name"), GUI_MED, 0, 0); gui_space(id); file_id = gui_label(id, " ", GUI_MED, gui_yel, gui_yel); gui_space(id); gui_keyboard(id); gui_space(id); if ((jd = gui_harray(id))) { enter_id = gui_start(jd, _("Save"), GUI_SML, SAVE_SAVE, 0); gui_space(jd); gui_state(jd, _("Cancel"), GUI_SML, GUI_BACK, 0); } gui_layout(id, 0, 0); gui_set_trunc(file_id, TRUNC_HEAD); gui_set_label(file_id, text_input); } return id; }
static int clobber_gui(void) { int id, jd, kd; int file_id; if ((id = gui_vstack(0))) { kd = gui_label(id, _("Overwrite?"), GUI_MED, gui_red, gui_red); file_id = gui_label(id, "MMMMMMMM", GUI_MED, gui_yel, gui_yel); if ((jd = gui_harray(id))) { gui_start(jd, _("Cancel"), GUI_SML, GUI_BACK, 0); gui_state(jd, _("Overwrite"), GUI_SML, SAVE_SAVE, 0); } gui_pulse(kd, 1.2f); gui_layout(id, 0, 0); gui_set_trunc(file_id, TRUNC_TAIL); gui_set_label(file_id, text_input); } return id; }
static void on_text_input(void) { if (name_id) { gui_set_label(name_id, text_input); audio_play(AUD_MENU, 1.0f); } }
static void on_text_input(int typing) { if (name_id) { gui_set_label(name_id, text_input); if (typing) audio_play(AUD_MENU, 1.0f); } }
static void gui_demo_update_thumbs(void) { int i; for (i = 0; i < ARRAYSIZE(thumbs) && thumbs[i].shot && thumbs[i].name; i++) { gui_set_image(thumbs[i].shot, DEMO_GET(items, thumbs[i].item)->shot); gui_set_label(thumbs[i].name, DEMO_GET(items, thumbs[i].item)->name); } }
static void gui_demo_update_thumbs(void) { struct dir_item *item; struct demo *demo; int i; for (i = 0; i < ARRAYSIZE(thumbs) && thumbs[i].shot && thumbs[i].name; i++) { item = DIR_ITEM_GET(items, thumbs[i].item); demo = item->data; gui_set_image(thumbs[i].shot, demo ? demo->shot : ""); gui_set_label(thumbs[i].name, demo ? demo->name : base_name(item->path)); } }
static void start_over_level(int i) { struct level *l = get_level(i); if (level_opened(l) || config_cheat()) { gui_set_image(shot_id, level_shot(l)); set_score_board(level_score(l, SCORE_COIN), -1, level_score(l, SCORE_TIME), -1, level_score(l, SCORE_GOAL), -1); if (file_id) gui_set_label(file_id, level_file(l)); } }
static int video_gui(void) { static const struct conf_option multisample_opts[] = { { N_("Off"), 0 }, { N_("2x"), 2 }, { N_("4x"), 4 }, { N_("8x"), 8 }, }; int id, jd; if ((id = gui_vstack(0))) { char resolution[sizeof ("12345678 x 12345678")]; const char *display; int dpy = config_get_d(CONFIG_DISPLAY); sprintf(resolution, "%d x %d", config_get_d(CONFIG_WIDTH), config_get_d(CONFIG_HEIGHT)); if (!(display = SDL_GetDisplayName(dpy))) display = _("Unknown Display"); conf_header(id, _("Graphics"), GUI_BACK); if ((jd = conf_state(id, _("Display"), "Longest Name", VIDEO_DISPLAY))) { gui_set_trunc(jd, TRUNC_TAIL); gui_set_label(jd, display); } conf_toggle(id, _("Fullscreen"), VIDEO_FULLSCREEN, config_get_d(CONFIG_FULLSCREEN), _("On"), 1, _("Off"), 0); if ((jd = conf_state (id, _("Resolution"), resolution, VIDEO_RESOLUTION))) { /* * Because we always use the desktop display mode, disable * display mode switching in fullscreen. */ if (config_get_d(CONFIG_FULLSCREEN)) { gui_set_state(jd, GUI_NONE, 0); gui_set_color(jd, gui_gry, gui_gry); } } #if ENABLE_HMD conf_toggle(id, _("HMD"), VIDEO_HMD, config_get_d(CONFIG_HMD), _("On"), 1, _("Off"), 0); #endif gui_space(id); conf_toggle(id, _("V-Sync"), VIDEO_VSYNC, config_get_d(CONFIG_VSYNC), _("On"), 1, _("Off"), 0); conf_select(id, _("Antialiasing"), VIDEO_MULTISAMPLE, config_get_d(CONFIG_MULTISAMPLE), multisample_opts, ARRAYSIZE(multisample_opts)); gui_space(id); conf_toggle(id, _("Reflection"), VIDEO_REFLECTION, config_get_d(CONFIG_REFLECTION), _("On"), 1, _("Off"), 0); conf_toggle(id, _("Background"), VIDEO_BACKGROUND, config_get_d(CONFIG_BACKGROUND), _("On"), 1, _("Off"), 0); conf_toggle(id, _("Shadow"), VIDEO_SHADOW, config_get_d(CONFIG_SHADOW), _("On"), 1, _("Off"), 0); gui_layout(id, 0, 0); } return id; }
static int title_action(int tok, int val) { static const char keyphrase[] = "xyzzy"; static char queue[sizeof (keyphrase)] = ""; size_t queue_len = strlen(queue); audio_play(AUD_MENU, 1.0f); switch (tok) { case GUI_BACK: return 0; break; case TITLE_PLAY: if (strlen(config_get_s(CONFIG_PLAYER)) == 0) return goto_name(&st_set, &st_title, 0); else return goto_state(&st_set); break; case TITLE_HELP: return goto_state(&st_help); break; case TITLE_DEMO: return goto_state(&st_demo); break; case TITLE_CONF: return goto_state(&st_conf); break; case GUI_CHAR: /* Let the queue fill up. */ if (queue_len < sizeof (queue) - 1) { queue[queue_len] = (char) val; queue[queue_len + 1] = '\0'; } /* Advance the queue before adding the new element. */ else { int k; for (k = 1; k < queue_len; k++) queue[k - 1] = queue[k]; queue[queue_len - 1] = (char) val; } if (strcmp(queue, keyphrase) == 0) { config_set_cheat(); gui_set_label(play_id, sgettext("menu^Cheat")); gui_pulse(play_id, 1.2f); } else if (config_cheat()) { config_clr_cheat(); gui_set_label(play_id, sgettext("menu^Play")); gui_pulse(play_id, 1.2f); } break; } return 1; }
void gui_keyboard_lock(void) { lock = lock ? 0 : 1; gui_set_label(keyd['A'], lock ? "A" : "a"); gui_set_label(keyd['B'], lock ? "B" : "b"); gui_set_label(keyd['C'], lock ? "C" : "c"); gui_set_label(keyd['D'], lock ? "D" : "d"); gui_set_label(keyd['E'], lock ? "E" : "e"); gui_set_label(keyd['F'], lock ? "F" : "f"); gui_set_label(keyd['G'], lock ? "G" : "g"); gui_set_label(keyd['H'], lock ? "H" : "h"); gui_set_label(keyd['I'], lock ? "I" : "i"); gui_set_label(keyd['J'], lock ? "J" : "j"); gui_set_label(keyd['K'], lock ? "K" : "k"); gui_set_label(keyd['L'], lock ? "L" : "l"); gui_set_label(keyd['M'], lock ? "M" : "m"); gui_set_label(keyd['N'], lock ? "N" : "n"); gui_set_label(keyd['O'], lock ? "O" : "o"); gui_set_label(keyd['P'], lock ? "P" : "p"); gui_set_label(keyd['Q'], lock ? "Q" : "q"); gui_set_label(keyd['R'], lock ? "R" : "r"); gui_set_label(keyd['S'], lock ? "S" : "s"); gui_set_label(keyd['T'], lock ? "T" : "t"); gui_set_label(keyd['U'], lock ? "U" : "u"); gui_set_label(keyd['V'], lock ? "V" : "v"); gui_set_label(keyd['W'], lock ? "W" : "w"); gui_set_label(keyd['X'], lock ? "X" : "x"); gui_set_label(keyd['Y'], lock ? "Y" : "y"); gui_set_label(keyd['Z'], lock ? "Z" : "z"); }