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 (); } }
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 (); }
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 }
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); }
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); }
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; } } }
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; } } }