void HudGaugeRadarDradis::drawContact(vec3d *pnt, int idx, int clr_idx, float /*dist*/, float alpha, float scale_factor) { vec3d p; int h, w; vertex vert; float aspect_mp; if ((sub_y_clip && (pnt->xyz.y > 0)) || ((!sub_y_clip) && (pnt->xyz.y <= 0))) return; memset(&vert, 0, sizeof(vert)); vm_vec_rotate(&p, pnt, &vmd_identity_matrix); g3_transfer_vertex(&vert, &p); float sizef = fl_sqrt(vm_vec_dist(&Orb_eye_position, pnt) * 8.0f) * scale_factor; if ( clr_idx >= 0 ) { bm_get_info(clr_idx, &w, &h); if (h == w) { aspect_mp = 1.0f; } else { aspect_mp = (((float) h) / ((float) w)); } //gr_set_bitmap(clr_idx, GR_ALPHABLEND_FILTER, GR_BITBLT_MODE_NORMAL, alpha); //g3_draw_polygon(&p, &vmd_identity_matrix, sizef/35.0f, aspect_mp*sizef/35.0f, TMAP_FLAG_TEXTURED | TMAP_HTL_3D_UNLIT); material mat_params; material_set_unlit_color(&mat_params, clr_idx, &Color_bright_white, alpha, true, false); g3_render_rect_oriented(&mat_params, &p, &vmd_identity_matrix, sizef/35.0f, aspect_mp*sizef/35.0f); } if ( idx >= 0 ) { bm_get_info(idx, &w, &h); if (h == w) { aspect_mp = 1.0f; } else { aspect_mp = (((float) h) / ((float) w)); } //gr_set_bitmap(idx, GR_ALPHABLEND_FILTER, GR_BITBLT_MODE_NORMAL, alpha); //g3_draw_polygon(&p, &vmd_identity_matrix, sizef/35.0f, aspect_mp*sizef/35.0f, TMAP_FLAG_TEXTURED | TMAP_FLAG_BW_TEXTURE | TMAP_HTL_3D_UNLIT); material mat_params; material_set_unlit_color(&mat_params, idx, &gr_screen.current_color, alpha, true, false); g3_render_rect_oriented(&mat_params, &p, &vmd_identity_matrix, sizef/35.0f, aspect_mp*sizef/35.0f); } }
void HudGaugeRadarOrb::drawContactImage(vec3d *pnt, int rad, int idx, int clr_idx, float mult) { int h, w; float aspect_mp; // need to get bitmap info bm_get_info(idx, &w, &h); Assert(w > 0); // get multiplier if (h == w) { aspect_mp = 1.0f; } else { aspect_mp = (((float) h) / ((float) w)); } //gr_set_bitmap(idx,GR_ALPHABLEND_NONE,GR_BITBLT_MODE_NORMAL,1.0f); float sizef = fl_sqrt(vm_vec_dist(&Orb_eye_position, pnt) * 8.0f); // might need checks unless the targeted blip is always wanted to be larger float radius = (float) Radar_blip_radius_normal; if (sizef < radius) sizef = radius; //Make so no evil things happen Assert(mult > 0.0f); //modify size according to value from tables sizef *= mult; // animate the targeted icon - option 1 of highlighting the targets if ( rad == Radar_blip_radius_target ) { if (radar_target_id_flags & RTIF_PULSATE) { // use mask to make the darn thing work faster sizef *= 1.3f + (sinf(10 * f2fl(Missiontime)) * 0.3f); } if (radar_target_id_flags & RTIF_BLINK) { if (Missiontime & 8192) return; } if (radar_target_id_flags & RTIF_ENLARGE) { sizef *= 1.3f; } } if ( idx >= 0 ) { //g3_draw_polygon(pnt, &vmd_identity_matrix, sizef/35.0f, aspect_mp*sizef/35.0f, tmap_flags); material mat_params; material_set_unlit_color(&mat_params, idx, &gr_screen.current_color, true, false); g3_render_rect_oriented(&mat_params, pnt, &vmd_identity_matrix, sizef / 35.0f, aspect_mp * sizef / 35.0f); } if ( clr_idx >= 0 ) { //g3_draw_polygon(pnt, &vmd_identity_matrix, sizef/35.0f, aspect_mp*sizef/35.0f, TMAP_FLAG_TEXTURED | TMAP_HTL_3D_UNLIT); material mat_params; material_set_unlit(&mat_params, clr_idx, 1.0f, true, false); g3_render_rect_oriented(&mat_params, pnt, &vmd_identity_matrix, sizef / 35.0f, aspect_mp * sizef / 35.0f); } }