[Change] Implemented pilot_copy a little better.
This commit is contained in:
		
							parent
							
								
									f23b51e540
								
							
						
					
					
						commit
						a70a55982e
					
				
							
								
								
									
										38
									
								
								src/pilot.c
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								src/pilot.c
									
									
									
									
									
								
							| @ -1646,6 +1646,7 @@ Pilot* pilot_createEmpty(Ship* ship, char* name, | ||||
|  *    @return Copy of src. | ||||
|  */ | ||||
| Pilot* pilot_copy(Pilot* src) { | ||||
|   int i; | ||||
|   Pilot* dest = malloc(sizeof(Pilot)); | ||||
|   memcpy(dest, src, sizeof(Pilot)); | ||||
|   if(src->name) dest->name = strdup(src->name); | ||||
| @ -1654,25 +1655,32 @@ Pilot* pilot_copy(Pilot* src) { | ||||
|   dest->solid = malloc(sizeof(Solid)); | ||||
|   memcpy(dest->solid, src->solid, sizeof(Solid)); | ||||
| 
 | ||||
|   /* Copy mountpoints. */ | ||||
|   if(src->mounted != NULL) { | ||||
|     dest->mounted = malloc(sizeof(int)*src->ship->nmounts); | ||||
|     memcpy(dest->mounted, src->mounted, sizeof(int)*src->ship->nmounts); | ||||
|   } | ||||
| 
 | ||||
|   /* Copy outfits. */ | ||||
|   dest->outfits = malloc(sizeof(PilotOutfit)*src->noutfits); | ||||
|   memcpy(dest->outfits, src->outfits, | ||||
|       sizeof(PilotOutfit)*src->noutfits); | ||||
|   dest->outfits     = NULL; | ||||
|   dest->noutfits    = 0; | ||||
|   dest->secondary   = NULL; | ||||
|   dest->ammo        = NULL; | ||||
|   dest->afterburner = NULL; | ||||
|   for(i = 0; i < src->noutfits; i++) | ||||
|     pilot_addOutfit(dest, src->outfits[i].outfit, | ||||
|         src->outfits[i].quantity); | ||||
| 
 | ||||
|   /* Copy commodities. */ | ||||
|   dest->commodities = malloc(sizeof(PilotCommodity)*src->ncommodities); | ||||
|   memcpy(dest->commodities, src->commodities, | ||||
|       sizeof(PilotCommodity)*src->ncommodities); | ||||
|   dest->commodities   = NULL; | ||||
|   dest->ncommodities  = 0; | ||||
|   for(i = 0; i < src->ncommodities; i++) | ||||
|     pilot_addCargo(dest, src->commodities[i].commodity, | ||||
|         src->commodities[i].quantity); | ||||
| 
 | ||||
|   /* Ai is not copied. */ | ||||
|   dest->task = NULL; | ||||
| 
 | ||||
|   /* Will set afterburner and correct stats. */ | ||||
|   pilot_calcStats(dest); | ||||
| 
 | ||||
|   return dest; | ||||
| } | ||||
| 
 | ||||
| @ -1688,6 +1696,14 @@ void pilot_free(Pilot* p) { | ||||
|     if(p->hook_type[i] != PILOT_HOOK_NONE) | ||||
|       hook_rm(p->hook[i]); | ||||
| 
 | ||||
|   /* Remove outfits. */ | ||||
|   while(p->outfits != NULL) | ||||
|     pilot_rmOutfit(p, p->outfits[0].outfit, p->outfits[0].quantity); | ||||
| 
 | ||||
|   /* Remove commodities. */ | ||||
|   if(p->commodities) | ||||
|     free(p->commodities); | ||||
| 
 | ||||
|   free(p->name); | ||||
| 
 | ||||
|   /* Clean up data. */ | ||||
| @ -1697,10 +1713,6 @@ void pilot_free(Pilot* p) { | ||||
|   if(player == p) player = NULL; | ||||
|   solid_free(p->solid); | ||||
|   if(p->mounted != NULL)  free(p->mounted); | ||||
|   if(p->outfits != NULL) | ||||
|     pilot_rmOutfit(p, p->outfits[0].outfit, p->outfits[0].quantity); | ||||
|   if(p->outfits)          free(p->outfits); | ||||
|   if(p->commodities)      free(p->commodities); | ||||
|   if(p->escorts)          free(p->escorts); | ||||
|   free(p); | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Allanis
						Allanis