void barracks_display_pilot_callsigns(int prospective_pilot) { int y = 0; int cur_pilot_idx = List_scroll_offset; int multi = 0; if (Player_sel_mode == PLAYER_SELECT_MODE_MULTI) { multi = 1; } int font_height = gr_get_font_height(); while (y + font_height <= Barracks_list_coords[gr_screen.res][BARRACKS_H_COORD]) { if (cur_pilot_idx >= Num_pilots) break; if (!stricmp(Cur_pilot->callsign, Pilots[cur_pilot_idx]) && multi) { gr_set_color_fast(&Color_text_active); } else { if (cur_pilot_idx == Selected_line) { gr_set_color_fast(&Color_text_selected); } else if (cur_pilot_idx == prospective_pilot) { gr_set_color_fast(&Color_text_subselected); } else { gr_set_color_fast(&Color_text_normal); } } gr_printf_menu(Barracks_list_coords[gr_screen.res][BARRACKS_X_COORD], Barracks_list_coords[gr_screen.res][BARRACKS_Y_COORD] + y, Pilots[cur_pilot_idx]); gr_set_bitmap(Rank_pips_bitmaps + Pilot_ranks[cur_pilot_idx]); gr_bitmap(Barracks_list_coords[gr_screen.res][BARRACKS_X_COORD] - 34, Barracks_list_coords[gr_screen.res][BARRACKS_Y_COORD] + y, GR_RESIZE_MENU); y += font_height; cur_pilot_idx++; } }
void UI_WINDOW::render_tooltip(char *str) { int str_w, str_h; gr_get_string_size(&str_w, &str_h, str); Assert(str_w < gr_screen.max_w_unscaled - 4 && str_h < gr_screen.max_h_unscaled - 4); if (ttx < 2) ttx = 2; if (tty < 2) tty = 2; if (ttx + str_w + 2 > gr_screen.max_w_unscaled) ttx = gr_screen.max_w_unscaled - str_w; if (tty + str_h + 2 > gr_screen.max_h_unscaled) tty = gr_screen.max_h_unscaled - str_h; gr_set_color_fast(&Color_black); gr_rect(ttx - 1, tty - 1, str_w + 2, str_h + 1, GR_RESIZE_MENU); gr_set_color_fast(&Color_bright_white); gr_string(ttx, tty, str, GR_RESIZE_MENU); }
// Display a line of goal text // n = goal text line number // y = y offset to draw relative to goal text area top void goal_text::display(int n, int y) { int y1, w, h; char buf[MAX_GOAL_TEXT]; if ((n < 0) || (n >= m_num_lines) || (m_line_sizes[n] < 1)) return; // out of range, don't draw anything Assert(m_line_sizes[n] < MAX_GOAL_TEXT); y += Goal_screen_text_y; if (*m_lines[n] == '*') { // header line gr_set_color_fast(&Color_text_heading); strncpy(buf, m_lines[n] + 1, m_line_sizes[n] - 1); buf[m_line_sizes[n] - 1] = 0; gr_get_string_size(&w, &h, buf); y1 = y + h / 2 - 1; // custom_size me gr_line(Goal_screen_icon_x, y1, Goal_screen_text_x - 2, y1, GR_RESIZE_MENU); gr_line(Goal_screen_text_x + w + 1, y1, Goal_screen_icon_x + Goal_screen_text_w, y1, GR_RESIZE_MENU); } else { gr_set_color_fast(&Color_text_normal); strncpy(buf, m_lines[n], m_line_sizes[n]); buf[m_line_sizes[n]] = 0; } gr_printf_menu(Goal_screen_text_x, y, buf); }
void red_alert_blit_title() { const char *str = XSTR("Incoming Transmission", 1406); int w, h; // get the string size font::set_font(Ra_flash_font[gr_screen.res]); gr_get_string_size(&w, &h, str); // set alpha color color flash_color; if(Ra_flash_up){ gr_init_alphacolor(&flash_color, (int)(255.0f * (Ra_flash_time / RA_FLASH_CYCLE)), 0, 0, 255); } else { gr_init_alphacolor(&flash_color, (int)(255.0f * (1.0f - (Ra_flash_time / RA_FLASH_CYCLE))), 0, 0, 255); } // draw gr_set_color_fast(&flash_color); gr_string(Ra_brief_text_wnd_coords[gr_screen.res][0] + ((Ra_brief_text_wnd_coords[gr_screen.res][2] - w) / 2), Ra_flash_y[gr_screen.res] - h - 5, str, GR_RESIZE_MENU); gr_set_color_fast(&Color_normal); // increment flash time Ra_flash_time += flFrametime; if(Ra_flash_time >= RA_FLASH_CYCLE){ Ra_flash_time = 0.0f; Ra_flash_up = !Ra_flash_up; } // back to the original font font::set_font(font::FONT1); }
void player_select_draw_list() { int idx; if (gr_screen.res == 1) { Max_lines = 145/gr_get_font_height(); //Make the max number of lines dependent on the font height. 145 and 85 are magic numbers, based on the window size in retail. } else { Max_lines = 85/gr_get_font_height(); } for (idx=0; idx<Max_lines; idx++) { // only draw as many pilots as we have if ((idx + Player_select_list_start) == Player_select_num_pilots) { break; } // if the currently selected pilot is this line, draw it highlighted if ( (idx + Player_select_list_start) == Player_select_pilot) { // if he's the active pilot and is also the current selection, super-highlight him gr_set_color_fast(&Color_text_active); } else { // otherwise draw him normally gr_set_color_fast(&Color_text_normal); } // draw the actual callsign gr_printf_menu(Choose_list_coords[gr_screen.res][0], Choose_list_coords[gr_screen.res][1] + (idx * gr_get_font_height()), Pilots[idx + Player_select_list_start]); } }
void debug_draw() { int i; gr_clear(); gr_set_font(FONT1); gr_set_color_fast( &Color_bright ); gr_string( 0x8000, 3, "Debug Console" ); gr_set_color_fast( &Color_normal ); for (i=0; i<DROWS; i++ ) { gr_string( 0, i*16+16, debug_text[i] ); } int t = timer_get_fixed_seconds() / (F1_0/3); if ( t & 1 ) { int w,h; char c; c = debug_text[debug_y][command_line_pos+1]; debug_text[debug_y][command_line_pos+1] = 0; gr_get_string_size( &w, &h, debug_text[debug_y] ); //gr_string( w, debug_y*16, "_" ); gr_rect(w+1,debug_y*16+1+16,2,14); debug_text[debug_y][command_line_pos+1] = c; } gr_flip(); }
void UI_SCROLLBAR::draw() { UI_GADGET::draw(); if (uses_bmaps) { gr_reset_clip(); if (disabled_flag) { if ( bmap_ids[SB_DISABLED] != -1 ) { gr_set_bitmap(bmap_ids[SB_DISABLED]); gr_bitmap(x,y,GR_RESIZE_MENU); } } else { if ( bmap_ids[SB_NORMAL] != -1 ) { gr_set_bitmap(bmap_ids[SB_NORMAL]); gr_bitmap(x,y,GR_RESIZE_MENU); } } gr_set_clip( x, y, w, h, GR_RESIZE_MENU ); ui_draw_box_out( 0, bar_position, w - 1, bar_position + bar_size - 1 ); } else { font::set_font(my_wnd->f_id); gr_set_clip( x, y, w, h, GR_RESIZE_MENU ); if (my_wnd->selected_gadget == this) gr_set_color_fast(&CBRIGHT_GREEN); else gr_set_color_fast(&CGRAY); ui_rect( 0, 0, w-1, h-1 ); ui_draw_box_out( 0, bar_position, w - 1, bar_position + bar_size - 1 ); } }
// blit the player statistics void multi_pinfo_blit_player_stats() { int idx,y_start; // blit the player's callsign and "all time stats" gr_set_color_fast(&Color_bright); gr_string(Multi_pinfo_stats_area_coords[gr_screen.res][0], Multi_pinfo_stats_area_coords[gr_screen.res][1], Multi_pinfo_popup_player->m_player->callsign, GR_RESIZE_MENU); gr_string(Multi_pinfo_stats_x[gr_screen.res], Multi_pinfo_stats_area_coords[gr_screen.res][1], XSTR("All Time Stats", 128), GR_RESIZE_MENU); gr_set_color_fast(&Color_normal); // blit all the labels y_start = Multi_pinfo_stats_area_coords[gr_screen.res][1] + 15; for(idx=0;idx<MULTI_PINFO_NUM_STATS_LABELS;idx++){ gr_string(Multi_pinfo_stats_area_coords[gr_screen.res][0], y_start, Multi_pinfo_stats_labels[idx], GR_RESIZE_MENU); y_start += Multi_pinfo_stats_label_offsets[idx]; } // blit all the stats values themselves y_start = Multi_pinfo_stats_area_coords[gr_screen.res][1] + 15; for(idx=0;idx<MULTI_PINFO_NUM_STATS_LABELS;idx++){ gr_string(Multi_pinfo_stats_x[gr_screen.res], y_start, Multi_pinfo_stats_vals[idx], GR_RESIZE_MENU); y_start += Multi_pinfo_stats_label_offsets[idx]; } }
void dc_draw_window(bool show_prompt) { uint cmd_lines; // Number of lines for the command string uint buffer_lines; // Number of lines from the buffer to draw uint i; // The current row we're drawing uint j; // The current row of the command string we're drawing SCP_string out_str; // The command string + prompt character SCP_string::iterator str_it; // Iterator to out_str out_str = dc_prompt + dc_command_buf; cmd_lines = (out_str.size() / DCOLS) + 1; if (show_prompt) { buffer_lines = DROWS - cmd_lines; } else { buffer_lines = DROWS; } // Ensure the window is not bigger than the buffer CLAMP(DROWS, DROWS_MIN, DBROWS); CLAMP(DCOLS, DCOLS_MIN, DBCOLS); // Ensure we don't scroll too far dc_scroll_x = MIN(dc_scroll_x, (DBCOLS - DCOLS)); if (dc_buffer.size() >= buffer_lines) { dc_scroll_y = MIN(dc_scroll_y, (dc_buffer.size() - buffer_lines)); } else { dc_scroll_y = 0; // Disallow vscroll until the buffer is larger than the window } // Draw the buffer strings for (i = 0; i < buffer_lines; ++i) { if ((i + dc_scroll_y) < dc_buffer.size()) { gr_string(0, ((i * row_height) + row_height), dc_buffer[i + dc_scroll_y].substr(dc_scroll_x).c_str(), GR_RESIZE_NONE); } } // Draw the command string w/ padding only if the prompt is active. if (show_prompt) { i += 1; // 1 line between the output and the input text j = 0; gr_set_color_fast(&Color_bright); for (str_it = out_str.begin(); str_it < out_str.end(); ++str_it) { if (j == (DCOLS - 1)) { // Insert a newline char at every place the string needs to return the 'carriage' str_it = out_str.insert(str_it, '\n'); j = 0; } else { ++j; } } gr_string(0, ((i * row_height) + row_height), out_str.c_str(), GR_RESIZE_NONE); dc_draw_cursor(out_str, 0, ((i * row_height))); gr_set_color_fast(&Color_normal); } }
/** * Render jump node * * @param pos World position * @param view_pos Viewer's world position, can be NULL */ void CJumpNode::RenderDEPRECATED(vec3d *pos, vec3d *view_pos) { Assert(pos != NULL); // Assert(view_pos != NULL); - view_pos can be NULL if(m_flags & JN_HIDE) return; if(m_modelnum < 0) return; matrix node_orient = IDENTITY_MATRIX; int mr_flags = MR_NO_LIGHTING; if(!(m_flags & JN_SHOW_POLYS)) { mr_flags |= MR_NO_CULL | MR_NO_POLYS | MR_SHOW_OUTLINE_PRESET; } if ( Fred_running ) { gr_set_color_fast(&m_display_color); model_render_DEPRECATED(m_modelnum, &node_orient, pos, mr_flags ); } else { if (m_flags & JN_USE_DISPLAY_COLOR) { gr_set_color_fast(&m_display_color); } else if ( view_pos != NULL) { int alpha_index = HUD_color_alpha; // generate alpha index based on distance to jump this float dist; dist = vm_vec_dist_quick(view_pos, pos); // linearly interpolate alpha. At 1000m or less, full intensity. At 10000m or more 1/2 intensity. if ( dist < 1000 ) { alpha_index = HUD_COLOR_ALPHA_USER_MAX - 2; } else if ( dist > 10000 ) { alpha_index = HUD_COLOR_ALPHA_USER_MIN; } else { alpha_index = fl2i( HUD_COLOR_ALPHA_USER_MAX - 2 + (dist-1000) * (HUD_COLOR_ALPHA_USER_MIN-HUD_COLOR_ALPHA_USER_MAX-2) / (9000) + 0.5f); if ( alpha_index < HUD_COLOR_ALPHA_USER_MIN ) { alpha_index = HUD_COLOR_ALPHA_USER_MIN; } } gr_set_color_fast(&HUD_color_defaults[alpha_index]); } else { gr_set_color(HUD_color_red, HUD_color_green, HUD_color_blue); } model_render_DEPRECATED(m_modelnum, &node_orient, pos, mr_flags ); } }
// game_play_help_set_title() will display the title for the help screen and // set the font for the rest of the screen void gameplay_help_set_title(const char *title) { int sy=TITLE_Y; char buf[128]; gr_set_color_fast(&Color_bright); gr_printf_menu(0x8000,sy,title); sprintf(buf, XSTR( "Page %d of %d", 132), Current_help_page+1, Gp_last_screen+1); gr_printf_menu(0x8000,sy+gr_get_font_height()+2,buf); gr_set_color_fast(&Color_normal); }
void ui_draw_shad(int x1, int y1, int x2, int y2, color* c1, color* c2) { gr_set_color_fast(c1); ui_hline(x1 + 0, x2 - 1, y1 + 0); ui_vline(y1 + 1, y2 + 0, x1 + 0); gr_set_color_fast(c2); ui_hline(x1 + 1, x2, y2 - 0); ui_vline(y1 + 0, y2 - 1, x2 - 0); }
void ui_draw_sunken_border(int x1, int y1, int x2, int y2) { gr_set_color_fast(&CGRAY); ui_hline(x1 - 1, x2 + 1, y1 - 1); ui_vline(y1 - 1, y2 + 1, x1 - 1); gr_set_color_fast(&CBRIGHT); ui_hline(x1 - 1, x2 + 1, y2 + 1); ui_vline(y1, y2 + 1, x2 + 1); }
void dc_draw(bool show_prompt = FALSE) { gr_clear(); gr_set_font(dc_font); gr_set_color_fast( &Color_bright ); gr_string( 0x8000, 3, dc_title.c_str(), GR_RESIZE_NONE ); gr_set_color_fast( &Color_normal ); dc_draw_window(show_prompt); gr_flip(); }
// render a bezier void herm_spline::herm_render(int divs, color *clc) { int idx; int s_idx; float inc = 1.0f / (float)divs; vertex a, b, c; vec3d pt, d_pt; // draw in red gr_set_color_fast(clc); // render each section for(idx=0; idx<num_pts-1; idx++){ // render this piece herm_get_point(&pt, 0.0f, idx); g3_rotate_vertex(&a, &pt); // draw the deriv herm_get_deriv(&d_pt, 0.0f, idx); vm_vec_add2(&d_pt, &pt); g3_rotate_vertex(&c, &d_pt); g3_draw_line(&a, &c); for(s_idx=1; s_idx<divs * 2; s_idx++){ // second point herm_get_point(&pt, (float)s_idx * inc, idx); // 2nd point on the line g3_rotate_vertex(&b, &pt); // draw the line g3_draw_line(&a, &b); // draw the deriv line herm_get_deriv(&d_pt, (float)s_idx * inc, idx); vm_vec_add2(&d_pt, &pt); g3_rotate_vertex(&c, &d_pt); g3_draw_line(&b, &c); // store b a = b; } } // draw the control points gr_set_color_fast(&Color_bright_green); for(idx=0; idx<num_pts; idx++){ g3_draw_sphere_ez(&pts[idx], 0.75f); } }
void ui_draw_line_in(int x1, int y1, int x2, int y2) { gr_set_color_fast(&CGRAY); ui_hline(x1, x2, y1); ui_hline(x1, x2 - 1, y2 - 1); ui_vline(y1 + 1, y2 - 2, x1); ui_vline(y1 + 1, y2 - 2, x2 - 1); gr_set_color_fast(&CBRIGHT); ui_hline(x1 + 1, x2 - 1, y1 + 1); ui_hline(x1, x2, y2); ui_vline(y1 + 2, y2 - 2, x1 + 1); ui_vline(y1 + 1, y2 - 1, x2); }
// draw overlay on the screen void help_overlay_blit(int overlay_id) { int idx, width, height; int plinecount = help_overlaylist[overlay_id].plinecount; int textcount = help_overlaylist[overlay_id].textcount; int rbracketcount = help_overlaylist[overlay_id].rbracketcount; int lbracketcount = help_overlaylist[overlay_id].lbracketcount; Assert(overlay_id >= 0 && overlay_id < MAX_HELP_OVERLAYS); // this draws each line of help text with white on black text (use the GR_640 index for the string) for (idx = 0; idx < textcount; idx++) { gr_set_color_fast(&Color_black); gr_get_string_size(&width, &height, help_overlaylist[overlay_id].textlist[GR_640][idx].string, strlen(help_overlaylist[overlay_id].textlist[GR_640][idx].string)); gr_rect(help_overlaylist[overlay_id].textlist[gr_screen.res][idx].x_coord - 2 * HELP_PADDING, help_overlaylist[overlay_id].textlist[gr_screen.res][idx].y_coord - 3 * HELP_PADDING, width + 4 * HELP_PADDING, height + 4 * HELP_PADDING); gr_set_color_fast(&Color_bright_white); gr_printf(help_overlaylist[overlay_id].textlist[gr_screen.res][idx].x_coord, help_overlaylist[overlay_id].textlist[gr_screen.res][idx].y_coord, help_overlaylist[overlay_id].textlist[GR_640][idx].string); } // this draws each right bracket for (idx = 0; idx < rbracketcount; idx++) { gr_set_bitmap(help_right_bracket_bitmap); gr_bitmap(help_overlaylist[overlay_id].rbracketlist[gr_screen.res][idx].x_coord, help_overlaylist[overlay_id].rbracketlist[gr_screen.res][idx].y_coord); } // this draws each left bracket for (idx = 0; idx < lbracketcount; idx++) { gr_set_bitmap(help_left_bracket_bitmap); gr_bitmap(help_overlaylist[overlay_id].lbracketlist[gr_screen.res][idx].x_coord, help_overlaylist[overlay_id].lbracketlist[gr_screen.res][idx].y_coord); } // this draws each 2d line for the help screen //gr_set_color_fast(&Color_yellow); gr_set_color(255, 255, 0); for (idx = 0; idx < plinecount; idx++) { gr_pline_special(help_overlaylist[overlay_id].plinelist[gr_screen.res][idx].pvtx, help_overlaylist[overlay_id].plinelist[GR_640][idx].vtxcount, HELP_PLINE_THICKNESS); } }
// renders the stuff common to all 3 tech room tabs void tech_common_render() { char buf[256]; int y, z, font_height; // render description in its box gr_set_color_fast(&Color_text_normal); techroom_render_desc(Tech_desc_coords[gr_screen.res][SHIP_X_COORD], Tech_desc_coords[gr_screen.res][SHIP_Y_COORD], Tech_desc_coords[gr_screen.res][SHIP_H_COORD]); font_height = gr_get_font_height(); // draw the list of entries y = 0; z = List_offset; while (y + font_height <= Tech_list_coords[gr_screen.res][SHIP_H_COORD]) { if (z >= Current_list_size) { break; } if (z == Cur_entry) { gr_set_color_fast(&Color_text_selected); } else if (z == Select_tease_line) { gr_set_color_fast(&Color_text_subselected); } else { gr_set_color_fast(&Color_text_normal); } memset( buf, 0, sizeof(buf) ); strncpy(buf, Current_list[z].name, sizeof(buf) - 1); if (Lcl_gr) lcl_translate_ship_name_gr(buf); gr_force_fit_string(buf, 255, Tech_list_coords[gr_screen.res][SHIP_W_COORD]); gr_string(Tech_list_coords[gr_screen.res][SHIP_X_COORD], Tech_list_coords[gr_screen.res][SHIP_Y_COORD] + y, buf, GR_RESIZE_MENU); List_buttons[z - List_offset].update_dimensions(Tech_list_coords[gr_screen.res][SHIP_X_COORD], Tech_list_coords[gr_screen.res][SHIP_Y_COORD] + y, Tech_list_coords[gr_screen.res][SHIP_W_COORD], font_height); List_buttons[z - List_offset].enable(1); y += font_height; z++; } // disable the rest of the list buttons z -= List_offset; while (z < LIST_BUTTONS_MAX) { List_buttons[z++].disable(); } }
// draw copyright message on the bottom on the screen void player_select_display_copyright() { int sx, sy, w; char Copyright_msg1[256], Copyright_msg2[256]; // strcpy_s(Copyright_msg1, XSTR("Descent: FreeSpace - The Great War, Copyright c 1998, Volition, Inc.", -1)); gr_set_color_fast(&Color_white); // sprintf(Copyright_msg1, NOX("FreeSpace 2")); get_version_string(Copyright_msg1, sizeof(Copyright_msg1)); if (Lcl_gr) { sprintf(Copyright_msg2, XSTR("Copyright %c 1999, Volition, Inc. All rights reserved.", 385), '\xA8'); } else { sprintf(Copyright_msg2, XSTR("Copyright %c 1999, Volition, Inc. All rights reserved.", 385), '\x83'); } gr_get_string_size(&w, NULL, Copyright_msg1); sx = fl2i((gr_screen.max_w_unscaled / 2) - w/2.0f + 0.5f); sy = (gr_screen.max_h_unscaled - 2) - 2*gr_get_font_height(); gr_string(sx, sy, Copyright_msg1, GR_RESIZE_MENU); gr_get_string_size(&w, NULL, Copyright_msg2); sx = fl2i((gr_screen.max_w_unscaled / 2) - w/2.0f + 0.5f); sy = (gr_screen.max_h_unscaled - 2) - gr_get_font_height(); gr_string(sx, sy, Copyright_msg2, GR_RESIZE_MENU); }
// game_play_help_set_title() will display the title for the help screen and // set the font for the rest of the screen void gameplay_help_set_title(const char *title) { int sy=TITLE_Y; char buf[128]; gr_set_color_fast(&Color_bright); int w; gr_get_string_size(&w, NULL, title); gr_printf_menu((gr_screen.clip_width_unscaled - w) / 2,sy,"%s", title); sprintf(buf, XSTR("Page %d of %d", 132), Current_help_page + 1, Gp_last_screen + 1); gr_get_string_size(&w, NULL, buf); gr_printf_menu((gr_screen.clip_width_unscaled - w) / 2, sy + gr_get_font_height() + 2, "%s", buf); gr_set_color_fast(&Color_normal); }
void dc_draw(bool show_prompt = FALSE) { gr_clear(); font::set_font(dc_font); gr_set_color_fast( &Color_bright ); int w; gr_get_string_size(&w, nullptr, dc_title.c_str()); gr_string((gr_screen.clip_width - w) / 2, 3, dc_title.c_str(), GR_RESIZE_NONE ); gr_set_color_fast( &Color_normal ); dc_draw_window(show_prompt); gr_flip(); }
// display void multi_rate_display(int np_index, int x, int y) { int idx; mr_info *m; // sanity checks if((np_index < 0) || (np_index >= MAX_RATE_PLAYERS)){ return; } // get info for(idx=0; idx<MAX_RATE_TYPES; idx++){ m = &Multi_rate[np_index][idx]; // if we have a 0 length string, we're done if(strlen(m->type) <= 0){ break; } // display gr_set_color_fast(&Color_red); gr_printf(x, y, "%s %d (%d/s) (%f/f)", m->type, m->total_bytes, (int)m->avg_second, m->avg_frame); y += 10; } }
// draw copyright message on the bottom on the screen void player_select_display_copyright() { int sx, sy, w; char Copyright_msg1[256], Copyright_msg2[256]; // strcpy_s(Copyright_msg1, XSTR("Descent: FreeSpace - The Great War, Copyright c 1998, Volition, Inc.", -1)); gr_set_color_fast(&Color_white); // sprintf(Copyright_msg1, NOX("FreeSpace 2")); get_version_string(Copyright_msg1, sizeof(Copyright_msg1)); if (Unicode_text_mode) { // Use a Unicode character if we are in unicode mode instead of using special characters strcpy_s(Copyright_msg2, XSTR("Copyright \xC2\xA9 1999, Volition, Inc. All rights reserved.", 385)); } else { sprintf(Copyright_msg2, XSTR("Copyright %c 1999, Volition, Inc. All rights reserved.", 385), lcl_get_font_index(font::get_current_fontnum()) + 4); } gr_get_string_size(&w, NULL, Copyright_msg1); sx = fl2i((gr_screen.max_w_unscaled / 2) - w/2.0f + 0.5f); sy = (gr_screen.max_h_unscaled - 2) - 2*gr_get_font_height(); gr_string(sx, sy, Copyright_msg1, GR_RESIZE_MENU); gr_get_string_size(&w, NULL, Copyright_msg2); sx = fl2i((gr_screen.max_w_unscaled / 2) - w/2.0f + 0.5f); sy = (gr_screen.max_h_unscaled - 2) - gr_get_font_height(); gr_string(sx, sy, Copyright_msg2, GR_RESIZE_MENU); }
// Draw the button text nicely formatted in the popup void popup_draw_button_text(popup_info *pi, int flags) { int w, h, i, sx, sy; gr_set_color_fast(&Color_bright_blue); for ( i=0; i < pi->nchoices; i++ ) { gr_get_string_size(&w, &h, pi->button_text[i]); if ( (pi->nchoices == 1) && (flags&PF_USE_AFFIRMATIVE_ICON) ) { sx = Button_regions[gr_screen.res][i+1][0]-w; sy = Button_regions[gr_screen.res][i+1][1]+4; } else { sx = Button_regions[gr_screen.res][i][0]-w; sy = Button_regions[gr_screen.res][i][1]+4; } gr_string(sx, sy, pi->button_text[i], GR_RESIZE_MENU); // figure out where to draw underline char if ( pi->shortcut_index[i] > 0 ) { int cut=pi->shortcut_index[i]; char save_char=pi->button_text[i][cut]; pi->button_text[i][cut] = 0; gr_get_string_size(&w, &h, pi->button_text[i]); pi->button_text[i][cut] = save_char; sx += w; } if ( pi->shortcut_index[i] >= 0 ) { gr_printf_menu(sx, sy, NOX("%c"), 95); } } }
void UI_ICON::draw() { if (uses_bmaps) { gr_reset_clip(); if (disabled_flag) { if (bmap_ids[ICON_DISABLED] != -1) { gr_set_bitmap(bmap_ids[ICON_DISABLED]); gr_bitmap(x,y); } } else if (this->is_mouse_on()) { if (B1_PRESSED) { if (bmap_ids[ICON_SELECTED] != -1) { gr_set_bitmap(bmap_ids[ICON_SELECTED]); gr_bitmap(x, y); } } else { if (bmap_ids[ICON_HIGHLIGHT] != -1) { gr_set_bitmap(bmap_ids[ICON_HIGHLIGHT]); gr_bitmap(x, y); } } } else { if (bmap_ids[ICON_NORMAL] != -1) { gr_set_bitmap(bmap_ids[ICON_NORMAL]); gr_bitmap(x, y); } } } else { gr_set_font(my_wnd->f_id); gr_set_clip(x, y, w, h); ui_draw_box_out(0, 0, w-1, h-1); if (disabled_flag) gr_set_color_fast(&CDARK_GRAY); else gr_set_color_fast(&CBLACK); if (text) ui_string_centered(Middle(w), Middle(h), text); gr_reset_clip(); } }
// Draw all the active radar blips void HudGaugeRadarOrb::drawBlips(int blip_type, int bright, int distort) { blip *b = NULL; blip *blip_head = NULL; vec3d pos; Assert((blip_type >= 0) && (blip_type < MAX_BLIP_TYPES)); // Need to set font. font::set_font(font::FONT1); // get the appropriate blip list if (bright) blip_head = &Blip_bright_list[blip_type]; else blip_head = &Blip_dim_list[blip_type]; // draw all blips of this type for (b = GET_FIRST(blip_head); b != END_OF_LIST(blip_head); b = GET_NEXT(b)) { gr_set_color_fast(b->blip_color); plotBlip(b, &pos); // maybe draw cool blip to indicate current target if (b->flags & BLIP_CURRENT_TARGET) { b->rad = Radar_blip_radius_target; target_position = pos; } else { b->rad = Radar_blip_radius_normal; } // maybe distort blip if (distort) { blipDrawDistorted(b, &pos); } else if (b->flags & BLIP_DRAW_DISTORTED) { blipDrawFlicker(b, &pos); } else { if (b->radar_image_2d >= 0 || b->radar_color_image_2d >= 0) { drawContactImage(&pos, b->rad, b->radar_image_2d, b->radar_color_image_2d, b->radar_projection_size); } else { drawContactHtl(&pos,b->rad); } } } }
// Set the color for the text to be displayed // Goober5000 - changed second parameter from "friendly" (true/false) to "team"; // also changed from hud color or red to team color int hud_escort_set_gauge_color(int index, int team) { int is_flashing = 0; int is_bright = 0; int seen_from_team = (Player_ship != NULL) ? Player_ship->team : -1; shield_hit_info* shi; shi = &Escort_ships[index].hit_info; // multiplayer dogfight if ((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT)) { hud_set_gauge_color(HUD_ESCORT_VIEW); return 0; } // set flashing color if (!timestamp_elapsed(shi->shield_hit_timers[HULL_HIT_OFFSET])) { if (timestamp_elapsed(shi->shield_hit_next_flash[HULL_HIT_OFFSET])) { shi->shield_hit_next_flash[HULL_HIT_OFFSET] = timestamp(SHIELD_FLASH_INTERVAL); shi->shield_show_bright ^= (1 << HULL_HIT_OFFSET); // toggle between default and bright frames } is_flashing = 1; if (shi->shield_show_bright & (1 << HULL_HIT_OFFSET)) { is_bright = 1; } } // Goober5000 - now base this on team color gr_set_color_fast(iff_get_color_by_team_and_object(team, seen_from_team, is_bright, &Objects[Escort_ships[index].objnum])); // Goober5000 - an alternative; same as original but incorporating teams for non-friendlies /* if ((seen_from_team == team) || (seen_from_team < 0)) // :V: sez assume friendly if Player_ship is NULL hud_set_gauge_color(HUD_ESCORT_VIEW, is_bright ? HUD_C_BRIGHT : HUD_C_DIM); else gr_set_color_fast(iff_get_color_by_team(team, seen_from_team, is_bright)); */ // Goober5000 - original color logic /* if ((seen_from_team == team) || (seen_from_team < 0)) // :V: sez assume friendly if Player_ship is NULL hud_set_gauge_color(HUD_ESCORT_VIEW, is_bright ? HUD_C_BRIGHT : HUD_C_DIM); else gr_set_color_fast(is_bright ? &Color_bright_red : &Color_red); */ return is_flashing; }
void ui_draw_box_in(int x1, int y1, int x2, int y2) { gr_set_color_fast(&CWHITE); gr_rect(x1 + 2, y1 + 2, (x2 - 2) - (x1 + 2) + 1, (y2 - 2) - (y1 + 2) + 1); ui_draw_shad(x1 + 0, y1 + 0, x2 - 0, y2 - 0, &CGRAY, &CBRIGHT); ui_draw_shad(x1 + 1, y1 + 1, x2 - 1, y2 - 1, &CGRAY, &CBRIGHT); }
void UI_WINDOW::draw() { UI_GADGET *tmp; gr_reset_clip(); font::set_font(f_id); if (foreground_bmap_id >= 0) { gr_set_bitmap(foreground_bmap_id); gr_bitmap(x, y, GR_RESIZE_MENU); } if (flags & WIN_FILLED) { ui_draw_box_out(x, y, x+w-1, y+h-1); } if (flags & WIN_BORDER) { ui_draw_frame(x-BORDER_WIDTH, y-BORDER_WIDTH, x+w+BORDER_WIDTH-1, y+h+BORDER_WIDTH-1); } if (first_gadget) { tmp = first_gadget; do { if (!tmp->hidden) tmp->draw(); tmp = tmp->next; } while (tmp != first_gadget); } if (first_gadget) { tmp = first_gadget; do { if (!tmp->hidden && (tmp->kind == UI_KIND_BUTTON) && ((UI_BUTTON *) tmp)->button_down()){ tmp->draw(); } tmp = tmp->next; } while (tmp != first_gadget); } // draw all xstrs draw_xstrs(); // draw tooltips draw_tooltip(); // convenient debug code for showing mouse coords if(Cmdline_mouse_coords){ int mx, my; mouse_get_pos(&mx, &my); // mprintf(("MOUSE (%d, %d)\n", mx, my)); gr_set_color_fast(&Color_normal); gr_printf_no_resize(mx, my - 12, "%d %d", mx, my); } }
void HudGaugeRadarStd::drawBlips(int blip_type, int bright, int distort) { blip *b = NULL; blip *blip_head = NULL; int x, y; Assert((blip_type >= 0) && (blip_type < MAX_BLIP_TYPES)); // Need to set font. gr_set_font(FONT1); // get the appropriate blip list if (bright) blip_head = &Blip_bright_list[blip_type]; else blip_head = &Blip_dim_list[blip_type]; // draw all blips of this type for (b = GET_FIRST(blip_head); b != END_OF_LIST(blip_head); b = GET_NEXT(b)) { gr_set_color_fast(b->blip_color); plotBlip(b, &x, &y); // maybe draw cool blip to indicate current target if (b->flags & BLIP_CURRENT_TARGET) { b->rad = Radar_blip_radius_target; current_target_x = x; current_target_y = y; } else { b->rad = Radar_blip_radius_normal; } // maybe distort blip if (distort) { blipDrawDistorted(b, x, y); } else if (b->flags & BLIP_DRAW_DISTORTED) { blipDrawFlicker(b, x, y); } else { if (b->radar_image_2d == -1 && b->radar_color_image_2d == -1) drawContactCircle(x, y, b->rad); else drawContactImage(x, y, b->rad, b->radar_image_2d, b->radar_color_image_2d, b->radar_image_size); } } }