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 ); } }
// 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); } }
// gameplay_help_do_frame() is the function that displays help when acutally playing the game void gameplay_help_do_frame(float frametime) { int i, k; // ensure the gameplay help interface has been initialized if (!Gameplay_help_inited) { Int3(); return; } // make sure game sounds are paused weapon_pause_sounds(); audiostream_pause_all(); k = Ui_window.process() & ~KEY_DEBUGGED; gameplay_help_process_key(k); for (i=0; i<NUM_BUTTONS; i++){ if (Buttons[gr_screen.res][i].button.pressed()){ gameplay_help_button_pressed(i); } } GR_MAYBE_CLEAR_RES(Background_bitmap); if (Background_bitmap >= 0) { gr_set_bitmap(Background_bitmap); gr_bitmap(0, 0, GR_RESIZE_MENU); } Ui_window.draw(); gameplay_help_draw_text(); gr_flip(); }
// called once per frame when game state is GS_STATE_RED_ALERT void red_alert_do_frame(float frametime) { int i, k; // ensure that the red alert interface has been initialized if (!Red_alert_inited) { Int3(); return; } // commit if skipping briefing, but not in multi - Goober5000 if (!(Game_mode & GM_MULTIPLAYER)) { if (The_mission.flags[Mission::Mission_Flags::No_briefing]) { red_alert_button_pressed(RA_CONTINUE); return; } } k = Ui_window.process() & ~KEY_DEBUGGED; switch (k) { case KEY_ESC: // gameseq_post_event(GS_EVENT_ENTER_GAME); gameseq_post_event(GS_EVENT_MAIN_MENU); break; } // end switch for (i=0; i<NUM_BUTTONS; i++){ if (Buttons[gr_screen.res][i].button.pressed()){ red_alert_button_pressed(i); } } GR_MAYBE_CLEAR_RES(Background_bitmap); if (Background_bitmap >= 0) { gr_set_bitmap(Background_bitmap); gr_bitmap(0, 0, GR_RESIZE_MENU); } Ui_window.draw(); // hud_anim_render(&Flash_anim, frametime); font::set_font(font::FONT1); if ( timestamp_elapsed(Text_delay) ) { int finished_wipe = 0; if ( Briefing->num_stages > 0 ) { finished_wipe = brief_render_text(0, Ra_brief_text_wnd_coords[gr_screen.res][RA_X_COORD], Ra_brief_text_wnd_coords[gr_screen.res][RA_Y_COORD], Ra_brief_text_wnd_coords[gr_screen.res][RA_H_COORD], frametime, 0); } if (finished_wipe) { red_alert_voice_play(); } } // blit incoming transmission red_alert_blit_title(); gr_flip(); }
void techroom_anim_render(float frametime) { int x, y; // render common stuff tech_common_render(); // render the animation if(Current_list[Cur_entry].animation.num_frames > 0) { //grab dimensions bm_get_info((Current_list[Cur_entry].animation.streaming) ? Current_list[Cur_entry].animation.bitmap_id : Current_list[Cur_entry].animation.first_frame, &x, &y, NULL, NULL, NULL); //get the centre point - adjust x = Tech_ani_centre_coords[gr_screen.res][0] - x / 2; y = Tech_ani_centre_coords[gr_screen.res][1] - y / 2; generic_anim_render(&Current_list[Cur_entry].animation, frametime, x, y, true); } // if our active item has a bitmap instead of an animation, draw it else if((Cur_entry >= 0) && (Current_list[Cur_entry].bitmap >= 0)){ //grab dimensions bm_get_info(Current_list[Cur_entry].bitmap, &x, &y, NULL, NULL, NULL); //get the centre point - adjust x = Tech_ani_centre_coords[gr_screen.res][0] - x / 2; y = Tech_ani_centre_coords[gr_screen.res][1] - y / 2; gr_set_bitmap(Current_list[Cur_entry].bitmap); gr_bitmap(x, y, GR_RESIZE_MENU); } }
void vclip_play( vclip * vc, fix frame_time ) { int bitmapnum; if ( vc == NULL ) return; if ( vc != Vclip_ptr ) { // Start new vclip Vclip_ptr = vc; Vclip_animation_time = 1; // Calculate the frame/second of the playback Vclip_playback_speed = fixdiv(i2f(Vclip_ptr->num_frames),Vclip_ptr->play_time); } if ( Vclip_animation_time <= 0 ) return; // Find next bitmap in the vclip bitmapnum = f2i(Vclip_animation_time); // Check if vclip is done playing. if (bitmapnum >= Vclip_ptr->num_frames) { Vclip_animation_time = 1; // Restart this vclip bitmapnum = 0; } PIGGY_PAGE_IN( Vclip_ptr->frames[bitmapnum] ); gr_bitmap(0,0,&GameBitmaps[Vclip_ptr->frames[bitmapnum].index] ); Vclip_animation_time += fixmul(frame_time, Vclip_playback_speed ); }
//draws the given model in the current canvas. The distance is set to //more-or-less fill the canvas. Note that this routine actually renders //into an off-screen canvas that it creates, then copies to the current //canvas. void draw_model_picture(int mn,vms_angvec *orient_angles) { vms_vector temp_pos=ZERO_VECTOR; vms_matrix temp_orient = IDENTITY_MATRIX; grs_canvas *save_canv = grd_curcanv,*temp_canv; Assert(mn>=0 && mn<N_polygon_models); temp_canv = gr_create_canvas(save_canv->cv_bitmap.bm_w,save_canv->cv_bitmap.bm_h); gr_set_current_canvas(temp_canv); gr_clear_canvas( BM_XRGB(0,0,0) ); g3_start_frame(); g3_set_view_matrix(&temp_pos,&temp_orient,0x9000); if (Polygon_models[mn].rad != 0) temp_pos.z = fixmuldiv(DEFAULT_VIEW_DIST,Polygon_models[mn].rad,BASE_MODEL_SIZE); else temp_pos.z = DEFAULT_VIEW_DIST; vm_angles_2_matrix(&temp_orient, orient_angles); PA_DFX(save_light = Lighting_on); PA_DFX(Lighting_on = 0); draw_polygon_model(&temp_pos,&temp_orient,NULL,mn,0,f1_0,NULL,NULL); PA_DFX (Lighting_on = save_light); gr_set_current_canvas(save_canv); gr_bitmap(0,0,&temp_canv->cv_bitmap); gr_free_canvas(temp_canv); }
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++; } }
//------------- Called once per frame to do the hostage effects -------------------------------- //returns true if something drew int do_hostage_effects() { int bitmapnum; // Don't do the effect if the time is <= 0 if ( Hostage_animation_time < 0 ) return 0; // Find next bitmap in the vclip bitmapnum = f2i(Hostage_animation_time); // Check if vclip is done playing. if (bitmapnum >= Hostage_vclip->num_frames) { stop_hostage_clip(); if (Hostage_animation_time >= 0) //new clip bitmapnum = f2i(Hostage_animation_time); else return 0; //no new one } get_hostage_window_coords(&Hostage_monitor_x,&Hostage_monitor_y,&Hostage_monitor_w,&Hostage_monitor_h); PIGGY_PAGE_IN(Hostage_vclip->frames[bitmapnum]); gr_bitmap(Hostage_monitor_x,Hostage_monitor_y,Hostage_vclip->frames[bitmapnum]); // Increment the hostage rescue time scaled to playback speed. // This means that the integer part of the fix is the frame number // of the animation. Hostage_animation_time += fixmul(FrameTime,HostagePlaybackSpeed); return 1; }
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(); } }
// run the popup in a tight loop (no states) void multi_pinfo_popup_do() { int k; // if there was an error in initialization, return immediately if (Multi_pinfo_popup_error) { return; } // tight loop while (!Multi_pinfo_popup_done) { multi_pinfo_maybe_reload_pic(&Mp_pilot); multi_pinfo_maybe_reload_pic(&Mp_squad); // process the window k = Multi_pinfo_window.process(); switch (k) { case KEY_ESC : Multi_pinfo_popup_done = 1; break; } // check button presses multi_pinfo_popup_check_buttons(); // set frametime and run background stuff game_set_frametime(-1); game_do_state_common(gameseq_get_state()); // draw the background bitmap and the ui window over it Assert(Multi_pinfo_screen_save != -1); gr_reset_clip(); gr_restore_screen(Multi_pinfo_screen_save); // grey the screen gr_set_shader(&Grey_shader); gr_shade(0, 0, gr_screen.clip_width, gr_screen.clip_height, false); // draw the background bitmap gr_set_bitmap(Multi_pinfo_bitmap); gr_bitmap(0, 0); // blit the selected pilot image multi_pinfo_blit_pilot_image(); // blit the squadron logo multi_pinfo_blit_squadron_logo(); // blit the player statistics multi_pinfo_blit_player_stats(); // draw the ui window and flip Multi_pinfo_window.draw(); gr_flip(); } }
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); } }
//canvas set // Type is optional. If you pass -1, type is determined, else type is used, and id is not xlated through ObjId. draw_robot_picture(int id, vms_angvec *orient_angles, int type) { if (id >= Num_total_object_types) return; if ( type == -1 ) { type = ObjType[id]; // Find the object type, given an object id. id = ObjId[id]; // Translate to sub-id. } switch (type) { case OL_HOSTAGE: PIGGY_PAGE_IN(Vclip[Hostage_vclip_num[id]].frames[0]); gr_bitmap(0,0,&GameBitmaps[Vclip[Hostage_vclip_num[id]].frames[0].index]); break; case OL_POWERUP: if ( Powerup_info[id].vclip_num > -1 ) { PIGGY_PAGE_IN(Vclip[Powerup_info[id].vclip_num].frames[0]); gr_bitmap(0,0,&GameBitmaps[Vclip[Powerup_info[id].vclip_num].frames[0].index]); } break; case OL_PLAYER: draw_model_picture(Player_ship->model_num,orient_angles); // Draw a poly model below break; case OL_ROBOT: draw_model_picture(Robot_info[id].model_num,orient_angles); // Draw a poly model below break; case OL_CONTROL_CENTER: case OL_CLUTTER: draw_model_picture(id,orient_angles); break; default: //Int3(); // Invalid type!!! return; } }
void UI_DOT_SLIDER::draw() { if ( has_end_buttons ) { up_button.draw(); down_button.draw(); } Assert((pos >= 0) && (pos <= num_pos)); gr_set_bitmap(first_frame + pos); // draw the dot level gr_bitmap(x, y, GR_RESIZE_MENU); }
// blit the pilot squadron logo void multi_pinfo_blit_squadron_logo() { char place_text[100]; int w; player* p = Multi_pinfo_popup_player->m_player; // if we don't have a bitmap handle, blit a placeholder if (Mp_squad.bitmap == -1) { gr_set_color_fast(&Color_normal); // if there is no image if (strlen(p->squad_filename) <= 0) { strcpy_s(place_text, XSTR("No/Invalid Image", 1053)); } // if the image is xferring else if (multi_xfer_lookup(p->squad_filename)) { strcpy_s(place_text, XSTR("Image Transferring", 691)); } // if we're not accepting images else if (!(Net_player->p_info.options.flags & MLO_FLAG_ACCEPT_PIX) || !(Netgame.options.flags & MSO_FLAG_ACCEPT_PIX)) { strcpy_s(place_text, XSTR("No Image", 692)); } // otherwise we wait else { strcpy_s(place_text, XSTR("Waiting", 690)); } // center the text gr_get_string_size(&w, NULL, place_text); gr_string(Multi_pinfo_squad_coords[gr_screen.res][0] + ((Multi_pinfo_squad_coords[gr_screen.res][2] - w) / 2), Multi_pinfo_squad_coords[gr_screen.res][1], place_text); } // otherwise blit the bitmap else { gr_set_bitmap(Mp_squad.bitmap); // gr_bitmap(MPI_SQUAD_X, MPI_SQUAD_Y); // get width and heigh int bm_w, bm_h; bm_get_info(Mp_squad.bitmap, &bm_w, &bm_h, NULL, NULL, NULL); gr_bitmap(Multi_pinfo_squad_coords[gr_screen.res][0] + ((Multi_pinfo_squad_coords[gr_screen.res][2] - bm_w) / 2), Multi_pinfo_squad_coords[gr_screen.res][1] + ((Multi_pinfo_squad_coords[gr_screen.res][3] - bm_h) / 2)); // g3_draw_2d_poly_bitmap(Multi_pinfo_squad_coords[gr_screen.res][0], Multi_pinfo_squad_coords[gr_screen.res][1], Multi_pinfo_squad_coords[gr_screen.res][2], Multi_pinfo_squad_coords[gr_screen.res][3]); } }
void ML_render_objectives_key() { // display icon key at the bottom if (Lcl_gr) { gr_set_bitmap(Goal_complete_bitmap); gr_bitmap(Objective_key_icon_coords_gr[gr_screen.res][0][0], Objective_key_icon_coords_gr[gr_screen.res][0][1], GR_RESIZE_MENU); gr_set_bitmap(Goal_incomplete_bitmap); gr_bitmap(Objective_key_icon_coords_gr[gr_screen.res][1][0], Objective_key_icon_coords_gr[gr_screen.res][1][1], GR_RESIZE_MENU); gr_set_bitmap(Goal_failed_bitmap); gr_bitmap(Objective_key_icon_coords_gr[gr_screen.res][2][0], Objective_key_icon_coords_gr[gr_screen.res][2][1], GR_RESIZE_MENU); gr_string(Objective_key_text_coords_gr[gr_screen.res][0][0], Objective_key_text_coords_gr[gr_screen.res][0][1] , XSTR("Complete", 1437), GR_RESIZE_MENU); gr_string(Objective_key_text_coords_gr[gr_screen.res][1][0], Objective_key_text_coords_gr[gr_screen.res][1][1] , XSTR("Incomplete", 1438), GR_RESIZE_MENU); gr_string(Objective_key_text_coords_gr[gr_screen.res][2][0], Objective_key_text_coords_gr[gr_screen.res][2][1] , XSTR("Failed", 1439), GR_RESIZE_MENU); } else { gr_set_bitmap(Goal_complete_bitmap); gr_bitmap(Objective_key_icon_coords[gr_screen.res][0][0], Objective_key_icon_coords[gr_screen.res][0][1], GR_RESIZE_MENU); gr_set_bitmap(Goal_incomplete_bitmap); gr_bitmap(Objective_key_icon_coords[gr_screen.res][1][0], Objective_key_icon_coords[gr_screen.res][1][1], GR_RESIZE_MENU); gr_set_bitmap(Goal_failed_bitmap); gr_bitmap(Objective_key_icon_coords[gr_screen.res][2][0], Objective_key_icon_coords[gr_screen.res][2][1], GR_RESIZE_MENU); gr_string(Objective_key_text_coords[gr_screen.res][0][0], Objective_key_text_coords[gr_screen.res][0][1] , XSTR("Complete", 1437), GR_RESIZE_MENU); gr_string(Objective_key_text_coords[gr_screen.res][1][0], Objective_key_text_coords[gr_screen.res][1][1] , XSTR("Incomplete", 1438), GR_RESIZE_MENU); gr_string(Objective_key_text_coords[gr_screen.res][2][0], Objective_key_text_coords[gr_screen.res][2][1] , XSTR("Failed", 1439), GR_RESIZE_MENU); } }
void ML_render_objectives_key() { #ifndef MAKE_FS1 // display icon key at the bottom gr_set_bitmap(Goal_complete_bitmap, GR_ALPHABLEND_NONE, GR_BITBLT_MODE_NORMAL, 1.0f, -1, -1); if (Lcl_gr) { gr_bitmap(Objective_key_icon_coords_gr[gr_screen.res][0][0], Objective_key_icon_coords_gr[gr_screen.res][0][1]); gr_set_bitmap(Goal_incomplete_bitmap, GR_ALPHABLEND_NONE, GR_BITBLT_MODE_NORMAL, 1.0f, -1, -1); gr_bitmap(Objective_key_icon_coords_gr[gr_screen.res][1][0], Objective_key_icon_coords_gr[gr_screen.res][1][1]); gr_set_bitmap(Goal_failed_bitmap, GR_ALPHABLEND_NONE, GR_BITBLT_MODE_NORMAL, 1.0f, -1, -1); gr_bitmap(Objective_key_icon_coords_gr[gr_screen.res][2][0], Objective_key_icon_coords_gr[gr_screen.res][2][1]); gr_string(Objective_key_text_coords_gr[gr_screen.res][0][0], Objective_key_text_coords_gr[gr_screen.res][0][1] , XSTR("Complete", 1437)); gr_string(Objective_key_text_coords_gr[gr_screen.res][1][0], Objective_key_text_coords_gr[gr_screen.res][1][1] , XSTR("Incomplete", 1438)); gr_string(Objective_key_text_coords_gr[gr_screen.res][2][0], Objective_key_text_coords_gr[gr_screen.res][2][1] , XSTR("Failed", 1439)); } else { gr_set_bitmap(Goal_complete_bitmap, GR_ALPHABLEND_NONE, GR_BITBLT_MODE_NORMAL, 1.0f, -1, -1); gr_bitmap(Objective_key_icon_coords[gr_screen.res][0][0], Objective_key_icon_coords[gr_screen.res][0][1]); gr_set_bitmap(Goal_incomplete_bitmap, GR_ALPHABLEND_NONE, GR_BITBLT_MODE_NORMAL, 1.0f, -1, -1); gr_bitmap(Objective_key_icon_coords[gr_screen.res][1][0], Objective_key_icon_coords[gr_screen.res][1][1]); gr_set_bitmap(Goal_failed_bitmap, GR_ALPHABLEND_NONE, GR_BITBLT_MODE_NORMAL, 1.0f, -1, -1); gr_bitmap(Objective_key_icon_coords[gr_screen.res][2][0], Objective_key_icon_coords[gr_screen.res][2][1]); gr_string(Objective_key_text_coords[gr_screen.res][0][0], Objective_key_text_coords[gr_screen.res][0][1] , XSTR("Complete", 1437)); gr_string(Objective_key_text_coords[gr_screen.res][1][0], Objective_key_text_coords[gr_screen.res][1][1] , XSTR("Incomplete", 1438)); gr_string(Objective_key_text_coords[gr_screen.res][2][0], Objective_key_text_coords[gr_screen.res][2][1] , XSTR("Failed", 1439)); } #endif }
// draw overlay on the screen void help_overlay_blit(int overlay_id, int resolution_index) { 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 first resolution index for the string) gr_set_font(help_overlaylist[overlay_id].fontlist.at(resolution_index)); for (idx = 0; idx < textcount; idx++) { gr_set_color_fast(&Color_black); gr_get_string_size(&width, &height, help_overlaylist[overlay_id].textlist.at(0).at(idx).string, strlen(help_overlaylist[overlay_id].textlist.at(0).at(idx).string)); gr_rect(help_overlaylist[overlay_id].textlist.at(resolution_index).at(idx).x_coord-2*HELP_PADDING, help_overlaylist[overlay_id].textlist.at(resolution_index).at(idx).y_coord-3*HELP_PADDING, width+4*HELP_PADDING, height+4*HELP_PADDING, GR_RESIZE_MENU); gr_set_color_fast(&Color_bright_white); gr_printf_menu(help_overlaylist[overlay_id].textlist.at(resolution_index).at(idx).x_coord, help_overlaylist[overlay_id].textlist.at(resolution_index).at(idx).y_coord, help_overlaylist[overlay_id].textlist.at(0).at(idx).string); } gr_set_font(FONT1); // 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.at(resolution_index).at(idx).x_coord, help_overlaylist[overlay_id].rbracketlist.at(resolution_index).at(idx).y_coord, GR_RESIZE_MENU); } // 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.at(resolution_index).at(idx).x_coord, help_overlaylist[overlay_id].lbracketlist.at(resolution_index).at(idx).y_coord, GR_RESIZE_MENU); } // 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.at(resolution_index).at(idx).vtx, HELP_PLINE_THICKNESS, GR_RESIZE_MENU); } }
// called once a frame during show goals state to process events and render the screen void mission_show_goals_do_frame(float frametime) { int k, i, y, z; int font_height = gr_get_font_height(); k = Goals_screen_ui_window.process(); switch (k) { case KEY_ESC: mission_goal_exit(); break; case KEY_DOWN: goal_screen_scroll_down(); break; case KEY_UP: goal_screen_scroll_up(); break; default: // do nothing break; } // end switch for (i=0; i<NUM_GOAL_SCREEN_BUTTONS; i++){ if (Goal_buttons[i].button.pressed()){ goal_screen_button_pressed(i); } } GR_MAYBE_CLEAR_RES(Goals_screen_bg_bitmap); if (Goals_screen_bg_bitmap >= 0) { gr_set_bitmap(Goals_screen_bg_bitmap); gr_bitmap(0, 0, GR_RESIZE_MENU); } Goals_screen_ui_window.draw(); y = 0; z = Scroll_offset; while (y + font_height <= Goal_screen_text_h) { Goal_text.display(z, y); y += font_height; z++; } Primary_goal_list.icons_display(Scroll_offset); Secondary_goal_list.icons_display(Scroll_offset); Bonus_goal_list.icons_display(Scroll_offset); gr_flip(); }
void training_menu_do_frame(float frametime) { int training_menu_choice; if (!training_menu_inited) { training_menu_init(); training_menu_inited = 1; } gr_reset_clip(); gr_set_color(0, 0, 0); GR_MAYBE_CLEAR_RES(trainingMenuBitmap); // set the background if (trainingMenuBitmap != -1) { gr_set_bitmap(trainingMenuBitmap); gr_bitmap(0, 0); } int snazzy_action = -1; training_menu_choice = snazzy_menu_do(mask_data, Training_mask_w, Training_mask_h, num_training, region, &snazzy_action); if (snazzy_action != SNAZZY_CLICKED) { training_menu_choice = -1; } switch (training_menu_choice) { case TRAINING_MENU_TRAINING_MISSIONS_MASK: break; case TRAINING_MENU_REPLAY_MISSIONS_MASK: // TODO: load the mission and start the briefing break; case TRAINING_MENU_RETURN_MASK: case ESC_PRESSED: gameseq_post_event(GS_EVENT_MAIN_MENU); break; case -1: // nothing selected break; default: Error(LOCATION, "Unknown option %d in training menu screen", training_menu_choice); break; } // end switch gr_flip(); }
// Force button to draw a specified frame void UI_BUTTON::draw_forced(int frame_num) { if (uses_bmaps) { if (bmap_ids[frame_num] >= 0) { gr_set_bitmap(bmap_ids[frame_num]); gr_bitmap(x, y); // my_wnd->draw_tooltip(); // redraw any associated xstr my_wnd->draw_XSTR_forced(this, frame_num); } } }
//------------------------------------------------------------------- void state_callback(int nitems,newmenu_item * items, int * last_key, int citem) { // if ( sc_last_item != citem ) { // sc_last_item = citem; if ( citem > 0 ) { if ( sc_bmp[citem-1] ) { if (MenuHires) { grs_canvas *save_canv = grd_curcanv; grs_canvas *temp_canv = gr_create_canvas(THUMBNAIL_W*2,(THUMBNAIL_H*24/10)); grs_point vertbuf[3] = {{0,0}, {0,0}, {i2f(THUMBNAIL_W*2),i2f(THUMBNAIL_H*24/10)} }; gr_set_current_canvas(temp_canv); scale_bitmap(sc_bmp[citem-1], vertbuf, 0 ); gr_set_current_canvas( save_canv ); gr_bitmap( (grd_curcanv->cv_bitmap.bm_w-THUMBNAIL_W*2)/2,items[0].y-10, &temp_canv->cv_bitmap); gr_free_canvas(temp_canv); } else { gr_bitmap( (grd_curcanv->cv_bitmap.bm_w-THUMBNAIL_W)/2,items[0].y-5, sc_bmp[citem-1] ); } } } // } }
// do frame void multi_df_debrief_do() { int k, new_k; char buf[256]; k = chatbox_process(); new_k = Multi_df_window.process(k, 0); // process keypresses switch(new_k){ case KEY_ESC: multi_debrief_esc_hit(); break; } // process buttons multi_df_process_buttons(); // music stuff common_music_do(); // process debriefing details multi_debrief_do_frame(); // draw the background GR_MAYBE_CLEAR_RES(Multi_df_background_bitmap); if (Multi_df_background_bitmap >= 0) { gr_set_bitmap(Multi_df_background_bitmap); gr_bitmap(0, 0, GR_RESIZE_MENU); } // draw the window Multi_df_window.draw(); // kill matrix multi_df_blit_kill_matrix(); // render the chatbox chatbox_render(); // draw the mission title strcpy_s(buf, The_mission.name); font::force_fit_string(buf, 255, Kill_matrix_title_coords[gr_screen.res][2]); gr_set_color_fast(&Color_bright_white); gr_string(Kill_matrix_title_coords[gr_screen.res][0], Kill_matrix_title_coords[gr_screen.res][1], buf, GR_RESIZE_MENU); // flip gr_flip(); }
void gr_opengl_restore_screen(int bmp_id) { gr_reset_clip(); if ( !GL_saved_screen ) { gr_clear(); return; } Assert( (bmp_id < 0) || (bmp_id == GL_saved_screen_id) ); if (GL_saved_screen_id < 0) return; gr_set_bitmap(GL_saved_screen_id); gr_bitmap(0, 0, GR_RESIZE_NONE); // don't scale here since we already have real screen size }
void UI_SLIDER2::draw() { Assert((currentPosition >= 0) && (currentPosition <= numberPositions)); if (uses_bmaps && !disabled_flag) { gr_reset_clip(); switch (slider_mode) { case S2M_ON_ME: gr_set_bitmap(bmap_ids[S2_HIGHLIGHT]); // draw slider level break; case S2M_MOVING: gr_set_bitmap(bmap_ids[S2_PRESSED]); break; case S2M_DEFAULT: default: gr_set_bitmap(bmap_ids[S2_NORMAL]); // draw slider level break; } gr_bitmap(x, y+currentPosition, GR_RESIZE_MENU); } }
void state_callback(int nitems,newmenu_item * items, int * last_key, int citem) { grs_canvas *save_canv; nitems = nitems; last_key = last_key; // if ( sc_last_item != citem ) { // sc_last_item = citem; if ( citem > 0 ) { if ( sc_bmp[citem-1] ) { save_canv = grd_curcanv;; gr_set_current_canvas( NULL ); gr_bitmap( (grd_curcanv->cv_bitmap.bm_w-THUMBNAIL_W)/2,items[0].y-5, sc_bmp[citem-1] ); gr_set_current_canvas(save_canv); } } // } }
// draw pilot image and clean up afterwards void barracks_draw_pilot_pic() { // draw pilot pic if (Cur_pilot->callsign[0] && (Pic_number >= 0) && (Pic_number < Num_pilot_images)) { if (Pilot_images[Pic_number] >= 0) { // JAS: This code is hacked to allow the animation to use all 256 colors extern int Palman_allow_any_color; Palman_allow_any_color = 1; gr_set_bitmap(Pilot_images[Pic_number]); gr_bitmap(Barracks_image_coords[gr_screen.res][BARRACKS_X_COORD], Barracks_image_coords[gr_screen.res][BARRACKS_Y_COORD], GR_RESIZE_MENU); Palman_allow_any_color = 0; // print number of the current pic char buf[40]; sprintf(buf, XSTR( "%d of %d", 71), Pic_number + 1, Num_pilot_images); gr_printf_menu(Barracks_image_number_coords[gr_screen.res][BARRACKS_X_COORD], Barracks_image_number_coords[gr_screen.res][BARRACKS_Y_COORD], buf); } } else { Pic_number = -1; } }
void show_fullscr(grs_bitmap *bm) { grs_bitmap * const scr = &grd_curcanv->cv_bitmap; #ifdef OGL if(bm->bm_type == BM_LINEAR && scr->bm_type == BM_OGL && bm->bm_w <= grd_curscreen->sc_w && bm->bm_h <= grd_curscreen->sc_h) // only scale with OGL if bitmap is not bigger than screen size { ogl_ubitmapm_cs(0,0,-1,-1,bm,-1,F1_0);//use opengl to scale, faster and saves ram. -MPM return; } #endif if(scr->bm_type != BM_LINEAR) { grs_bitmap *tmp = gr_create_bitmap(scr->bm_w, scr->bm_h); gr_bitmap_scale_to(bm, tmp); gr_bitmap(0, 0, tmp); gr_free_bitmap(tmp); return; } gr_bitmap_scale_to(bm, scr); }
void pilot_manage_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(); //cur_pilot_idx = 1; while (y + font_height <= Pilot_manage_list_coords[gr_screen.res][PM_H_COORD]) { if (cur_pilot_idx >= Num_pilots) break; if (!stricmp(Cur_pilot->callsign, Pilots[cur_pilot_idx]) && (is_pilot_multi(Cur_pilot) == multi)) { if ((cur_pilot_idx == Selected_line) || (cur_pilot_idx == prospective_pilot)) { gr_set_color_fast(&Color_text_active_hi); } else { 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(Pilot_manage_list_coords[gr_screen.res][PM_X_COORD], Pilot_manage_list_coords[gr_screen.res][PM_Y_COORD] + y, Pilots[cur_pilot_idx]); gr_set_bitmap(Rank_pips_bitmaps + Pilot_ranks[cur_pilot_idx]); gr_bitmap(Pilot_manage_list_coords[gr_screen.res][PM_X_COORD] - 34, Pilot_manage_list_coords[gr_screen.res][PM_Y_COORD] + y); y += font_height; cur_pilot_idx++; } }
// render the chatbox for this frame void chatbox_render() { if (!Chatbox_created){ return; } // clear the multiplayer chat window // gr_set_clip(Chatbox_x1, Chatbox_y1, Chatbox_w, Chatbox_h, GR_RESIZE_MENU); // gr_clear(); // gr_reset_clip(); // draw the background bitmap if we're supposed to if ( (Chatbox_bitmap != -1) && (Chatbox_mode_flags & CHATBOX_FLAG_DRAW_BOX)) { gr_set_bitmap( Chatbox_bitmap ); gr_bitmap(Chatbox_x1, Chatbox_y1, GR_RESIZE_MENU); } // render the chat lines chatbox_render_chat_lines(); // render any UI window stuff Chat_window.draw(); }