// delete a whole wing, leaving ships intact but wingless. void remove_wing(int wing_num) { int i, total; object *ptr; if (check_wing_dependencies(wing_num)) return; Ship_editor_dialog.bypass_errors = Wing_editor_dialog.bypass_errors = 1; Ship_editor_dialog.update_data(0); total = Wings[wing_num].wave_count; for (i=0; i<total; i++) { ptr = &Objects[wing_objects[wing_num][i]]; if (ptr->type == OBJ_SHIP) remove_ship_from_wing(ptr->instance); else if (ptr->type == OBJ_START) remove_player_from_wing(ptr->instance); } Assert(!Wings[wing_num].wave_count); Ship_editor_dialog.initialize_data(1); Ship_editor_dialog.bypass_errors = Wing_editor_dialog.bypass_errors = 0; if (cur_wing == wing_num) { set_cur_wing(cur_wing = -1); // yes, one '=' is correct. } set_modified(); }
// delete a whole wing, also deleting its ships if necessary. int delete_wing(int wing_num, int bypass) { int i, r, total; if (already_deleting_wing) return 0; r = check_wing_dependencies(wing_num); if (r) return r; already_deleting_wing = 1; for (i=0; i<Num_reinforcements; i++) if (!stricmp(Wings[wing_num].name, Reinforcements[i].name)) { delete_reinforcement(i); break; } invalidate_references(Wings[wing_num].name, REF_TYPE_WING); if (!bypass) { total = Wings[wing_num].wave_count; for (i=0; i<total; i++) delete_object(wing_objects[wing_num][i]); } Wings[wing_num].wave_count = 0; Wings[wing_num].wing_squad_filename[0] = '\0'; Wings[wing_num].wing_insignia_texture = -1; if (cur_wing == wing_num) set_cur_wing(cur_wing = -1); // yes, one '=' is correct. free_sexp2(Wings[wing_num].arrival_cue); free_sexp2(Wings[wing_num].departure_cue); Num_wings--; set_modified(); update_custom_wing_indexes(); already_deleting_wing = 0; return 0; }
// delete a whole wing, leaving ships intact but wingless. void remove_wing(int wing_num) { int i, total; object *ptr; if (check_wing_dependencies(wing_num)) return; Ship_editor_dialog.bypass_errors = Wing_editor_dialog.bypass_errors = 1; Ship_editor_dialog.update_data(0); total = Wings[wing_num].wave_count; for (i=0; i<total; i++) { ptr = &Objects[wing_objects[wing_num][i]]; if (ptr->type == OBJ_SHIP) remove_ship_from_wing(ptr->instance, 0); else if (ptr->type == OBJ_START) remove_player_from_wing(ptr->instance, 0); } Assert(!Wings[wing_num].wave_count); Wings[wing_num].wave_count = 0; Wings[wing_num].wing_squad_filename[0] = '\0'; Wings[wing_num].wing_insignia_texture = -1; Ship_editor_dialog.initialize_data(1); Ship_editor_dialog.bypass_errors = Wing_editor_dialog.bypass_errors = 0; if (cur_wing == wing_num) { set_cur_wing(cur_wing = -1); // yes, one '=' is correct. } free_sexp2(Wings[wing_num].arrival_cue); free_sexp2(Wings[wing_num].departure_cue); Num_wings--; update_custom_wing_indexes(); set_modified(); }