Ejemplo n.º 1
0
void pre_render_kiowa_virtual_cockpit_displays (void)
{
	switch (get_view_mode ())
	{
		case VIEW_MODE_VIRTUAL_COCKPIT_CREW:
		case VIEW_MODE_VIRTUAL_COCKPIT_PILOT_LHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_PILOT_RHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_LHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_RHS_DISPLAY:
		{
			break;
		}
		default:
		{
			if (!get_global_draw_cockpit_graphics ())
			{
				return;
			}

			break;
		}
	}

	draw_kiowa_mfd ();

	if (get_view_mode () == VIEW_MODE_VIRTUAL_COCKPIT_CREW)
	{
		draw_kiowa_hud_on_lens_texture ();
	}
}
Ejemplo n.º 2
0
void pre_render_hokum_virtual_cockpit_displays (void)
{
	switch (get_view_mode ())
	{
		case VIEW_MODE_VIRTUAL_COCKPIT_CREW:
		case VIEW_MODE_VIRTUAL_COCKPIT_HUD:
		case VIEW_MODE_VIRTUAL_COCKPIT_PILOT_LHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_PILOT_RHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_LHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_RHS_DISPLAY:
		{
			break;
		}
		default:
		{
			if (!get_global_draw_cockpit_graphics ())
			{
				return;
			}

			break;
		}
	}

	draw_hokum_mfd ();

	draw_hokum_hud ();
}
Ejemplo n.º 3
0
static void draw_local_3d_object (entity *en, float range)
{
	helicopter
		*raw;

	int
		internal_view;

	raw = get_local_entity_data (en);

	//
	// the player's gunship is visible from the menus - where the in_cockpit flag is invalid
	//

	if (en == get_gunship_entity ())
	{
		internal_view = ((in_cockpit) && (get_in_flight_game_mode () == IN_FLIGHT_GAME_MODE_SIMULATOR));
	}
	else
	{
		internal_view = FALSE;
	}

	////////////////////////////////////////
	//
	// SORT COMANCHE AND HOKUM INSTANCES
	//
	// It is necessary to switch parts on and off for all Comanche and Hokum instances
	// because the player can change gunship so the instances need to be fixed up.
	//
	////////////////////////////////////////

	{
		int
			draw_virtual_cockpit_parts,
			draw_canopy_doors,
			draw_loading_doors,
			ejected;

		object_3d_sub_object_search_data
			search;

		if (raw->ac.object_3d_shape == OBJECT_3D_RAH66)
		{
			////////////////////////////////////////
			//
			// Comanche
			//
			////////////////////////////////////////

			//
			// draw 'canopy' doors on player object and 'loading' doors on AI object
			//

			draw_virtual_cockpit_parts = FALSE;

			draw_canopy_doors = FALSE;

			draw_loading_doors = FALSE;

			if (en == get_gunship_entity ())
			{
				draw_canopy_doors = TRUE;

				if (internal_view)
				{
					draw_virtual_cockpit_parts = TRUE;
				}
			}
			else
			{
				draw_loading_doors = TRUE;
			}

			//
			// fuselage
			//

			search.search_depth = 0;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_RAH66_FUSELAGE;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = !draw_virtual_cockpit_parts;
			}

			//
			// canopy/loading doors
			//

			search.search_depth = 0;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_CANOPY_DOORS;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = draw_canopy_doors;
			}

			search.search_depth = 1;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_CANOPY_DOORS;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = draw_canopy_doors;
			}

			search.search_depth = 0;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_LOADING_DOOR;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = draw_loading_doors;
			}

			search.search_depth = 1;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_LOADING_DOOR;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = draw_loading_doors;
			}
		}
		else if (raw->ac.object_3d_shape == OBJECT_3D_KA_52)
		{
			////////////////////////////////////////
			//
			// Hokum
			//
			////////////////////////////////////////

			//
			// draw 'canopy' doors on player object and 'loading' doors on AI object
			//

			ejected = get_local_entity_int_value (en, INT_TYPE_EJECTED);

			draw_virtual_cockpit_parts = FALSE;

			draw_canopy_doors = FALSE;

			draw_loading_doors = FALSE;

			if (en == get_gunship_entity ())
			{
				if (!ejected)
				{
					draw_canopy_doors = TRUE;
				}

				if (internal_view)
				{
					draw_virtual_cockpit_parts = TRUE;
				}
			}
			else
			{
				if (!ejected)
				{
					draw_loading_doors = TRUE;
				}
			}

			//
			// stub wings
			//

			search.search_depth = 0;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_KA52_WINGS;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = draw_virtual_cockpit_parts;
			}

			//
			// fuselage
			//

			search.search_depth = 0;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_KA52_FUSELAGE;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = !draw_virtual_cockpit_parts;
			}

			//
			// canopy/loading doors
			//

			search.search_depth = 0;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_CANOPY_DOORS;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = draw_canopy_doors;
			}

			search.search_depth = 1;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_CANOPY_DOORS;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = draw_canopy_doors;
			}

			search.search_depth = 0;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_LOADING_DOOR;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = draw_loading_doors;
			}

			search.search_depth = 1;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_LOADING_DOOR;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = draw_loading_doors;
			}

			//
			// ejector seats & crew
			//

			search.search_depth = 0;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_KA52_EJECTOR_SEAT;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = !ejected;
			}

			search.search_depth = 1;
			search.search_object = raw->ac.inst3d;
			search.sub_object_index = OBJECT_3D_SUB_OBJECT_KA52_EJECTOR_SEAT;

			if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
			{
				search.result_sub_object->visible_object = !ejected;
			}
		}
	}

	////////////////////////////////////////

	if (en == get_gunship_entity ())
	{
		//
		// update viewpoint
		//

		raw->ac.inst3d->vp.position = raw->ac.mob.position;

		memcpy (&raw->ac.inst3d->vp.attitude, &raw->ac.mob.attitude, sizeof (matrix3x3));

		//
		// animate
		//

		if (!internal_view)
		{
			if (raw->main_rotor_damaged)
			{
				animate_damaged_helicopter_main_rotors (en, TRUE);
			}
			else
			{
				animate_helicopter_main_rotors (en, TRUE, FALSE);
			}
		}

		animate_helicopter_tail_rotor (en);

		animate_helicopter_wipers (en);

		animate_helicopter_eo (en);

		animate_aircraft_loading_doors (en);

		animate_aircraft_cargo_doors (en);

		animate_aircraft_undercarriage (en);

		animate_aircraft_weapon_system_ready (en);

		animate_aircraft_shadow (en);

		animate_aircraft_rudder (en);

		raw->ac.inst3d->object_internal_lighting = object_internal_lighting_valid (en);

		raw->ac.inst3d->object_sprite_lights = (raw->ac.inst3d->object_internal_lighting && sprite_light_valid (en));

		//
		// draw
		//

		if (!internal_view)
		{
			if (!in_flight_invisible_object)
			{
				animate_and_draw_entity_muzzle_flash_effect (en);

				insert_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_OBJECT, raw->ac.inst3d);
			}
		}
		else
		{
			if (get_comanche_hokum_gunship ())
			{
				if (get_global_draw_cockpit_graphics ())
				{
					if (!get_global_glass_cockpit ())
					{
						if
						(
							(get_view_mode () == VIEW_MODE_VIRTUAL_COCKPIT_CREW) ||
							(get_global_cockpit_detail_level () == COCKPIT_DETAIL_LEVEL_HIGH)
						)
						{
							animate_and_draw_entity_muzzle_flash_effect (en);

							raw->ac.inst3d->vp.position = virtual_cockpit_inst3d->vp.position;

							memcpy (&raw->ac.inst3d->vp.attitude, &virtual_cockpit_inst3d->vp.attitude, sizeof (matrix3x3));

							insert_relative_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_ZBUFFERED_OBJECT, &raw->ac.inst3d->vp.position, raw->ac.inst3d);
						}
					}
				}
			}
		}
	}
	else
	{
		//
		// update viewpoint
		//

		raw->ac.inst3d->vp.position = raw->ac.mob.position;

		memcpy (&raw->ac.inst3d->vp.attitude, &raw->ac.mob.attitude, sizeof (matrix3x3));

		//
		// animate
		//

		if (get_local_entity_int_value (en, INT_TYPE_ALIVE))
		{
			animate_helicopter_main_rotors (en, FALSE, FALSE);
		}
		else
		{
			animate_damaged_helicopter_main_rotors (en, FALSE);
		}

		animate_helicopter_tail_rotor (en);

		animate_aircraft_loading_doors (en);

		animate_aircraft_cargo_doors (en);

		animate_aircraft_undercarriage (en);

		animate_aircraft_weapon_system_ready (en);

		animate_aircraft_shadow (en);

		animate_and_draw_entity_muzzle_flash_effect (en);

		raw->ac.inst3d->object_internal_lighting = object_internal_lighting_valid (en);

		raw->ac.inst3d->object_sprite_lights = (raw->ac.inst3d->object_internal_lighting && sprite_light_valid (en));

		//
		// draw
		//

		insert_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_OBJECT, raw->ac.inst3d);
	}

	////////////////////////////////////////
	//
	// draw comanche and hokum shadows
	//
	////////////////////////////////////////

	if (raw->ac.object_3d_shape == OBJECT_3D_RAH66)
	{
		object_3d_instance
			*shadow_object;

		shadow_object = construct_temporary_3d_object (OBJECT_3D_RAH66_FUSELAGE, FALSE);

		shadow_object->vp = raw->ac.inst3d->vp;

		insert_object_shadow_into_3d_scene (shadow_object);
	}
	else if (raw->ac.object_3d_shape == OBJECT_3D_KA_52)
	{
		object_3d_instance
			*shadow_object;

		shadow_object = construct_temporary_3d_object (OBJECT_3D_KA_52_FUSELAGE, FALSE);

		shadow_object->vp = raw->ac.inst3d->vp;

		insert_object_shadow_into_3d_scene (shadow_object);
	}

	////////////////////////////////////////

	#if DEBUG_MODULE

	if (en == get_external_view_entity ())
	{
		draw_mobile_entity_debug_info (en);
	}

	#endif
}
Ejemplo n.º 4
0
void draw_kiowa_virtual_cockpit (void)
{
	int
		draw_main_rotors;

	float
		theta;

	object_3d_instance
		*inst3d;

	object_3d_sub_object_search_data
		search;

	switch (get_view_mode ())
	{
		case VIEW_MODE_VIRTUAL_COCKPIT_CREW:
		case VIEW_MODE_VIRTUAL_COCKPIT_PILOT_LHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_PILOT_RHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_LHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_RHS_DISPLAY:
		{
			break;
		}
		default:
		{
			if (!get_global_draw_cockpit_graphics ())
			{
				return;
			}

			break;
		}
	}

	//
	// lamps
	//

	draw_kiowa_virtual_cockpit_lamps ();

	//
	// crew animation
	//

	set_kiowa_crew_head_positions ();

	//
	// animate main rotors
	//

	if (get_local_entity_int_value (get_gunship_entity (), INT_TYPE_MAIN_ROTOR_DAMAGED))
	{
		animate_damaged_helicopter_main_rotors (get_gunship_entity (), TRUE);
	}
	else
	{
		animate_helicopter_main_rotors (get_gunship_entity (), TRUE, FALSE);
	}

	inst3d = (object_3d_instance *) get_local_entity_ptr_value (get_gunship_entity (), PTR_TYPE_INSTANCE_3D_OBJECT);

	theta = get_rotation_angle_of_helicopter_main_rotors (inst3d);

	set_rotation_angle_of_helicopter_main_rotors (virtual_cockpit_inst3d, theta);

	animate_helicopter_virtual_cockpit_main_rotors (get_gunship_entity (), virtual_cockpit_inst3d);

	draw_main_rotors = TRUE;

	if (get_global_glass_cockpit ())
	{
		draw_main_rotors = FALSE;
	}
	else
	{
		if (get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CREW)
		{
			if (get_helicopter_main_rotors_blurred (get_gunship_entity ()))
			{
				if (!get_global_blurred_main_rotors_visible_from_cockpit ())
				{
					draw_main_rotors = FALSE;
				}
			}
		}
	}

	search.search_depth = 0;
	search.search_object = virtual_cockpit_inst3d;
	search.sub_object_index = OBJECT_3D_SUB_OBJECT_MAIN_ROTOR_SHAFT;

	if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
	{
		search.result_sub_object->visible_object = draw_main_rotors;
	}

	//
	// draw 3D scene
	//

	set_3d_view_distances (main_3d_env, 10.0, 0.1, 1.0, 0.0);

	realise_3d_clip_extents (main_3d_env);

	recalculate_3d_environment_settings (main_3d_env);

	clear_zbuffer_screen ();

	if (begin_3d_scene ())
	{
		//
		// light direction is in world coordinates
		//

		light_3d_source
			*display_backlight,
			*cockpit_light;

		vec3d
			direction;

		matrix3x3
			m1,
			m2;

//VJ 050131 update on wideview mod, much better movement
		if (get_global_wide_cockpit () &&
			( get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_PILOT_LHS_DISPLAY &&
				get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_PILOT_RHS_DISPLAY &&
				get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_LHS_DISPLAY &&
				get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_RHS_DISPLAY )
			)
		{
				get_kiowa_crew_viewpoint ();

				virtual_cockpit_inst3d->vp.x += wide_cockpit_position[wide_cockpit_nr].c.x;
				virtual_cockpit_inst3d->vp.y += wide_cockpit_position[wide_cockpit_nr].c.y;
				virtual_cockpit_inst3d->vp.z += wide_cockpit_position[wide_cockpit_nr].c.z;

				//ataribaby 27/12/2008
				//virtual_cockpit_inst3d->vp.x += bound(current_flight_dynamics->model_acceleration_vector.x * ONE_OVER_G, -3.0, 3.0) * 0.025 * command_line_g_force_head_movment_modifier;
				//virtual_cockpit_inst3d->vp.y += bound(current_flight_dynamics->g_force.value - 1.0, -1.5, 5.0) * 0.025 * command_line_g_force_head_movment_modifier;

				if (wide_cockpit_nr == WIDEVIEW_KIOWA_PILOT)
					pilot_head_pitch_datum = rad ( wide_cockpit_position[wide_cockpit_nr].c.p );
				if (wide_cockpit_nr == WIDEVIEW_KIOWA_COPILOT)
					co_pilot_head_pitch_datum = rad ( wide_cockpit_position[wide_cockpit_nr].c.p );

				set_3d_view_distances (main_3d_env, 10.0, 0.1, 1.0, 0.0);

		}

		//ataribaby 27/12/2008 new head g-force movement and vibration from main rotor
		if (get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_PILOT_LHS_DISPLAY &&
				get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_PILOT_RHS_DISPLAY &&
				get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_LHS_DISPLAY &&
				get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_RHS_DISPLAY)
		{
			if (get_time_acceleration() != TIME_ACCELERATION_PAUSE)
			{
				random_vibration_x = (frand1() * (current_flight_dynamics->main_rotor_rpm.value * 0.00002)) * command_line_g_force_head_movment_modifier;
				random_vibration_y = (frand1() * (current_flight_dynamics->main_rotor_rpm.value * 0.00002)) * command_line_g_force_head_movment_modifier;
			}
			x_head_g_movement = move_by_rate(x_head_g_movement, random_vibration_x + (bound(current_flight_dynamics->model_acceleration_vector.x * ONE_OVER_G, -3.0, 3.0) * 0.025 * command_line_g_force_head_movment_modifier), 0.05);
			y_head_g_movement = move_by_rate(y_head_g_movement, random_vibration_y + (bound(current_flight_dynamics->g_force.value - 1.0, -1.5, 5.0) * 0.025 * command_line_g_force_head_movment_modifier), 0.05);

			virtual_cockpit_inst3d->vp.x -= x_head_g_movement;
			//if (!current_flight_dynamics->auto_hover)   // arneh - auto hover has some weird dynamics which cause lots of g-forces, so disable head movement when auto hover is enabled
			virtual_cockpit_inst3d->vp.y -= y_head_g_movement;
		}

		{
				//
				// ADI
				//

				search.search_depth = 0;
				search.search_object = virtual_cockpit_inst3d;
				search.sub_object_index = OBJECT_3D_SUB_OBJECT_APACHE_VIRTUAL_COCKPIT_ADI;

				if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
				{
					float
						heading,
						pitch,
						roll;

					get_kiowa_virtual_cockpit_adi_angles (virtual_cockpit_inst3d->vp.attitude, &heading, &pitch, &roll);

					search.result_sub_object->relative_heading = -heading;

					search.result_sub_object->relative_pitch = pitch;

					search.result_sub_object->relative_roll = -roll;
				}

				//
				// ADI slip
				//

				search.search_depth = 0;
				search.search_object = virtual_cockpit_inst3d;
				search.sub_object_index = OBJECT_3D_SUB_OBJECT_APACHE_VIRTUAL_COCKPIT_ADI_SIDE_SLIP;

				if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
				{
					search.result_sub_object->relative_roll = get_kiowa_virtual_cockpit_adi_slip_indicator_needle_value ();
				}

				//
				// airspeed
				//

				search.search_depth = 0;
				search.search_object = virtual_cockpit_inst3d;
				search.sub_object_index = OBJECT_3D_SUB_OBJECT_APACHE_VIRTUAL_COCKPIT_AIRSPEED;

				if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
				{
					search.result_sub_object->relative_roll = get_kiowa_virtual_cockpit_airspeed_indicator_needle_value ();
				}

				//
				// altimeter
				//

				search.search_depth = 0;
				search.search_object = virtual_cockpit_inst3d;
				search.sub_object_index = OBJECT_3D_SUB_OBJECT_APACHE_VIRTUAL_COCKPIT_ALTIMETER;

				if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
				{
					search.result_sub_object->relative_roll = get_kiowa_virtual_cockpit_barometric_altimeter_needle_value ();
				}

				search.search_depth = 0;
				search.search_object = virtual_cockpit_inst3d;
				search.sub_object_index = OBJECT_3D_SUB_OBJECT_APACHE_VIRTUAL_COCKPIT_COMPASS_HEADING_NULL;

				if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
				{
					search.result_sub_object->relative_heading = -current_flight_dynamics->heading.value;
				}

				//
				// clock
				//

				{
					float
						hours,
						minutes,
						seconds;

					//
					// only read clock values if drawing virtual cockpit needles to prevent speeding up clock debug values
					//

					get_kiowa_virtual_cockpit_clock_hand_values (&hours, &minutes, &seconds);

					//
					// hour hand
					//

					search.search_depth = 0;
					search.search_object = virtual_cockpit_inst3d;
					search.sub_object_index = OBJECT_3D_SUB_OBJECT_APACHE_VIRTUAL_COCKPIT_CLOCK_HOUR_HAND;

					if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
					{
						search.result_sub_object->relative_roll = hours;
					}

					//
					// minute hand
					//

					search.search_depth = 0;
					search.search_object = virtual_cockpit_inst3d;
					search.sub_object_index = OBJECT_3D_SUB_OBJECT_APACHE_VIRTUAL_COCKPIT_CLOCK_MINUTE_HAND;

					if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
					{
						search.result_sub_object->relative_roll = minutes;
					}

					//
					// second hand
					//

					search.search_depth = 0;
					search.search_object = virtual_cockpit_inst3d;
					search.sub_object_index = OBJECT_3D_SUB_OBJECT_APACHE_VIRTUAL_COCKPIT_CLOCK_SECOND_HAND;

					if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
					{
						search.result_sub_object->relative_roll = seconds;
					}
				}
		}

		if (get_local_entity_int_value (get_session_entity (), INT_TYPE_DAY_SEGMENT_TYPE) == DAY_SEGMENT_TYPE_DAY)
		{
			////////////////////////////////////////
			//
			// DAY LIGHTING
			//
			////////////////////////////////////////

			if (night_vision_system_active && (get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CREW))
			{
				//
				// active night vision system
				//

				get_3d_transformation_matrix (m1, rad (0.0), rad (135.0), rad (0.0));

				multiply_matrix3x3_matrix3x3 (m2, m1, virtual_cockpit_inst3d->vp.attitude);

				direction.x = m2[2][0];
				direction.y = m2[2][1];
				direction.z = m2[2][2];

				cockpit_light = create_light_3d_source (LIGHT_3D_TYPE_DIRECTIONAL, FALSE, &direction, 0, 0.0000, 0.5000, 0.0000);

				insert_light_3d_source_into_3d_scene (cockpit_light);

				insert_relative_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_ZBUFFERED_OBJECT, &virtual_cockpit_inst3d->vp.position, virtual_cockpit_inst3d);

				draw_3d_scene ();

				end_3d_scene ();

				remove_light_3d_source_from_3d_scene (cockpit_light);

				destroy_light_3d_source (cockpit_light);
			}
			else
			{
				//
				// inactive night vision system
				//

				insert_relative_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_ZBUFFERED_OBJECT, &virtual_cockpit_inst3d->vp.position, virtual_cockpit_inst3d);

				draw_3d_scene ();

				print_edit_wide_cockpit ();

				end_3d_scene ();
			}
		}
		else
		{
			////////////////////////////////////////
			//
			// NIGHT LIGHTING
			//
			////////////////////////////////////////

			direction.x = virtual_cockpit_inst3d->vp.zv.x;
			direction.y = virtual_cockpit_inst3d->vp.zv.y;
			direction.z = virtual_cockpit_inst3d->vp.zv.z;

			display_backlight = create_light_3d_source (LIGHT_3D_TYPE_DIRECTIONAL, FALSE, &direction, 0, 0.0627, 0.2039, 0.0392);

			if (night_vision_system_active && (get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CREW))
			{
				//
				// active night vision system
				//

				get_3d_transformation_matrix (m1, rad (0.0), rad (135.0), rad (0.0));

				multiply_matrix3x3_matrix3x3 (m2, m1, virtual_cockpit_inst3d->vp.attitude);

				direction.x = m2[2][0];
				direction.y = m2[2][1];
				direction.z = m2[2][2];

				cockpit_light = create_light_3d_source (LIGHT_3D_TYPE_DIRECTIONAL, FALSE, &direction, 0, 0.0000, 0.5000, 0.0000);
			}
			else
			{
				//
				// inactive night vision system
				//

				direction.x = virtual_cockpit_inst3d->vp.yv.x;
				direction.y = virtual_cockpit_inst3d->vp.yv.y;
				direction.z = virtual_cockpit_inst3d->vp.yv.z;

				cockpit_light = create_light_3d_source (LIGHT_3D_TYPE_DIRECTIONAL, FALSE, &direction, 0, 0.0666, 0.1098, 0.6431);
			}

			insert_light_3d_source_into_3d_scene (display_backlight);

			insert_light_3d_source_into_3d_scene (cockpit_light);

			insert_relative_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_ZBUFFERED_OBJECT, &virtual_cockpit_inst3d->vp.position, virtual_cockpit_inst3d);

			draw_3d_scene ();

			print_edit_wide_cockpit ();

			end_3d_scene ();

			remove_light_3d_source_from_3d_scene (display_backlight);

			remove_light_3d_source_from_3d_scene (cockpit_light);

			destroy_light_3d_source (display_backlight);

			destroy_light_3d_source (cockpit_light);
		}
	}

	move_edit_wide_cockpit ();

#if RECOGNITION_GUIDE
	set_3d_view_distances (main_3d_env, 10000.0, 100.0, 1.0, 0.0);
#else
	set_3d_view_distances (main_3d_env, 10000.0, 1.0, 1.0, 0.0);
#endif

	realise_3d_clip_extents (main_3d_env);
}
Ejemplo n.º 5
0
void draw_hokum_virtual_cockpit (void)
{
	int
		draw_main_rotors;

	float
		theta;

	object_3d_instance
		*inst3d;

	object_3d_sub_object_search_data
		search;

	switch (get_view_mode ())
	{
		case VIEW_MODE_VIRTUAL_COCKPIT_CREW:
		case VIEW_MODE_VIRTUAL_COCKPIT_HUD:
		case VIEW_MODE_VIRTUAL_COCKPIT_PILOT_LHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_PILOT_RHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_LHS_DISPLAY:
		case VIEW_MODE_VIRTUAL_COCKPIT_CO_PILOT_RHS_DISPLAY:
		{
			break;
		}
		default:
		{
			if (!get_global_draw_cockpit_graphics ())
			{
				draw_external_hokum_hud ();

				return;
			}

			break;
		}
	}

	//
	// lamps and instruments
	//

	draw_hokum_virtual_cockpit_lamps ();

	draw_hokum_virtual_cockpit_instruments ();

	//
	// crew animation
	//

	set_hokum_crew_head_positions ();

	//
	// animate main rotors
	//

	if (get_local_entity_int_value (get_gunship_entity (), INT_TYPE_MAIN_ROTOR_DAMAGED))
	{
		animate_damaged_helicopter_main_rotors (get_gunship_entity (), TRUE);
	}
	else
	{
		animate_helicopter_main_rotors (get_gunship_entity (), TRUE, FALSE);
	}

	inst3d = get_local_entity_ptr_value (get_gunship_entity (), PTR_TYPE_INSTANCE_3D_OBJECT);

	theta = get_rotation_angle_of_helicopter_main_rotors (inst3d);

	set_rotation_angle_of_helicopter_main_rotors (virtual_cockpit_inst3d, theta);

	animate_helicopter_virtual_cockpit_main_rotors (get_gunship_entity (), virtual_cockpit_inst3d);

	draw_main_rotors = TRUE;

	if (get_global_glass_cockpit ())
	{
		draw_main_rotors = FALSE;
	}
	else
	{
		if (get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CREW)
		{
			if (get_helicopter_main_rotors_blurred (get_gunship_entity ()))
			{
				if (!get_global_blurred_main_rotors_visible_from_cockpit ())
				{
					draw_main_rotors = FALSE;
				}
			}
		}
	}

	search.search_depth = 0;
	search.search_object = virtual_cockpit_inst3d;
	search.sub_object_index = OBJECT_3D_SUB_OBJECT_MAIN_ROTOR_SHAFT;

	if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
	{
		search.result_sub_object->visible_object = draw_main_rotors;
	}

	search.search_depth = 1;
	search.search_object = virtual_cockpit_inst3d;
	search.sub_object_index = OBJECT_3D_SUB_OBJECT_MAIN_ROTOR_SHAFT;

	if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
	{
		search.result_sub_object->visible_object = draw_main_rotors;
	}

	//
	// animate electro-optics
	//

	animate_hokum_virtual_cockpit_eo (virtual_cockpit_inst3d);

	//
	// animate wipers
	//

	animate_hokum_wipers (virtual_cockpit_inst3d);

	//
	// draw 3D scene
	//

	set_3d_view_distances (main_3d_env, 10.0, 0.1, 1.0, 0.0);

	realise_3d_clip_extents (main_3d_env);

	recalculate_3d_environment_settings (main_3d_env);

	clear_zbuffer_screen ();

	if (begin_3d_scene ())
	{
		//
		// light direction is in world coordinates
		//

		light_3d_source
			*display_backlight,
			*cockpit_light;

		vec3d
			direction;

		matrix3x3
			m1,
			m2;

		if (get_local_entity_int_value (get_session_entity (), INT_TYPE_DAY_SEGMENT_TYPE) == DAY_SEGMENT_TYPE_DAY)
		{
			////////////////////////////////////////
			//
			// DAY LIGHTING
			//
			////////////////////////////////////////

			if (night_vision_system_active && (get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CREW))
			{
				//
				// active night vision system
				//

				get_3d_transformation_matrix (m1, rad (0.0), rad (135.0), rad (0.0));

				multiply_matrix3x3_matrix3x3 (m2, m1, virtual_cockpit_inst3d->vp.attitude);

				direction.x = m2[2][0];
				direction.y = m2[2][1];
				direction.z = m2[2][2];

				cockpit_light = create_light_3d_source (LIGHT_3D_TYPE_DIRECTIONAL, FALSE, &direction, 0, 0.5000, 0.4000, 0.0000);

				insert_light_3d_source_into_3d_scene (cockpit_light);

				insert_relative_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_ZBUFFERED_OBJECT, &virtual_cockpit_inst3d->vp.position, virtual_cockpit_inst3d);

				draw_3d_scene ();

				end_3d_scene ();

				remove_light_3d_source_from_3d_scene (cockpit_light);

				destroy_light_3d_source (cockpit_light);
			}
			else
			{
				//
				// inactive night vision system
				//

				insert_relative_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_ZBUFFERED_OBJECT, &virtual_cockpit_inst3d->vp.position, virtual_cockpit_inst3d);

				draw_3d_scene ();

				end_3d_scene ();
			}
		}
		else
		{
			////////////////////////////////////////
			//
			// NIGHT LIGHTING
			//
			////////////////////////////////////////

			direction.x = virtual_cockpit_inst3d->vp.zv.x;
			direction.y = virtual_cockpit_inst3d->vp.zv.y;
			direction.z = virtual_cockpit_inst3d->vp.zv.z;

			display_backlight = create_light_3d_source (LIGHT_3D_TYPE_DIRECTIONAL, FALSE, &direction, 0, 0.2500, 0.0980, 0.0000);

			if (night_vision_system_active && (get_view_mode () != VIEW_MODE_VIRTUAL_COCKPIT_CREW))
			{
				//
				// active night vision system
				//

				get_3d_transformation_matrix (m1, rad (0.0), rad (135.0), rad (0.0));

				multiply_matrix3x3_matrix3x3 (m2, m1, virtual_cockpit_inst3d->vp.attitude);

				direction.x = m2[2][0];
				direction.y = m2[2][1];
				direction.z = m2[2][2];

				cockpit_light = create_light_3d_source (LIGHT_3D_TYPE_DIRECTIONAL, FALSE, &direction, 0, 0.5000, 0.4000, 0.0000);
			}
			else
			{
				//
				// inactive night vision system
				//

				direction.x = virtual_cockpit_inst3d->vp.yv.x;
				direction.y = virtual_cockpit_inst3d->vp.yv.y;
				direction.z = virtual_cockpit_inst3d->vp.yv.z;

				cockpit_light = create_light_3d_source (LIGHT_3D_TYPE_DIRECTIONAL, FALSE, &direction, 0, 0.0666, 0.1098, 0.6431);
			}

			insert_light_3d_source_into_3d_scene (display_backlight);

			insert_light_3d_source_into_3d_scene (cockpit_light);

			insert_relative_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_ZBUFFERED_OBJECT, &virtual_cockpit_inst3d->vp.position, virtual_cockpit_inst3d);

			draw_3d_scene ();

			end_3d_scene ();

			remove_light_3d_source_from_3d_scene (display_backlight);

			remove_light_3d_source_from_3d_scene (cockpit_light);

			destroy_light_3d_source (display_backlight);

			destroy_light_3d_source (cockpit_light);
		}
	}

#if RECOGNITION_GUIDE
	set_3d_view_distances (main_3d_env, 10000.0, 100.0, 1.0, 0.0);
#else
	set_3d_view_distances (main_3d_env, 10000.0, 1.0, 1.0, 0.0);
#endif

	realise_3d_clip_extents (main_3d_env);
}
Ejemplo n.º 6
0
void draw_hind_cockpit (cockpit_panels panel)
{
	////////////////////////////////////////
	//
	// select cockpit graphics wrt time of day
	//
	////////////////////////////////////////

	switch (get_local_entity_int_value (get_session_entity (), INT_TYPE_DAY_SEGMENT_TYPE))
	{
		case DAY_SEGMENT_TYPE_DAWN:
		{
			base_cockpit_graphics_file = GRAPHICS_COCKPITS_HAVOC_LEVEL2_BASE;

			break;
		}
		case DAY_SEGMENT_TYPE_DAY:
		{
			base_cockpit_graphics_file = GRAPHICS_COCKPITS_HAVOC_LEVEL1_BASE;

			break;
		}
		case DAY_SEGMENT_TYPE_DUSK:
		{
			base_cockpit_graphics_file = GRAPHICS_COCKPITS_HAVOC_LEVEL2_BASE;

			break;
		}
		case DAY_SEGMENT_TYPE_NIGHT:
		{
			base_cockpit_graphics_file = GRAPHICS_COCKPITS_HAVOC_LEVEL3_BASE;

			break;
		}
	}

	#if DEMO_VERSION

	base_cockpit_graphics_file = GRAPHICS_COCKPITS_HAVOC_LEVEL1_BASE;

	#endif

	set_havoc_instrument_colours ();

	////////////////////////////////////////
	//
	// draw overlaid instruments
	//
	////////////////////////////////////////

	if (!get_global_draw_cockpit_graphics ())
	{
		if (get_global_draw_overlaid_instruments ())
		{
			if (panel != COCKPIT_PANEL_SPECIAL_HAVOC_TV)
			{
				draw_overlaid_hind_mfd (68.0, 412.0, 128.0);

				draw_overlaid_hind_threat_warning_display (int_full_screen_width - 64, int_full_screen_height - 84);
			}
		}
	}

	////////////////////////////////////////
	//
	// draw cockpits
	//
	////////////////////////////////////////

	switch (panel)
	{
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_LEFT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				if (custom_3d_models.arneh_mi24v_cockpit)
					draw_hind_external_3d_cockpit(0, NULL);
				else
				{
					draw_hind_external_virtual_cockpit
					(
						VIRTUAL_COCKPIT_RAIN_EFFECT |
						VIRTUAL_COCKPIT_MAIN_ROTOR,
						NULL
					);
	
					if (lock_screen (active_screen))
					{
						blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U40_L90_RLE), ix_640_480, iy_640_480);
	
						unlock_screen (active_screen);
					}
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_LEFT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U40_L60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_LEFT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR |
					VIRTUAL_COCKPIT_COMPASS,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U40_L30_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_AHEAD:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR |
					VIRTUAL_COCKPIT_COMPASS,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_U40_AHD_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U40_AHD_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_RIGHT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_U40_R30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U40_R30_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_RIGHT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U40_R60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_RIGHT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U40_R90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_LEFT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U20_L90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_LEFT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U20_L60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_LEFT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				if (custom_3d_models.arneh_mi24v_cockpit)
				{
					draw_hind_external_3d_cockpit(0, NULL);
					draw_hind_internal_3d_cockpit(0);
				}
				else
				{
					draw_hind_external_virtual_cockpit
					(
						VIRTUAL_COCKPIT_MOVING_WIPER |
						VIRTUAL_COCKPIT_RAIN_EFFECT |
						VIRTUAL_COCKPIT_MAIN_ROTOR |
						VIRTUAL_COCKPIT_COMPASS,
						NULL
					);
	
					if (lock_screen (active_screen))
					{
						blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U20_L30_RLE), ix_640_480, iy_640_480);
	
						unlock_screen (active_screen);
					}

					draw_hind_internal_virtual_cockpit
					(
						VIRTUAL_COCKPIT_HUD_GLASS |
						VIRTUAL_COCKPIT_HUD_DISPLAY
					);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_AHEAD:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR |
					VIRTUAL_COCKPIT_COMPASS,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_U20_AHD_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U20_AHD_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}

				draw_hind_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_HUD_GLASS |
					VIRTUAL_COCKPIT_HUD_DISPLAY
				);
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_RIGHT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_U20_R30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U20_R30_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}

				draw_hind_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_HUD_GLASS |
					VIRTUAL_COCKPIT_HUD_DISPLAY
				);
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_RIGHT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U20_R60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_RIGHT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_U20_R90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_LEFT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_LVL_L90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_LEFT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_LVL_L60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_LEFT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_LVL_L30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_LVL_L30_RLE), ix_640_480, iy_640_480);

					draw_havoc_g_meter (panel);

					draw_havoc_radar_altimeter (panel);

					draw_hind_weapons_management_panel_lamps (panel);

					draw_hind_master_caution_lamp (panel);

					unlock_screen (active_screen);
				}

				draw_hind_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_HUD_GLASS |
					VIRTUAL_COCKPIT_HUD_DISPLAY
				);
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_AHEAD:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_LVL_AHD_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_LVL_AHD_RLE), ix_640_480, iy_640_480);

					draw_havoc_g_meter (panel);

					draw_havoc_radar_altimeter (panel);

					draw_havoc_weapons_management_panel_lamps (panel);

					draw_hind_threat_warning_display (panel);

					draw_hind_master_caution_lamp (panel);

					draw_hind_warning_panel_lamps (panel);

					unlock_screen (active_screen);
				}

				draw_hind_internal_virtual_cockpit (VIRTUAL_COCKPIT_HUD_GLASS);

				draw_hind_hud_on_cockpit (get_global_hud_enlarge ());
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_RIGHT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_LVL_R30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_LVL_R30_RLE), ix_640_480, iy_640_480);

					draw_hind_status_panel_lamps (panel);

					draw_hind_threat_warning_display (panel);

					draw_hind_warning_panel_lamps (panel);

					unlock_screen (active_screen);
				}

				draw_hind_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_HUD_GLASS |
					VIRTUAL_COCKPIT_HUD_DISPLAY
				);
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_RIGHT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_LVL_R60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_RIGHT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_LVL_R90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_LEFT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_D20_L90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_LEFT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_D20_L60_RLE), ix_640_480, iy_640_480);

					draw_havoc_barometric_altimeter (panel);

					draw_hind_weapons_management_panel_lamps (panel);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_LEFT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_ADI |
					VIRTUAL_COCKPIT_HSI |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_D20_L30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_D20_L30_RLE), ix_640_480, iy_640_480);

					draw_havoc_barometric_altimeter (panel);

					draw_havoc_airspeed_indicator (panel);

					draw_havoc_main_rotor_rpm_indicator (panel);

					draw_havoc_g_meter (panel);

					draw_havoc_vertical_speed_indicator (panel);

					draw_havoc_clock (panel);

					draw_havoc_radar_altimeter (panel);

					draw_hind_weapons_management_panel_lamps (panel);

					draw_hind_master_caution_lamp (panel);

					unlock_screen (active_screen);
				}

				draw_hind_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_HUD_GLASS |
					VIRTUAL_COCKPIT_HUD_DISPLAY |
					VIRTUAL_COCKPIT_CRT_DISPLAY |
					VIRTUAL_COCKPIT_INSTRUMENT_NEEDLES
				);
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_AHEAD:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_ADI |
					VIRTUAL_COCKPIT_HSI |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_D20_AHD_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_D20_AHD_RLE), ix_640_480, iy_640_480);

					draw_havoc_barometric_altimeter (panel);

					draw_havoc_airspeed_indicator (panel);

					draw_havoc_main_rotor_rpm_indicator (panel);

					draw_havoc_g_meter (panel);

					draw_havoc_engine_torque_indicator (panel);

					draw_havoc_engine_temperature_indicator (panel);

					draw_havoc_engine_rpm_indicator (panel);

					draw_havoc_engine_temperature_and_rpm_indicator_ticks (panel);

					draw_havoc_vertical_speed_indicator (panel);

					draw_havoc_clock (panel);

					draw_havoc_radar_altimeter (panel);

					draw_havoc_fuel_gauge (panel);

					draw_havoc_fixed_cockpit_hsi_waypoint_distance_digits (panel);

					draw_havoc_fixed_cockpit_hsi_waypoint_identifier (panel);

					draw_havoc_weapons_management_panel_lamps (panel);

					draw_havoc_status_panel_lamps (panel);

					draw_havoc_threat_warning_display (panel);

					draw_havoc_master_caution_lamp (panel);

					draw_havoc_warning_panel_lamps (panel);

					draw_havoc_radio_lamp (panel);

					draw_havoc_oil_gauges (panel);

					unlock_screen (active_screen);
				}

				draw_hind_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_HUD_GLASS |
					VIRTUAL_COCKPIT_HUD_DISPLAY |
					VIRTUAL_COCKPIT_INSTRUMENT_NEEDLES
				);

				draw_hind_mfd_on_cockpit (fx_640_480 + 354.0, fy_640_480 + 337.0, FALSE, FALSE);

				draw_hind_ekran_display_on_cockpit (fx_640_480 + 459.0, fy_640_480 + 310.0);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_CRT_MASK_D20_AHD_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_RIGHT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_D20_R30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_D20_R30_RLE), ix_640_480, iy_640_480);

					draw_havoc_engine_torque_indicator (panel);

					draw_havoc_engine_temperature_indicator (panel);

					draw_havoc_engine_rpm_indicator (panel);

					draw_havoc_engine_temperature_and_rpm_indicator_ticks (panel);

					draw_havoc_fuel_gauge (panel);

					draw_hind_status_panel_lamps (panel);

					draw_hind_threat_warning_display (panel);

					draw_hind_warning_panel_lamps (panel);

					draw_hind_radio_lamp (panel);

					draw_havoc_oil_gauges (panel);

					unlock_screen (active_screen);
				}

				draw_hind_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_HUD_GLASS |
					VIRTUAL_COCKPIT_HUD_DISPLAY |
					VIRTUAL_COCKPIT_CRT_DISPLAY |
					VIRTUAL_COCKPIT_EKRAN_DISPLAY
				);
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_RIGHT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_D20_R60_RLE), ix_640_480, iy_640_480);

					draw_hind_status_panel_lamps (panel);

					draw_hind_radio_lamp (panel);

					draw_havoc_oil_gauges (panel);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_RIGHT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_D20_R90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}
			else
			{
				draw_hind_hud_on_cockpit (TRUE);
			}

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_SPECIAL_HAVOC_TV:
		////////////////////////////////////////
		{
			if (lock_screen (active_screen))
			{
				blit_rgb_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_CRT_RGB), ix_640_480, iy_640_480);

				unlock_screen (active_screen);
			}

			draw_hind_mfd_on_cockpit (fx_640_480 + 321.0, fy_640_480 + 229.0, TRUE, FALSE);

			if (lock_screen (active_screen))
			{
				blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_CRT_MASK_CRT_RLE), ix_640_480, iy_640_480);

				unlock_screen (active_screen);
			}

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_SPECIAL_HAVOC_HUD:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_hind_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_LARGE_HUD |
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_WIPER_HUD)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_HAVOC_HUD_RLE), ix_640_480, iy_640_480);

					draw_hind_threat_warning_display (panel);

					draw_hind_master_caution_lamp (panel);

					draw_hind_warning_panel_lamps (panel);

					unlock_screen (active_screen);
				}

				draw_hind_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_LARGE_HUD |
					VIRTUAL_COCKPIT_HUD_GLASS
				);
			}

			draw_hind_hud_on_cockpit (TRUE);

			draw_hind_hms ();

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal ("Invalid cockpit panel = %d", panel);

			break;
		}
	}
}
Ejemplo n.º 7
0
void draw_ah64a_cockpit (cockpit_panels panel)
{
	////////////////////////////////////////
	//
	// select cockpit graphics wrt time of day
	//
	////////////////////////////////////////

	switch (get_local_entity_int_value (get_session_entity (), INT_TYPE_DAY_SEGMENT_TYPE))
	{
		case DAY_SEGMENT_TYPE_DAWN:
		{
			base_cockpit_graphics_file = GRAPHICS_COCKPITS_APACHE_LEVEL2_BASE;

			break;
		}
		case DAY_SEGMENT_TYPE_DAY:
		{
			base_cockpit_graphics_file = GRAPHICS_COCKPITS_APACHE_LEVEL1_BASE;

			break;
		}
		case DAY_SEGMENT_TYPE_DUSK:
		{
			base_cockpit_graphics_file = GRAPHICS_COCKPITS_APACHE_LEVEL2_BASE;

			break;
		}
		case DAY_SEGMENT_TYPE_NIGHT:
		{
			base_cockpit_graphics_file = GRAPHICS_COCKPITS_APACHE_LEVEL3_BASE;

			break;
		}
	}

	#if DEMO_VERSION

	base_cockpit_graphics_file = GRAPHICS_COCKPITS_APACHE_LEVEL1_BASE;

	#endif

	set_ah64a_instrument_colours ();

	////////////////////////////////////////
	//
	// draw overlaid instruments
	//
	////////////////////////////////////////

	if (!get_global_draw_cockpit_graphics ())
	{
		if (get_global_draw_overlaid_instruments ())
		{
			if ((panel != COCKPIT_PANEL_SPECIAL_APACHE_LHS_MFD) && (panel != COCKPIT_PANEL_SPECIAL_APACHE_RHS_MFD))
			{
				draw_overlaid_ah64a_mfd (68.0, 412.0, 128.0, MFD_LOCATION_LHS);

				draw_overlaid_ah64a_mfd (572.0, 412.0, 128.0, MFD_LOCATION_RHS);
			}
		}
	}

	////////////////////////////////////////
	//
	// draw cockpits
	//
	////////////////////////////////////////

	switch (panel)
	{
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_LEFT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U40_L90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_LEFT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U40_L60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_LEFT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U40_L30_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_AHEAD:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U40_AHD_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_RIGHT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U40_R30_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_RIGHT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U40_R60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP40_RIGHT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U40_R90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_LEFT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U20_L90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_LEFT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U20_L60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_LEFT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_WIPER_U20_L30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U20_L30_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_AHEAD:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_WIPER_U20_AHD_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U20_AHD_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_RIGHT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U20_R30_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_RIGHT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U20_R60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_UP20_RIGHT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_U20_R90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_LEFT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_LVL_L90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_LEFT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_LVL_L60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_LEFT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_WIPER_LVL_L30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_LVL_L30_RLE), ix_640_480, iy_640_480);

					draw_ah64a_indicator_lamps (panel);

					draw_ah64a_fire_detector_lamps (panel);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_AHEAD:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_WIPER_LVL_AHD_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_LVL_AHD_RLE), ix_640_480, iy_640_480);

					draw_ah64a_indicator_lamps (panel);

					draw_ah64a_fire_detector_lamps (panel);

					unlock_screen (active_screen);
				}

				draw_ah64a_upfront_display_on_cockpit (fx_640_480 + 338.0, fy_640_480 + 428.0);
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_RIGHT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_WIPER_LVL_R30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_LVL_R30_RLE), ix_640_480, iy_640_480);

					draw_ah64a_indicator_lamps (panel);

					unlock_screen (active_screen);
				}

				draw_ah64a_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_UPFRONT_DISPLAY
				);
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_RIGHT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_LVL_R60_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_LEVEL_RIGHT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_LVL_R90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_LEFT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_D20_L90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_LEFT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_D20_L60_RLE), ix_640_480, iy_640_480);

					draw_ah64a_fixed_cockpit_clock_hands (panel);

					draw_ah64a_armament_lamps (panel);

					unlock_screen (active_screen);
				}

				draw_ah64a_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_INSTRUMENT_NEEDLES
				);
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_LEFT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_WIPER_D20_L30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_D20_L30_RLE), ix_640_480, iy_640_480);

					draw_ah64a_fixed_cockpit_clock_hands (panel);

					draw_ah64a_indicator_lamps (panel);

					draw_ah64a_fire_detector_lamps (panel);

					draw_ah64a_armament_lamps (panel);

					draw_ah64a_mfd_lamps (panel);

					unlock_screen (active_screen);
				}

				draw_ah64a_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_LHS_MFD_DISPLAY |
					VIRTUAL_COCKPIT_RHS_MFD_DISPLAY |
					VIRTUAL_COCKPIT_UPFRONT_DISPLAY |
					VIRTUAL_COCKPIT_INSTRUMENT_NEEDLES
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_MFD_MASK_D20_L30_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_AHEAD:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR |
					VIRTUAL_COCKPIT_ADI |
					VIRTUAL_COCKPIT_COMPASS,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_WIPER_D20_AHD_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_D20_AHD_RLE), ix_640_480, iy_640_480);

					draw_ah64a_fixed_cockpit_airspeed_indicator_needle (panel);

					draw_ah64a_fixed_cockpit_barometric_altimeter_digits (panel);

					draw_ah64a_fixed_cockpit_barometric_altimeter_needle (panel);

					draw_ah64a_fixed_cockpit_clock_hands (panel);

					draw_ah64a_indicator_lamps (panel);

					draw_ah64a_fire_detector_lamps (panel);

					draw_ah64a_armament_lamps (panel);

					draw_ah64a_mfd_lamps (panel);

					unlock_screen (active_screen);
				}

				draw_ah64a_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_INSTRUMENT_NEEDLES
				);

				draw_ah64a_upfront_display_on_cockpit (fx_640_480 + 334.0, fy_640_480 + 226.0);

				draw_ah64a_mfd_on_cockpit (fx_640_480 + 226.0, fy_640_480 + 367.0, FALSE, FALSE, MFD_LOCATION_LHS);

				draw_ah64a_mfd_on_cockpit (fx_640_480 + 414.0, fy_640_480 + 367.0, FALSE, FALSE, MFD_LOCATION_RHS);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_MFD_MASK_D20_AHD_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_RIGHT30:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RENDERED_WIPER |
					VIRTUAL_COCKPIT_MOVING_WIPER |
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR |
					VIRTUAL_COCKPIT_ADI |
					VIRTUAL_COCKPIT_COMPASS,
					get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_WIPER_D20_R30_RLE)
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_D20_R30_RLE), ix_640_480, iy_640_480);

					draw_ah64a_fixed_cockpit_airspeed_indicator_needle (panel);

					draw_ah64a_fixed_cockpit_barometric_altimeter_needle (panel);

					draw_ah64a_indicator_lamps (panel);

					draw_ah64a_mfd_lamps (panel);

					unlock_screen (active_screen);
				}

				draw_ah64a_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_LHS_MFD_DISPLAY |
					VIRTUAL_COCKPIT_RHS_MFD_DISPLAY |
					VIRTUAL_COCKPIT_UPFRONT_DISPLAY |
					VIRTUAL_COCKPIT_INSTRUMENT_NEEDLES
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_MFD_MASK_D20_R30_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_RIGHT60:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR |
					VIRTUAL_COCKPIT_ADI |
					VIRTUAL_COCKPIT_COMPASS,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_D20_R60_RLE), ix_640_480, iy_640_480);

					draw_ah64a_fixed_cockpit_airspeed_indicator_needle (panel);

					draw_ah64a_fixed_cockpit_barometric_altimeter_needle (panel);

					unlock_screen (active_screen);
				}

				draw_ah64a_internal_virtual_cockpit
				(
					VIRTUAL_COCKPIT_INSTRUMENT_NEEDLES
				);
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_DOWN20_RIGHT90:
		////////////////////////////////////////
		{
			if (get_global_draw_cockpit_graphics ())
			{
				draw_ah64a_external_virtual_cockpit
				(
					VIRTUAL_COCKPIT_RAIN_EFFECT |
					VIRTUAL_COCKPIT_MAIN_ROTOR,
					NULL
				);

				if (lock_screen (active_screen))
				{
					blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_D20_R90_RLE), ix_640_480, iy_640_480);

					unlock_screen (active_screen);
				}
			}

			draw_ah64a_hud ();

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_SPECIAL_APACHE_LHS_MFD:
		////////////////////////////////////////
		{
			if (lock_screen (active_screen))
			{
				blit_rgb_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_LHS_MFD_RGB), ix_640_480, iy_640_480);

				draw_ah64a_armament_lamps (panel);

				draw_ah64a_mfd_lamps (panel);

				unlock_screen (active_screen);
			}

			draw_ah64a_mfd_on_cockpit (fx_640_480 + 320.0, fy_640_480 + 235.0, TRUE, FALSE, MFD_LOCATION_LHS);

			if (lock_screen (active_screen))
			{
				blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_MFD_MASK_LHS_MFD_RLE), ix_640_480, iy_640_480);

				unlock_screen (active_screen);
			}

			break;
		}
		////////////////////////////////////////
		case COCKPIT_PANEL_SPECIAL_APACHE_RHS_MFD:
		////////////////////////////////////////
		{
			draw_ah64a_external_virtual_cockpit
			(
				VIRTUAL_COCKPIT_LARGE_ADI,
				NULL
			);

			if (lock_screen (active_screen))
			{
				blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_RHS_MFD_RLE), ix_640_480, iy_640_480);

				draw_ah64a_mfd_lamps (panel);

				unlock_screen (active_screen);
			}

			draw_ah64a_internal_virtual_cockpit
			(
				VIRTUAL_COCKPIT_INSTRUMENT_LARGE_NEEDLES
			);

			draw_ah64a_mfd_on_cockpit (fx_640_480 + 320.0, fy_640_480 + 235.0, TRUE, FALSE, MFD_LOCATION_RHS);

			if (lock_screen (active_screen))
			{
				blit_rle_graphic (get_graphics_file_data (base_cockpit_graphics_file + GRAPHICS_COCKPITS_APACHE_MFD_MASK_RHS_MFD_RLE), ix_640_480, iy_640_480);

				unlock_screen (active_screen);
			}

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal ("Invalid cockpit panel = %d", panel);

			break;
		}
	}
}