void HudGaugeRadarDradis::drawBlipsSorted(int distort)
{
	matrix base_tilt = vmd_identity_matrix;
	
	vm_angle_2_matrix(&base_tilt, -PI/6, 0);
	
	for(int is_bright = 0; is_bright < 2; is_bright++) {
		sub_y_clip = true;
		g3_start_instance_matrix(&vmd_zero_vector, /*&Player_obj->orient*/&base_tilt, true);
			drawBlips(BLIP_TYPE_BOMB, is_bright, distort);
			drawBlips(BLIP_TYPE_JUMP_NODE, is_bright, distort);
			drawBlips(BLIP_TYPE_NORMAL_SHIP, is_bright, distort);
			drawBlips(BLIP_TYPE_TAGGED_SHIP, is_bright, distort);
			drawBlips(BLIP_TYPE_WARPING_SHIP, is_bright, distort);
			drawBlips(BLIP_TYPE_NAVBUOY_CARGO, is_bright, distort);
		g3_done_instance(true);
		
		drawOutlinesHtl();

		sub_y_clip = false;
		g3_start_instance_matrix(&vmd_zero_vector, /*&Player_obj->orient*/&base_tilt, true);
			drawBlips(BLIP_TYPE_BOMB, is_bright, distort);
			drawBlips(BLIP_TYPE_JUMP_NODE, is_bright, distort);
			drawBlips(BLIP_TYPE_NORMAL_SHIP, is_bright, distort);
			drawBlips(BLIP_TYPE_TAGGED_SHIP, is_bright, distort);
			drawBlips(BLIP_TYPE_WARPING_SHIP, is_bright, distort);
			drawBlips(BLIP_TYPE_NAVBUOY_CARGO, is_bright, distort);
		g3_done_instance(true);
	}
}
Exemplo n.º 2
0
void HudGaugeRadarOrb::render(float frametime)
{
    float	sensors_str;
    int ok_to_blit_radar;

    //WMC - This strikes me as a bit hackish
    bool g3_yourself = !g3_in_frame();
    if(g3_yourself)
        g3_start_frame(1);

    ok_to_blit_radar = 1;

    sensors_str = ship_get_subsystem_strength( Player_ship, SUBSYSTEM_SENSORS );

    if ( ship_subsys_disrupted(Player_ship, SUBSYSTEM_SENSORS) ) {
        sensors_str = MIN_SENSOR_STR_TO_RADAR-1;
    }

    // note that on lowest skill level, there is no radar effects due to sensors damage
    if ( (Game_skill_level == 0) || (sensors_str > SENSOR_STR_RADAR_NO_EFFECTS) ) {
        Radar_static_playing = 0;
        Radar_static_next = 0;
        Radar_death_timer = 0;
        Radar_avail_prev_frame = 1;
    } else if ( sensors_str < MIN_SENSOR_STR_TO_RADAR ) {
        if ( Radar_avail_prev_frame ) {
            Radar_death_timer = timestamp(2000);
            Radar_static_next = 1;
        }
        Radar_avail_prev_frame = 0;
    } else {
        Radar_death_timer = 0;
        if ( Radar_static_next == 0 )
            Radar_static_next = 1;
    }

    if ( timestamp_elapsed(Radar_death_timer) ) {
        ok_to_blit_radar = 0;
    }

    setGaugeColor();
    blitGauge();
    drawRange();

    setupViewHtl();
    drawOutlinesHtl();

    if ( timestamp_elapsed(Radar_static_next) ) {
        Radar_static_playing ^= 1;
        Radar_static_next = timestamp_rand(50, 750);
    }

    // if the emp effect is active, always draw the radar wackily
    if(emp_active_local()) {
        Radar_static_playing = 1;
    }

    if ( ok_to_blit_radar ) {
        if ( Radar_static_playing ) {
            drawBlipsSorted(1);	// passing 1 means to draw distorted
            if ( Radar_static_looping == -1 ) {
                Radar_static_looping = snd_play_looping(&Snds[SND_STATIC]);
            }
        } else {
            drawBlipsSorted(0);
            if ( Radar_static_looping != -1 ) {
                snd_stop(Radar_static_looping);
                Radar_static_looping = -1;
            }
        }
    } else {
        if ( Radar_static_looping != -1 ) {
            snd_stop(Radar_static_looping);
            Radar_static_looping = -1;
        }
    }

    doneDrawingHtl();

    if(g3_yourself)
        g3_end_frame();
}