static void destroy_local (entity *en) { ship_vehicle *raw; //////////////////////////////////////// // // PRE-AMBLE // //////////////////////////////////////// #if DEBUG_MODULE >= 2 debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_DESTROY, en); #endif raw = (ship_vehicle *) get_local_entity_data (en); set_local_entity_int_value (en, INT_TYPE_ALIVE, FALSE); //////////////////////////////////////// // // VALIDATE // //////////////////////////////////////// //////////////////////////////////////// // // DESTROY COMPONENTS // //////////////////////////////////////// destruct_3d_object (raw->vh.inst3d); free_mem (raw->vh.weapon_package_status_array); if (raw->vh.sound_effect_data) { destroy_system_sound_effect (raw->vh.sound_effect_data); } //////////////////////////////////////// // // UNLINK FROM SYSTEM // //////////////////////////////////////// // // ship_vehicle // // // vehicle // unlink_local_entity_children (en, LIST_TYPE_TASK_DEPENDENT); unlink_local_entity_children (en, LIST_TYPE_LAUNCHED_WEAPON); unlink_local_entity_children (en, LIST_TYPE_MOVEMENT_DEPENDENT); delete_local_entity_from_parents_child_list (en, LIST_TYPE_MOVEMENT_DEPENDENT); delete_local_entity_from_parents_child_list (en, LIST_TYPE_FOLLOWER); delete_local_entity_from_parents_child_list (en, LIST_TYPE_DESIGNATED_TARGET); // Jabberwock 031107 Designated targets delete_local_entity_from_parents_child_list (en, LIST_TYPE_GUNSHIP_TARGET); delete_local_entity_from_parents_child_list (en, LIST_TYPE_MEMBER); delete_local_entity_from_parents_child_list (en, LIST_TYPE_VIEW); delete_local_entity_from_parents_child_list (en, LIST_TYPE_TAKEOFF_QUEUE); // // mobile // unlink_local_entity_children (en, LIST_TYPE_SPECIAL_EFFECT); unlink_local_entity_children (en, LIST_TYPE_TARGET); delete_local_entity_from_parents_child_list (en, LIST_TYPE_PADLOCK); delete_local_entity_from_parents_child_list (en, LIST_TYPE_SECTOR); delete_local_entity_from_parents_child_list (en, LIST_TYPE_TARGET); delete_local_entity_from_parents_child_list (en, LIST_TYPE_UPDATE); #if LANDING_ROUTE_CHECK destroy_debug_entity_landing_route_check (en); #endif //////////////////////////////////////// // // FREE ENTITY DATA // //////////////////////////////////////// free_mem (raw); set_free_entity (en); }
static void destroy_local (entity *en) { helicopter *raw; //////////////////////////////////////// // // PRE-AMBLE // //////////////////////////////////////// #if DEBUG_MODULE >= 2 debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_DESTROY, en); #endif raw = get_local_entity_data (en); set_local_entity_int_value (en, INT_TYPE_ALIVE, FALSE); //////////////////////////////////////// // // VALIDATE // //////////////////////////////////////// //////////////////////////////////////// // // DESTROY COMPONENTS // //////////////////////////////////////// destruct_3d_object (raw->ac.inst3d); free_mem (raw->ac.weapon_package_status_array); if (raw->ac.sound_effect_data) { destroy_system_sound_effect (raw->ac.sound_effect_data); } //////////////////////////////////////// // // UNLINK FROM SYSTEM // //////////////////////////////////////// // // helicopter // unlink_local_entity_children (en, LIST_TYPE_GUNSHIP_TARGET); unlink_local_entity_children (en, LIST_TYPE_PADLOCK); // // aircraft // unlink_local_entity_children (en, LIST_TYPE_AIRCREW); unlink_local_entity_children (en, LIST_TYPE_TASK_DEPENDENT); unlink_local_entity_children (en, LIST_TYPE_LAUNCHED_WEAPON); delete_local_entity_from_parents_child_list (en, LIST_TYPE_FOLLOWER); delete_local_entity_from_parents_child_list (en, LIST_TYPE_GUNSHIP_TARGET); delete_local_entity_from_parents_child_list (en, LIST_TYPE_MEMBER); delete_local_entity_from_parents_child_list (en, LIST_TYPE_MOVEMENT_DEPENDENT); delete_local_entity_from_parents_child_list (en, LIST_TYPE_VIEW); delete_local_entity_from_parents_child_list (en, LIST_TYPE_TAKEOFF_QUEUE); // // mobile // unlink_local_entity_children (en, LIST_TYPE_SPECIAL_EFFECT); unlink_local_entity_children (en, LIST_TYPE_TARGET); delete_local_entity_from_parents_child_list (en, LIST_TYPE_PADLOCK); delete_local_entity_from_parents_child_list (en, LIST_TYPE_SECTOR); delete_local_entity_from_parents_child_list (en, LIST_TYPE_TARGET); delete_local_entity_from_parents_child_list (en, LIST_TYPE_UPDATE); // // // if (en == get_gunship_entity ()) { set_raw_gunship_entity (NULL); } #if LANDING_ROUTE_CHECK destroy_debug_entity_landing_route_check (en); #endif //////////////////////////////////////// // // FREE ENTITY DATA // //////////////////////////////////////// free_mem (raw); set_free_entity (en); }