// Update the status of the wingman status void hud_wingman_status_update() { if ( timestamp_elapsed(HUD_wingman_update_timer) ) { int wing_index,wing_pos; ship_obj *so; object *ship_objp; ship *shipp; HUD_wingman_update_timer=timestamp(HUD_WINGMAN_UPDATE_STATUS_INTERVAL); for ( so = GET_FIRST(&Ship_obj_list); so != END_OF_LIST(&Ship_obj_list); so = GET_NEXT(so) ) { ship_objp = &Objects[so->objnum]; shipp = &Ships[ship_objp->instance]; wing_index = shipp->wing_status_wing_index; wing_pos = shipp->wing_status_wing_pos; if ( (wing_index >= 0) && (wing_pos >= 0) && !(ship_objp->flags & OF_SHOULD_BE_DEAD) ) { HUD_wingman_status[wing_index].used = 1; if (!(shipp->flags & SF_DEPARTING) ) { HUD_wingman_status[wing_index].status[wing_pos] = HUD_WINGMAN_STATUS_ALIVE; } HUD_wingman_status[wing_index].hull[wing_pos] = get_hull_pct(ship_objp); if ( HUD_wingman_status[wing_index].hull[wing_pos] <= 0 ) { HUD_wingman_status[wing_index].status[wing_pos] = HUD_WINGMAN_STATUS_DEAD; } } } } }
void hud_show_mini_ship_integrity(object* objp, int x_force, int y_force) { char text_integrity[64]; int numeric_integrity; float p_target_integrity; int final_pos[2]; p_target_integrity = get_hull_pct(objp); numeric_integrity = fl2i(p_target_integrity * 100 + 0.5f); if (numeric_integrity > 100) { numeric_integrity = 100; } // Assert(numeric_integrity <= 100); // 3 digit hull strength if (numeric_integrity == 100) { memcpy(final_pos, current_hud->Hud_mini_3digit, sizeof(final_pos)); } // 1 digit hull strength else if (numeric_integrity < 10) { memcpy(final_pos, current_hud->Hud_mini_1digit, sizeof(final_pos)); } // 2 digit hull strength else { memcpy(final_pos, current_hud->Hud_mini_2digit, sizeof(final_pos)); } if (numeric_integrity == 0) { if (p_target_integrity > 0) { numeric_integrity = 1; } } final_pos[0] += fl2i(HUD_offset_x); final_pos[1] += fl2i(HUD_offset_y); sprintf(text_integrity, "%d", numeric_integrity); if (numeric_integrity < 100) { hud_num_make_mono(text_integrity); } gr_string(final_pos[0] + HUD_nose_x, final_pos[1] + HUD_nose_y, text_integrity); }
void hud_show_mini_ship_integrity(object *objp, int x_force, int y_force) { char text_integrity[64]; int numeric_integrity; float p_target_integrity; int final_pos[2]; p_target_integrity = get_hull_pct(objp); numeric_integrity = fl2i(p_target_integrity*100 + 0.5f); if(numeric_integrity > 100){ numeric_integrity = 100; } // Assert(numeric_integrity <= 100); // 3 digit hull strength if ( numeric_integrity == 100 ) { final_pos[0] = x_force + Hud_mini_3digit[gr_screen.res][0] - Shield_mini_coords[gr_screen.res][0]; final_pos[1] = y_force + Hud_mini_3digit[gr_screen.res][1] - Shield_mini_coords[gr_screen.res][1]; } // 1 digit hull strength else if ( numeric_integrity < 10 ) { final_pos[0] = x_force + Hud_mini_1digit[gr_screen.res][0] - Shield_mini_coords[gr_screen.res][0]; final_pos[1] = y_force + Hud_mini_1digit[gr_screen.res][1] - Shield_mini_coords[gr_screen.res][1]; } // 2 digit hull strength else { final_pos[0] = x_force + Hud_mini_2digit[gr_screen.res][0] - Shield_mini_coords[gr_screen.res][0]; final_pos[1] = y_force + Hud_mini_2digit[gr_screen.res][1] - Shield_mini_coords[gr_screen.res][1]; } if ( numeric_integrity == 0 ) { if ( p_target_integrity > 0 ) { numeric_integrity = 1; } } sprintf(text_integrity, "%d", numeric_integrity); if ( numeric_integrity < 100 ) { hud_num_make_mono(text_integrity); } gr_string(final_pos[0], final_pos[1], text_integrity); }
// Draw the miniature shield icon that is drawn near the reticle void HudGaugeShieldMini::showMiniShields(object *objp) { float max_shield; int hud_color_index, range, frame_offset; int sx, sy, i; if ( objp->type != OBJ_SHIP ) { return; } setGaugeColor(); sx = position[0]+fl2i(HUD_offset_x); sy = position[1]+fl2i(HUD_offset_y); // draw the ship first maybeFlashShield(SHIELD_HIT_TARGET, Shield_hit_data[SHIELD_HIT_TARGET].hull_hit_index); showIntegrity(get_hull_pct(objp)); // draw the four quadrants // Draw shield quadrants at one of NUM_SHIELD_LEVELS max_shield = get_max_shield_quad(objp); for ( i = 0; i < objp->n_quadrants; i++ ) { if ( objp->flags[Object::Object_Flags::No_shields] ) { break; } if ( objp->shield_quadrant[Quadrant_xlate[i]] < 0.1f ) { continue; } if ( maybeFlashShield(SHIELD_HIT_TARGET, i) ) { frame_offset = i+objp->n_quadrants; } else { frame_offset = i; } range = HUD_color_alpha; hud_color_index = fl2i( (objp->shield_quadrant[Quadrant_xlate[i]] / max_shield) * range + 0.5); Assert(hud_color_index >= 0 && hud_color_index <= range); if ( hud_color_index < 0 ) { hud_color_index = 0; } if ( hud_color_index >= HUD_NUM_COLOR_LEVELS ) { hud_color_index = HUD_NUM_COLOR_LEVELS - 1; } if ( maybeFlashSexp() == 1) { // hud_set_bright_color(); setGaugeColor(HUD_C_BRIGHT); } else { // gr_set_color_fast(&HUD_color_defaults[hud_color_index]); setGaugeColor(hud_color_index); } if (frame_offset < Shield_mini_gauge.num_frames) renderBitmap(Shield_mini_gauge.first_frame + frame_offset, sx, sy); } // hud_set_default_color(); }