// try to add a ship to the escort list, if slot available void hud_add_ship_to_escort(int objnum, int supress_feedback) { escort_info complete_escorts[MAX_COMPLETE_ESCORT_LIST]; int num_complete_escorts, idx, found; // get complete escort list hud_create_complete_escort_list(complete_escorts, &num_complete_escorts); // check if ship is already on complete escort list found = 0; for (idx=0; idx<num_complete_escorts; idx++) { if (complete_escorts[idx].obj_signature == Objects[objnum].signature) { found = 1; break; } } // add new ship into complete list if ( !found ) { complete_escorts[num_complete_escorts].objnum = objnum; complete_escorts[num_complete_escorts].obj_signature = Objects[objnum].signature; complete_escorts[num_complete_escorts].priority = Ships[Objects[objnum].instance].escort_priority; // remove him from escort list Ships[Objects[objnum].instance].flags |= SF_ESCORT; num_complete_escorts++; } // sort escort list by priority insertion_sort(complete_escorts, num_complete_escorts, sizeof(escort_info), escort_compare_func); // merge list merge_escort_lists(complete_escorts, num_complete_escorts); // maybe do feedback if ( (Num_escort_ships == Max_escort_ships) && !supress_feedback) { found = 0; // search thru list for objnum for (idx=0; idx<Num_escort_ships; idx++) { if (Escort_ships[idx].objnum == objnum) { found = 1; break; } } if (!found) { HUD_sourced_printf(HUD_SOURCE_HIDDEN, XSTR( "Escort list is full with %d ships", 288), Num_escort_ships); snd_play( &Snds[SND_TARGET_FAIL]); } } hud_gauge_popup_start(HUD_ESCORT_VIEW); }
// ---------------------------------------------------------------------- // hud_remove_ship_from_escort_index() // // Take a ship out of the escort list void hud_remove_ship_from_escort_index(int dead_index, int objnum) { int i, count, num_complete_escorts; escort_info bakup_arr[MAX_COMPLETE_ESCORT_LIST], complete_escorts[MAX_COMPLETE_ESCORT_LIST]; // remove him from escort list if ((objnum >= 0) && (Objects[objnum].type == OBJ_SHIP) && (Objects[objnum].instance >= 0)) { Ships[Objects[objnum].instance].flags &= ~SF_ESCORT; } count = 0; for (i = 0; i < Num_escort_ships; i++) { if (i != dead_index) { bakup_arr[count++] = Escort_ships[i]; } } for (i = 0; i < count; i++) { Escort_ships[i] = bakup_arr[i]; } Num_escort_ships--; Assert(Num_escort_ships >= 0); // get complete escort list hud_create_complete_escort_list(complete_escorts, &num_complete_escorts); // sort escort list by priority insertion_sort(complete_escorts, num_complete_escorts, sizeof(escort_info), escort_compare_func); // merge list merge_escort_lists(complete_escorts, num_complete_escorts); hud_gauge_popup_start(HUD_ESCORT_VIEW); }
// try to add a ship to the escort list, if slot available void hud_add_ship_to_escort(int objnum, int supress_feedback) { escort_info complete_escorts[MAX_COMPLETE_ESCORT_LIST]; int num_complete_escorts, idx, found; // get complete escort list hud_create_complete_escort_list(complete_escorts, &num_complete_escorts); // ensure the complete escort list is not full already if (num_complete_escorts == MAX_COMPLETE_ESCORT_LIST) { return; } // check if ship is already on complete escort list found = 0; for (idx=0; idx<num_complete_escorts; idx++) { if (complete_escorts[idx].obj_signature == Objects[objnum].signature) { found = 1; break; } } // add new ship into complete list if ( !found ) { complete_escorts[num_complete_escorts].objnum = objnum; complete_escorts[num_complete_escorts].obj_signature = Objects[objnum].signature; complete_escorts[num_complete_escorts].priority = Ships[Objects[objnum].instance].escort_priority; complete_escorts[num_complete_escorts].escort_hit_timer = 0; complete_escorts[num_complete_escorts].escort_hit_next_flash = 0; complete_escorts[num_complete_escorts].escort_show_bright = false; // add him to escort list Ships[Objects[objnum].instance].flags.set(Ship::Ship_Flags::Escort); num_complete_escorts++; } // sort escort list by priority insertion_sort(complete_escorts, num_complete_escorts, sizeof(escort_info), escort_compare_func); // merge list merge_escort_lists(complete_escorts, num_complete_escorts); // maybe do feedback if ( (Num_escort_ships == Max_escort_ships) && !supress_feedback) { found = 0; // search thru list for objnum for (idx=0; idx<Num_escort_ships; idx++) { if (Escort_ships[idx].objnum == objnum) { found = 1; break; } } if (!found) { HUD_sourced_printf(HUD_SOURCE_HIDDEN, XSTR( "Escort list is full with %d ships", 288), Num_escort_ships); snd_play( gamesnd_get_game_sound(GameSounds::TARGET_FAIL)); } } hud_gauge_popup_start(HUD_ESCORT_VIEW); }