void initialise_comanche_virtual_cockpit (void) { // // 3D instances // virtual_cockpit_inst3d_detail_level_high_inst3d = construct_3d_object (OBJECT_3D_COMANCHE_COCKPIT_LEVEL_1); virtual_cockpit_inst3d_detail_level_medium_inst3d = construct_3d_object (OBJECT_3D_COMANCHE_COCKPIT_LEVEL_2); virtual_cockpit_inst3d_detail_level_low_inst3d = construct_3d_object (OBJECT_3D_COMANCHE_COCKPIT_LEVEL_3); virtual_cockpit_inst3d_detail_level_glass_inst3d = construct_3d_object (OBJECT_3D_COMANCHE_COCKPIT_JELLY); virtual_cockpit_inst3d = virtual_cockpit_inst3d_detail_level_high_inst3d; pilot_head_pitch_datum = get_comanche_pilot_head_pitch_datum (); co_pilot_head_pitch_datum = get_comanche_co_pilot_head_pitch_datum (); // // wipers and rain // initialise_comanche_virtual_cockpit_wiper_and_rain_effect (); // // crew animation // initialise_comanche_crew_animation (); // // canopy doors // initialise_comanche_virtual_cockpit_canopy_doors (); // // virtual cockpit cameras // initialise_common_virtual_cockpit_cameras (); //VJ 050208 cleaing up wideview wide_cockpit_nr = WIDEVIEW_COMANCHE_PILOT; //VJ wideview mod, date: 20-mar-03 //start up in normal view because when you switch to wideview the parameters are read set_global_wide_cockpit(FALSE); }
void damage_routed_vehicle_3d_object (entity *en) { routed_vehicle *raw; ASSERT (en); raw = (routed_vehicle *) get_local_entity_data (en); // // destruct old object // destruct_3d_object (raw->vh.inst3d); // // construct new (damaged) object // raw->vh.object_3d_shape = get_local_entity_int_value (en, INT_TYPE_DESTROYED_3D_SHAPE); raw->vh.inst3d = construct_3d_object (raw->vh.object_3d_shape); // // set id number for new object // set_routed_vehicle_id_number (en); }
void initialise_default_virtual_cockpit_wiper_and_rain_effect (void) { virtual_cockpit_wiper_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_WIPER); virtual_cockpit_rain_effect_inst3d = construct_3d_object (OBJECT_3D_APACHE_GLASS); pilot_wiper = TRUE; pilot_wiped_rain_texture_screen = create_screen_for_system_texture (TEXTURE_INDEX_APACHE_PILOT_RAIN_WIPE); pilot_wipe_type = WIPE_TYPE_RIGHT_THEN_LEFT; co_pilot_wiper = TRUE; co_pilot_wiped_rain_texture_screen = create_screen_for_system_texture (TEXTURE_INDEX_APACHE_COPILOT_RAIN_WIPE); co_pilot_wipe_type = WIPE_TYPE_UP_THEN_DOWN; }
void initialise_hokum_virtual_cockpit (void) { // // 3D instances // virtual_cockpit_inst3d_detail_level_high_inst3d = construct_3d_object (OBJECT_3D_HOKUM_COCKPIT_LEVEL_1); virtual_cockpit_inst3d_detail_level_medium_inst3d = construct_3d_object (OBJECT_3D_HOKUM_COCKPIT_LEVEL_2); virtual_cockpit_inst3d_detail_level_low_inst3d = construct_3d_object (OBJECT_3D_HOKUM_COCKPIT_LEVEL_3); virtual_cockpit_inst3d_detail_level_glass_inst3d = construct_3d_object (OBJECT_3D_HOKUM_COCKPIT_JELLY); virtual_cockpit_inst3d = virtual_cockpit_inst3d_detail_level_high_inst3d; pilot_head_pitch_datum = get_hokum_pilot_head_pitch_datum (); co_pilot_head_pitch_datum = get_hokum_co_pilot_head_pitch_datum (); // // wipers and rain // initialise_hokum_virtual_cockpit_wiper_and_rain_effect (); // // crew animation // initialise_hokum_crew_animation (); // // canopy doors // initialise_hokum_virtual_cockpit_canopy_doors (); // // virtual cockpit cameras // initialise_common_virtual_cockpit_cameras (); }
void initialise_havoc_virtual_cockpit_wiper_and_rain_effect (void) { virtual_cockpit_wiper_arm_inst3d = construct_3d_object (OBJECT_3D_HAVOC_VIRTUAL_COCKPIT_WIPER_ARM); virtual_cockpit_wiper_rod_inst3d = construct_3d_object (OBJECT_3D_HAVOC_VIRTUAL_COCKPIT_WIPER_ROD); virtual_cockpit_large_hud_wiper_arm_inst3d = construct_3d_object (OBJECT_3D_HAVOC_VIRTUAL_COCKPIT_WIPER_ARM_HUD); virtual_cockpit_large_hud_wiper_rod_inst3d = construct_3d_object (OBJECT_3D_HAVOC_VIRTUAL_COCKPIT_WIPER_ROD_HUD); virtual_cockpit_rain_effect_inst3d = construct_3d_object (OBJECT_3D_HAVOC_VIRTUAL_COCKPIT_GLASS); virtual_cockpit_large_hud_rain_effect_inst3d = construct_3d_object (OBJECT_3D_HAVOC_VIRTUAL_COCKPIT_GLASS_HUD); pilot_wiper = TRUE; pilot_wiped_rain_texture_screen = create_screen_for_system_texture (TEXTURE_INDEX_HAVOC_PILOT_RAIN_WIPE); pilot_wipe_type = WIPE_TYPE_LEFT_THEN_RIGHT; co_pilot_wiper = FALSE; co_pilot_wiped_rain_texture_screen = NULL; co_pilot_wipe_type = WIPE_TYPE_INVALID; }
int get_3d_object_updateable_flag ( int object ) { if ( object_3d_updateable_flag[object] == -1 ) { object_3d_instance *object_instance; object_3d_sub_object_search_data search; object_3d_updateable_flag[object] = FALSE; object_instance = construct_3d_object ( object ); search.search_object = object_instance; search.search_depth = 0; search.sub_object_index = OBJECT_3D_SUB_OBJECT_UPDATEABLE_OBJECT; if ( find_object_3d_sub_object ( &search ) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND ) { object_3d_updateable_flag[object] = TRUE; } else { search.search_object = object_instance; search.search_depth = 0; search.sub_object_index = OBJECT_3D_SUB_OBJECT_RADAR; if ( find_object_3d_sub_object ( &search ) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND ) { object_3d_updateable_flag[object] = TRUE; } } destruct_3d_object ( object_instance ); } return ( object_3d_updateable_flag[object] ); }
object_3d_instance *construct_3d_object_by_name ( char *name ) { int index; index = get_object_3d_index_from_name ( name ); if ( index ) { return ( construct_3d_object ( index ) ); } else { debug_fatal ( "Unable to construct object: %s", name ); return ( NULL ); } }
void damage_person_3d_object (entity *en) { person *raw; ASSERT (en); raw = (person *) get_local_entity_data (en); // destruct old object destruct_3d_object (raw->vh.inst3d); // construct new (damaged) object raw->vh.object_3d_shape = get_local_entity_int_value (en, INT_TYPE_DESTROYED_3D_SHAPE); raw->vh.inst3d = construct_3d_object (raw->vh.object_3d_shape); //set animation variable to start playing death anim raw->person_animation_state = 0.0; }
static entity *create_local (entity_types type, int index, char *pargs) { entity *en; routed_vehicle *raw; entity_sub_types group_sub_type; float heading; vec3d *face_normal; //////////////////////////////////////// // // VALIDATE // //////////////////////////////////////// validate_local_create_entity_index (index); #if DEBUG_MODULE debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_CREATE, NULL, type, index); #endif en = get_free_entity (index); if (en) { //////////////////////////////////////// // // MALLOC ENTITY DATA // //////////////////////////////////////// set_local_entity_type (en, type); raw = malloc_fast_mem (sizeof (routed_vehicle)); set_local_entity_data (en, raw); //////////////////////////////////////// // // INITIALISE ALL ENTITY DATA TO 'WORKING' DEFAULT VALUES // // DO NOT USE ACCESS FUNCTIONS // // DO NOT USE RANDOM VALUES // //////////////////////////////////////// memset (raw, 0, sizeof (routed_vehicle)); // // mobile // raw->vh.mob.sub_type = ENTITY_SUB_TYPE_UNINITIALISED; raw->vh.mob.position.x = MID_MAP_X; raw->vh.mob.position.y = MID_MAP_Y; raw->vh.mob.position.z = MID_MAP_Z; get_identity_matrix3x3 (raw->vh.mob.attitude); raw->vh.mob.alive = TRUE; raw->vh.mob.side = ENTITY_SIDE_UNINITIALISED; raw->vh.operational_state = OPERATIONAL_STATE_UNKNOWN; // // vehicle // raw->vh.object_3d_shape = OBJECT_3D_INVALID_OBJECT_INDEX; raw->vh.weapon_config_type = WEAPON_CONFIG_TYPE_UNINITIALISED; raw->vh.selected_weapon = ENTITY_SUB_TYPE_WEAPON_NO_WEAPON; raw->vh.weapon_vector.x = 0.0; raw->vh.weapon_vector.y = 0.0; raw->vh.weapon_vector.z = 1.0; raw->vh.weapon_to_target_vector.x = 0.0; raw->vh.weapon_to_target_vector.y = 0.0; raw->vh.weapon_to_target_vector.z = -1.0; raw->vh.loading_door_state = VEHICLE_LOADING_DOORS_OPEN_FLOAT_VALUE; // // routed // //////////////////////////////////////// // // OVERWRITE DEFAULT VALUES WITH GIVEN ATTRIBUTES // //////////////////////////////////////// set_local_entity_attributes (en, pargs); //////////////////////////////////////// // // CHECK MANDATORY ATTRIBUTES HAVE BEEN GIVEN // //////////////////////////////////////// ASSERT (raw->vh.member_link.parent); ASSERT (get_local_entity_type (raw->vh.member_link.parent) == ENTITY_TYPE_GROUP); //////////////////////////////////////// // // RESOLVE DEFAULT VALUES // //////////////////////////////////////// raw->sub_route = NULL; // // side // if (raw->vh.mob.side == ENTITY_SIDE_UNINITIALISED) { raw->vh.mob.side = get_local_entity_int_value (raw->vh.member_link.parent, INT_TYPE_SIDE); } ASSERT (raw->vh.mob.side != ENTITY_SIDE_NEUTRAL); // // sub_type // if (raw->vh.mob.sub_type == ENTITY_SUB_TYPE_UNINITIALISED) { group_sub_type = get_local_entity_int_value (raw->vh.member_link.parent, INT_TYPE_ENTITY_SUB_TYPE); if (raw->vh.mob.side == ENTITY_SIDE_BLUE_FORCE) { raw->vh.mob.sub_type = group_database[group_sub_type].default_blue_force_sub_type; } else { raw->vh.mob.sub_type = group_database[group_sub_type].default_red_force_sub_type; } } ASSERT (entity_sub_type_vehicle_valid (raw->vh.mob.sub_type)); // // 3D shape // if (raw->vh.object_3d_shape == OBJECT_3D_INVALID_OBJECT_INDEX) { raw->vh.object_3d_shape = vehicle_database[raw->vh.mob.sub_type].default_3d_shape; } // // weapon config // if (raw->vh.weapon_config_type == WEAPON_CONFIG_TYPE_UNINITIALISED) { raw->vh.weapon_config_type = vehicle_database[raw->vh.mob.sub_type].default_weapon_config_type; } ASSERT (weapon_config_type_valid (raw->vh.weapon_config_type)); // // damage levels // raw->vh.damage_level = vehicle_database[raw->vh.mob.sub_type].initial_damage_level; // // radar dish rotation (ok to use a random number as this is for visual effect only) // raw->vh.radar_rotation_state = frand1 (); //////////////////////////////////////// // // BUILD COMPONENTS // //////////////////////////////////////// // // 3D object // raw->vh.inst3d = construct_3d_object (raw->vh.object_3d_shape); set_routed_vehicle_id_number (en); set_initial_rotation_angle_of_routed_vehicle_wheels (raw->vh.inst3d); // // align with terrain // get_3d_terrain_point_data (raw->vh.mob.position.x, raw->vh.mob.position.z, &raw->vh.terrain_info); heading = get_heading_from_attitude_matrix (raw->vh.mob.attitude); face_normal = get_3d_terrain_point_data_normal (&raw->vh.terrain_info); get_3d_transformation_matrix_from_face_normal_and_heading (raw->vh.mob.attitude, face_normal, heading); // // weapon config // raw->vh.weapon_package_status_array = malloc_fast_mem (SIZE_WEAPON_PACKAGE_STATUS_ARRAY); memset (raw->vh.weapon_package_status_array, 0, SIZE_WEAPON_PACKAGE_STATUS_ARRAY); load_local_entity_weapon_config (en); // // update force info // add_to_force_info (get_local_force_entity (raw->vh.mob.side), en); //////////////////////////////////////// // // LINK INTO SYSTEM // //////////////////////////////////////// insert_local_entity_into_parents_child_list (en, LIST_TYPE_MEMBER, raw->vh.member_link.parent, raw->vh.member_link.child_pred); // // insert into LIST_TYPE_MEMBER before LIST_TYPE_VIEW // insert_local_entity_into_parents_child_list (en, LIST_TYPE_VIEW, get_camera_entity (), get_local_entity_view_list_pred (en)); insert_local_entity_into_parents_child_list (en, LIST_TYPE_SECTOR, get_local_sector_entity (&raw->vh.mob.position), NULL); insert_local_entity_into_parents_child_list (en, LIST_TYPE_UPDATE, get_update_entity (), NULL); } return (en); }
regeneration_building_types get_object_3d_regeneration_type ( object_3d_index_numbers object, int *landing_sub_type ) { ASSERT ( object > OBJECT_3D_INVALID_OBJECT_INDEX ); ASSERT ( object < OBJECT_3D_LAST ); *landing_sub_type = NUM_ENTITY_SUB_TYPE_LANDINGS; if ( regeneration_object_database[object].regeneration_sub_type == NUM_ENTITY_SUB_TYPE_REGENS ) { object_3d_instance *object_instance; object_3d_sub_object_search_data search; object_instance = construct_3d_object ( object ); search.search_object = object_instance; search.search_depth = 0; search.sub_object_index = OBJECT_3D_SUB_OBJECT_REGEN_FIXED_WING; if ( find_object_3d_sub_object ( &search ) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND ) { regeneration_object_database[object].regeneration_sub_type = ENTITY_SUB_TYPE_REGEN_FIXED_WING; *landing_sub_type = ENTITY_SUB_TYPE_LANDING_FIXED_WING; } search.search_object = object_instance; search.search_depth = 0; search.sub_object_index = OBJECT_3D_SUB_OBJECT_REGEN_HELICOPTER; if ( find_object_3d_sub_object ( &search ) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND ) { regeneration_object_database[object].regeneration_sub_type = ENTITY_SUB_TYPE_REGEN_HELICOPTER; *landing_sub_type = ENTITY_SUB_TYPE_LANDING_HELICOPTER; } search.search_object = object_instance; search.search_depth = 0; search.sub_object_index = OBJECT_3D_SUB_OBJECT_REGEN_ROUTED_VEHICLE; if ( find_object_3d_sub_object ( &search ) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND ) { regeneration_object_database[object].regeneration_sub_type = ENTITY_SUB_TYPE_REGEN_GROUND; *landing_sub_type = ENTITY_SUB_TYPE_LANDING_GROUND; } search.search_object = object_instance; search.search_depth = 0; search.sub_object_index = OBJECT_3D_SUB_OBJECT_REGEN_PERSON; if ( find_object_3d_sub_object ( &search ) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND ) { regeneration_object_database[object].regeneration_sub_type = ENTITY_SUB_TYPE_REGEN_PEOPLE; *landing_sub_type = ENTITY_SUB_TYPE_LANDING_PEOPLE; } /* search.object = object_instance; search.search_depth = 0; search.sub_object_index = OBJECT_3D_SUB_OBJECT_REGEN_SHIP_VEHICLE; if ( find_object_3d_sub_object ( &search ) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND ) { regeneration_object_database[object].regeneration_sub_type = ENTITY_SUB_TYPE_REGEN_SHIP_VEHICLE; *landing_sub_type = ENTITY_SUB_TYPE_LANDING_SEA; } */ destruct_3d_object ( object_instance ); if ( regeneration_object_database[object].regeneration_sub_type == NUM_ENTITY_SUB_TYPE_REGENS ) { regeneration_object_database[object].regeneration_sub_type = ENTITY_SUB_TYPE_REGEN_NONE; } } switch ( regeneration_object_database[object].regeneration_sub_type ) { case ENTITY_SUB_TYPE_REGEN_FIXED_WING: { *landing_sub_type = ENTITY_SUB_TYPE_LANDING_FIXED_WING; break; } case ENTITY_SUB_TYPE_REGEN_HELICOPTER: { *landing_sub_type = ENTITY_SUB_TYPE_LANDING_HELICOPTER; break; } case ENTITY_SUB_TYPE_REGEN_GROUND: { *landing_sub_type = ENTITY_SUB_TYPE_LANDING_GROUND; break; } case ENTITY_SUB_TYPE_REGEN_PEOPLE: { *landing_sub_type = ENTITY_SUB_TYPE_LANDING_PEOPLE; break; } case ENTITY_SUB_TYPE_REGEN_NONE: { *landing_sub_type = NUM_ENTITY_SUB_TYPE_LANDINGS; break; } default: { debug_fatal ( "REGEN: unknown regen type" ); } } return ( regeneration_object_database[object].regeneration_sub_type ); }
void initialise_default_virtual_cockpit_3d (void) { // // 3D instances // virtual_cockpit_inst3d = NULL; pilot_head_pitch_datum = 0.0; //VJ# co_pilot_head_pitch_datum = 0.0; //C:\gms\Razorworks\eech-new\modules\3d\3dobjdb.c virtual_cockpit_level1_inst3d = construct_3d_object (OBJECT_3D_AH64D_APACHE_LONGBOW); virtual_cockpit_level2_inst3d = construct_3d_object (OBJECT_3D_AH64D_APACHE_LONGBOW); virtual_cockpit_level3_inst3d = construct_3d_object (OBJECT_3D_AH64D_APACHE_LONGBOW); virtual_cockpit_fillet_level1_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_LEVEL1_FILLET); virtual_cockpit_fillet_level2_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_LEVEL2_FILLET); virtual_cockpit_fillet_level3_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_LEVEL3_FILLET); virtual_cockpit_main_rotor_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_MAIN_ROTOR); virtual_cockpit_adi_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_ADI); virtual_cockpit_large_adi_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_LARGE_ADI); virtual_cockpit_compass_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_COMPASS); virtual_cockpit_instrument_needles_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_NEEDLES); virtual_cockpit_instrument_large_needles_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_LARGE_NEEDLES); virtual_cockpit_upfront_display_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_DISPLAYS_UPFRONT); virtual_cockpit_lhs_mfd_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_DISPLAYS_LHS_MFD); virtual_cockpit_rhs_mfd_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_DISPLAYS_RHS_MFD); virtual_cockpit_display_view_mfd_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_MFD_DISPLAYS_NEW); // // wipers and rain // initialise_default_virtual_cockpit_wiper_and_rain_effect (); // // virtual cockpit cameras // initialise_common_virtual_cockpit_cameras (); //VJ wideview mod, date: 18-mar-03 wide_cockpit_nr = WIDEVIEW_APACHE_PILOT; //VJ wideview mod, date: 20-mar-03 //start up in normal view because when you switch to wideview the parameters are read set_global_wide_cockpit(FALSE); edit_wide_cockpit = FALSE; subnr = 0; dx = 0; dy = 0; dz = 0; // initialise_default_lamp_screen (); }
void initialise_blackhawk_virtual_cockpit (void) { // // 3D instances // virtual_cockpit_inst3d = NULL; pilot_head_pitch_datum = 0.0; co_pilot_head_pitch_datum = 0.0; virtual_cockpit_level1_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_LEVEL1); virtual_cockpit_level2_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_LEVEL2); virtual_cockpit_level3_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_LEVEL3); virtual_cockpit_fillet_level1_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_LEVEL1_FILLET); virtual_cockpit_fillet_level2_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_LEVEL2_FILLET); virtual_cockpit_fillet_level3_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_LEVEL3_FILLET); virtual_cockpit_main_rotor_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_MAIN_ROTOR); virtual_cockpit_adi_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_ADI); virtual_cockpit_large_adi_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_LARGE_ADI); virtual_cockpit_compass_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_COMPASS); virtual_cockpit_instrument_needles_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_NEEDLES); virtual_cockpit_instrument_large_needles_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_INSTRUMENTS_LARGE_NEEDLES); virtual_cockpit_upfront_display_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_DISPLAYS_UPFRONT); virtual_cockpit_lhs_mfd_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_DISPLAYS_LHS_MFD); virtual_cockpit_rhs_mfd_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_DISPLAYS_RHS_MFD); virtual_cockpit_display_view_mfd_inst3d = construct_3d_object (OBJECT_3D_APACHE_VIRTUAL_COCKPIT_MFD_DISPLAYS_NEW); // // wipers and rain // initialise_blackhawk_virtual_cockpit_wiper_and_rain_effect (); // // virtual cockpit cameras // initialise_common_virtual_cockpit_cameras (); //VJ 050208 cleaing up wideview wide_cockpit_nr = WIDEVIEW_APACHE_PILOT; //VJ wideview mod, date: 20-mar-03 //start up in normal view because when you switch to wideview the parameters are read set_global_wide_cockpit(FALSE); }
void unpack_vehicle_data (entity *en, vehicle *raw, pack_modes mode) { int package; ASSERT ((mode >= 0) && (mode < NUM_PACK_MODES)); switch (mode) { //////////////////////////////////////// case PACK_MODE_SERVER_SESSION: case PACK_MODE_CLIENT_SESSION: //////////////////////////////////////// { // // unpack mobile data // unpack_mobile_data (en, &raw->mob, mode); // // unpack vehicle data // raw->object_3d_shape = unpack_int_value (en, INT_TYPE_OBJECT_3D_SHAPE); raw->inst3d = construct_3d_object (raw->object_3d_shape); if (mode == PACK_MODE_SERVER_SESSION) { ///////////////////////////////////////////////////////////////// if (unpack_int_value (en, INT_TYPE_VALID)) { unpack_list_root (en, LIST_TYPE_TASK_DEPENDENT, &raw->task_dependent_root); } ///////////////////////////////////////////////////////////////// } ///////////////////////////////////////////////////////////////// if (unpack_int_value (en, INT_TYPE_VALID)) { unpack_list_root (en, LIST_TYPE_LAUNCHED_WEAPON, &raw->launched_weapon_root); } ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// if (unpack_int_value (en, INT_TYPE_VALID)) { unpack_list_root (en, LIST_TYPE_MOVEMENT_DEPENDENT, &raw->movement_dependent_root); } ///////////////////////////////////////////////////////////////// unpack_list_link (en, LIST_TYPE_FOLLOWER, &raw->follower_link); // gunship_target_link unpack_list_link (en, LIST_TYPE_MEMBER, &raw->member_link); ///////////////////////////////////////////////////////////////// if (unpack_int_value (en, INT_TYPE_VALID)) { unpack_list_link (en, LIST_TYPE_MOVEMENT_DEPENDENT, &raw->movement_dependent_link); } ///////////////////////////////////////////////////////////////// // view_link if (mode == PACK_MODE_SERVER_SESSION) { unpack_list_link (en, LIST_TYPE_TAKEOFF_QUEUE, &raw->takeoff_queue_link); } raw->operational_state = unpack_int_value (en, INT_TYPE_OPERATIONAL_STATE); raw->sleep = unpack_float_value (en, FLOAT_TYPE_SLEEP); if (mode == PACK_MODE_SERVER_SESSION) { raw->distance = unpack_float_value (en, FLOAT_TYPE_DISTANCE); // only needed by server? } ///////////////////////////////////////////////////////////////// if (raw->operational_state == OPERATIONAL_STATE_LANDED) { raw->loading_door_state = unpack_float_value (en, FLOAT_TYPE_LOADING_DOOR_STATE); } ///////////////////////////////////////////////////////////////// // radar_rotation_state if (mode == PACK_MODE_SERVER_SESSION) { raw->death_timer = unpack_float_value (en, FLOAT_TYPE_DEATH_TIMER); raw->target_fire_timer = unpack_float_value (en, FLOAT_TYPE_TARGET_FIRE_TIMER); raw->target_scan_timer = unpack_float_value (en, FLOAT_TYPE_TARGET_SCAN_TIMER); } // view_interest_level // weapon_burst_timer raw->weapon_system_ready_state = unpack_float_value (en, FLOAT_TYPE_WEAPON_SYSTEM_READY_STATE); if (mode == PACK_MODE_SERVER_SESSION) { raw->decoy_release_timer = unpack_float_value (en, FLOAT_TYPE_DECOY_RELEASE_TIMER); } //////////////////////////////////////// raw->weapon_config_type = (weapon_config_types) unpack_int_value (en, INT_TYPE_WEAPON_CONFIG_TYPE); raw->weapon_package_status_array = (weapon_package_status *) malloc_fast_mem (SIZE_WEAPON_PACKAGE_STATUS_ARRAY); memset (raw->weapon_package_status_array, 0, SIZE_WEAPON_PACKAGE_STATUS_ARRAY); for (package = 0; package < NUM_WEAPON_PACKAGES; package++) { if (weapon_config_database[raw->weapon_config_type][package].sub_type == ENTITY_SUB_TYPE_WEAPON_NO_WEAPON) { break; } raw->weapon_package_status_array[package].number = unpack_int_value (en, INT_TYPE_WEAPON_PACKAGE_NUMBER); raw->weapon_package_status_array[package].damaged = unpack_int_value (en, INT_TYPE_WEAPON_PACKAGE_DAMAGED); if (weapon_config_database[raw->weapon_config_type][package].rotate) { raw->weapon_package_status_array[package].weapon_system_heading = unpack_float_value (en, FLOAT_TYPE_WEAPON_SYSTEM_HEADING); raw->weapon_package_status_array[package].weapon_system_pitch = unpack_float_value (en, FLOAT_TYPE_WEAPON_SYSTEM_PITCH); } // muzzle_flash_timer } reset_entity_weapon_config_animation (en); raw->selected_weapon = unpack_int_value (en, INT_TYPE_SELECTED_WEAPON); //////////////////////////////////////// // sound_effect_data raw->formation_position = unpack_int_value (en, INT_TYPE_FORMATION_POSITION); // selected_weapon_system_ready // weapon_and_target_vectors_valid // gunship_radar_los_clear // los_to_target raw->lights_on = unpack_int_value (en, INT_TYPE_LIGHTS_ON); // cpg_identified raw->group_member_number = unpack_int_value (en, INT_TYPE_GROUP_MEMBER_NUMBER); // id_number_significant_digits raw->damage_level = unpack_int_value (en, INT_TYPE_DAMAGE_LEVEL); // id_number raw->weapon_vector.x = 0.0; raw->weapon_vector.y = 0.0; raw->weapon_vector.z = 1.0; raw->weapon_to_target_vector.x = 0.0; raw->weapon_to_target_vector.y = 0.0; raw->weapon_to_target_vector.z = -1.0; // terrain_info break; } //////////////////////////////////////// case PACK_MODE_BROWSE_SESSION: //////////////////////////////////////// { break; } //////////////////////////////////////// case PACK_MODE_UPDATE_ENTITY: //////////////////////////////////////// { // // cannot update entity at this level as the update may not apply to all entity types below // break; } } }
static entity *create_local (entity_types type, int index, char *pargs) { entity *en; fixed_wing *raw; entity_sub_types group_sub_type; //////////////////////////////////////// // // VALIDATE // //////////////////////////////////////// validate_local_create_entity_index (index); #if DEBUG_MODULE debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_CREATE, NULL, type, index); #endif en = get_free_entity (index); if (en) { //////////////////////////////////////// // // MALLOC ENTITY DATA // //////////////////////////////////////// set_local_entity_type (en, type); raw = malloc_fast_mem (sizeof (fixed_wing)); set_local_entity_data (en, raw); //////////////////////////////////////// // // INITIALISE ALL ENTITY DATA TO 'WORKING' DEFAULT VALUES // // DO NOT USE ACCESS FUNCTIONS // // DO NOT USE RANDOM VALUES // //////////////////////////////////////// memset (raw, 0, sizeof (fixed_wing)); // // mobile // raw->ac.mob.sub_type = ENTITY_SUB_TYPE_UNINITIALISED; raw->ac.mob.position.x = MID_MAP_X; raw->ac.mob.position.y = MID_MAP_Y; raw->ac.mob.position.z = MID_MAP_Z; get_identity_matrix3x3 (raw->ac.mob.attitude); raw->ac.mob.alive = TRUE; raw->ac.mob.side = ENTITY_SIDE_UNINITIALISED; raw->ac.operational_state = OPERATIONAL_STATE_UNKNOWN; // // aircraft // raw->ac.object_3d_shape = OBJECT_3D_INVALID_OBJECT_INDEX; raw->ac.weapon_config_type = WEAPON_CONFIG_TYPE_UNINITIALISED; raw->ac.selected_weapon = ENTITY_SUB_TYPE_WEAPON_NO_WEAPON; raw->ac.weapon_vector.x = 0.0; raw->ac.weapon_vector.y = 0.0; raw->ac.weapon_vector.z = 1.0; raw->ac.weapon_to_target_vector.x = 0.0; raw->ac.weapon_to_target_vector.y = 0.0; raw->ac.weapon_to_target_vector.z = -1.0; raw->ac.loading_door_state = AIRCRAFT_LOADING_DOORS_OPEN_FLOAT_VALUE; raw->ac.undercarriage_state = AIRCRAFT_UNDERCARRIAGE_DOWN_FLOAT_VALUE; raw->ac.air_radar_contact_timeout = AIR_RADAR_CONTACT_TIMEOUT_INVALID; // // fixed_wing // //////////////////////////////////////// // // OVERWRITE DEFAULT VALUES WITH GIVEN ATTRIBUTES // //////////////////////////////////////// set_local_entity_attributes (en, pargs); //////////////////////////////////////// // // CHECK MANDATORY ATTRIBUTES HAVE BEEN GIVEN // //////////////////////////////////////// ASSERT (raw->ac.member_link.parent); ASSERT (get_local_entity_type (raw->ac.member_link.parent) == ENTITY_TYPE_GROUP); //////////////////////////////////////// // // RESOLVE DEFAULT VALUES // //////////////////////////////////////// // // side // if (raw->ac.mob.side == ENTITY_SIDE_UNINITIALISED) { raw->ac.mob.side = get_local_entity_int_value (raw->ac.member_link.parent, INT_TYPE_SIDE); } ASSERT (raw->ac.mob.side != ENTITY_SIDE_NEUTRAL); // // sub_type // if (raw->ac.mob.sub_type == ENTITY_SUB_TYPE_UNINITIALISED) { group_sub_type = get_local_entity_int_value (raw->ac.member_link.parent, INT_TYPE_ENTITY_SUB_TYPE); if (raw->ac.mob.side == ENTITY_SIDE_BLUE_FORCE) { raw->ac.mob.sub_type = group_database[group_sub_type].default_blue_force_sub_type; } else { raw->ac.mob.sub_type = group_database[group_sub_type].default_red_force_sub_type; } } ASSERT (entity_sub_type_aircraft_valid (raw->ac.mob.sub_type)); // // 3D shape // if (raw->ac.object_3d_shape == OBJECT_3D_INVALID_OBJECT_INDEX) { raw->ac.object_3d_shape = aircraft_database[raw->ac.mob.sub_type].default_3d_shape; } // // weapon config // if (raw->ac.weapon_config_type == WEAPON_CONFIG_TYPE_UNINITIALISED) { raw->ac.weapon_config_type = aircraft_database[raw->ac.mob.sub_type].default_weapon_config_type; } ASSERT (weapon_config_type_valid (raw->ac.weapon_config_type)); // // damage levels // raw->ac.damage_level = aircraft_database[raw->ac.mob.sub_type].initial_damage_level; //////////////////////////////////////// // // BUILD COMPONENTS // //////////////////////////////////////// // // 3D object // raw->ac.inst3d = construct_3d_object (raw->ac.object_3d_shape); set_fixed_wing_id_number (en); initialise_fixed_wing_propellors (en); #if RECOGNITION_GUIDE raw->ac.loading_door_state = AIRCRAFT_LOADING_DOORS_CLOSED_FLOAT_VALUE; #endif // // weapon config // raw->ac.weapon_package_status_array = malloc_fast_mem (SIZE_WEAPON_PACKAGE_STATUS_ARRAY); memset (raw->ac.weapon_package_status_array, 0, SIZE_WEAPON_PACKAGE_STATUS_ARRAY); load_local_entity_weapon_config (en); // // update force info // add_to_force_info (get_local_force_entity (raw->ac.mob.side), en); //////////////////////////////////////// // // LINK INTO SYSTEM // //////////////////////////////////////// insert_local_entity_into_parents_child_list (en, LIST_TYPE_MEMBER, raw->ac.member_link.parent, raw->ac.member_link.child_pred); // // insert into LIST_TYPE_MEMBER before LIST_TYPE_VIEW // insert_local_entity_into_parents_child_list (en, LIST_TYPE_VIEW, get_camera_entity (), get_local_entity_view_list_pred (en)); insert_local_entity_into_parents_child_list (en, LIST_TYPE_SECTOR, get_local_sector_entity (&raw->ac.mob.position), NULL); insert_local_entity_into_parents_child_list (en, LIST_TYPE_UPDATE, get_update_entity (), NULL); } return (en); }