Exemplo n.º 1
0
/**
 * Render the ETS retail gauge to the screen (weapon+shield+engine)
 */
void HudGaugeEtsRetail::render(float frametime)
{
	int i;
	int initial_position;

	ship* ship_p = &Ships[Player_obj->instance];

	if ( Ets_bar.first_frame < 0 ) {
		return;
	}

	// if at least two gauges are not shown, don't show any
	i = 0;
	if (!ship_has_energy_weapons(ship_p)) i++;
	if (Player_obj->flags & OF_NO_SHIELDS) i++;
	if (!ship_has_engine_power(ship_p)) i++;
	if (i >= 2) return;

	setGaugeColor();

	// draw the letters for the gauges first, before any clipping occurs
	// skip letter for any missing gauges (max one, see check above)
	initial_position = 0;
	if (ship_has_energy_weapons(ship_p)) {
		Letter = Letters[0];
		position[0] = Gauge_positions[initial_position++];
		renderPrintf(position[0] + Letter_offsets[0], position[1] + Letter_offsets[1], NOX("%c"), Letter);
	}
	if (!(Player_obj->flags & OF_NO_SHIELDS)) {
		Letter = Letters[1];
		position[0] = Gauge_positions[initial_position++];
		renderPrintf(position[0] + Letter_offsets[0], position[1] + Letter_offsets[1], NOX("%c"), Letter);
	}
	if (ship_has_engine_power(ship_p)) {
		Letter = Letters[2];
		position[0] = Gauge_positions[initial_position++];
		renderPrintf(position[0] + Letter_offsets[0], position[1] + Letter_offsets[1], NOX("%c"), Letter);
	}

	// draw gauges, skipping any gauge that is missing
	initial_position = 0;
	if (ship_has_energy_weapons(ship_p)) {
		Letter = Letters[0];
		position[0] = Gauge_positions[initial_position++];
		blitGauge(ship_p->weapon_recharge_index);
	}
	if (!(Player_obj->flags & OF_NO_SHIELDS)) {
		Letter = Letters[1];
		position[0] = Gauge_positions[initial_position++];
		blitGauge(ship_p->shield_recharge_index);
	}
	if (ship_has_engine_power(ship_p)) {
		Letter = Letters[2];
		position[0] = Gauge_positions[initial_position++];
		blitGauge(ship_p->engine_recharge_index);
	}
}
Exemplo n.º 2
0
void HudGaugeEtsWeapons::render(float frametime)
{
	int i;

	ship* ship_p = &Ships[Player_obj->instance];	

	if ( Ets_bar.first_frame < 0 ) {
		return;
	}

	// if at least two gauges are not shown, don't show any
	i = 0;
	if (!ship_has_energy_weapons(ship_p)) i++;
	if (Player_obj->flags & OF_NO_SHIELDS) i++;
	if (!ship_has_engine_power(ship_p)) i++;
	if (i >= 2) return;

	// no weapon energy, no weapon gauge
	if (!ship_has_energy_weapons(ship_p))
	{
		return;
	}

	setGaugeColor();

	// draw the letters for the gauge first, before any clipping occurs
	renderPrintf(position[0] + Letter_offsets[0], position[1] + Letter_offsets[1], NOX("%c"), Letter);

	// draw the gauges for the weapon system
	blitGauge(ship_p->weapon_recharge_index);
}
Exemplo n.º 3
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();
}