Fare il jettison di qualcosa significa in realtà cancellare una mesh nel tuo mezzo e aggiungere un vascello che sia la mesh eliminata ma sotto forma di mezzo a se stante.
Il codice che ho creato e che fa questo in Antares è il seguente:
void antares::destroyed() {
char cbuf[256];
VESSELSTATUS vs;
OBJHANDLE antares = GetHandle();
;;;introduci il puntatore antares (OBJHANDLE e lo associ al vascello attualmento controllato
dalla DLL;;;;
OBJHANDLE h;
VESSEL *V;
OBJHANDLE v;
;;;fino a qui introduci una serie di puntatori;;;
GetStatus (vs);
vs.flag[0] = 1;
VECTOR3 ofs = {0,0,6.92};
Local2Rel (ofs, vs.rpos);
VECTOR3 vel = _V(0,0,0.2);
VECTOR3 rofs, rvel = {vs.rvel.x, vs.rvel.y, vs.rvel.z};
Local2Rel (ofs, vs.rpos);
GlobalRot (vel, rofs);
vs.rvel.x = rvel.x+rofs.x;
vs.rvel.y = rvel.y+rofs.y;
vs.rvel.z = rvel.z+rofs.z;
;;;fino a qui hai impostato una serie di valori che serviranno per determinare velocità, rotazione e posizione rispetto al tuio vascello al momento del jettison e salvate sotto il VESSELSTATUS vs;;;
FILEHANDLE antaresLRJett = oapiOpenFile ("AntaresLRjett.cfg", FILE_OUT, ROOT);
{
sprintf (cbuf, "%0.4f", O2time);
oapiWriteItem_string (antaresLRJett, "O2TIME", cbuf);
oapiWriteItem_int(antaresLRJett, "CMD_ABOARD_CAP",com_aboard);
oapiWriteItem_int(antaresLRJett, "PLT_ABOARD_CAP",pil_aboard);
oapiWriteItem_int(antaresLRJett, "MS1_ABOARD_CAP",ms1_aboard);
oapiWriteItem_int(antaresLRJett, "MS2_ABOARD_CAP",ms2_aboard);
oapiWriteItem_int(antaresLRJett, "MS3_ABOARD_CAP",ms3_aboard);
oapiWriteItem_int(antaresLRJett, "MS4_ABOARD_CAP",ms4_aboard);
}
;;;fino a qui una cosa specifica di Antares che scrive il numero di astronauti, e tempo di missione su un file esterno per poi essere letti in seguito;;;
h = oapiCreateVessel ("antaresLRcap", "antaresLRcap", vs);
DelMesh(0);DelMesh(1);DelMesh(2);DelMesh(3);DelMesh(4);DelMesh(5);
DelMesh(6);
DelDock(Dock0);
oapiSetFocusObject(h);
;;;fino a qui la parte importante: in ordine, crei il vascello (in questo caso la capsula), cancelli le mesh identiche a quella del nuovo vascello creato (qui astronauti e capsula lasciando solo MS), cancelli la porta docking e setti la visuale sul nuovo vascello creato;;;
status=1;
;;altra cosa importante: la variabile INT status indica lo stato del vascello, e cioè in questo caso il valore 1 indica che ci si trova in una situazione in cui la caspula è già stata divisa dall'SM. Questo è utile ai fini del salvataggio, in modo che e esci e rientri nella simulazione troverai tutte le cose al loro posto perchè hai detto alla DLL come devono essere disposte da quel determinato momento della separazione in poi.;;;
}
Da notare che qui ho usato un approccio un po miope, dettata dall'inesperienza dell'inizio: ho fatto in modo che fosse la capsula il nuovo vacello creato e non l'SM. Ciò ha complicato un po le cose ma non me la sono sentita di cambiare tutta l'impostazione e quindi così è rimasta fino ad oggi.. consiglio vivamente di fare in modo che il nuovo vascello creato sia il modulo di servizio 8e quindi il mezzo di fatto che diventerà inattivo e non l'opposto come ho fatto io..
Fermiamoci qui e incomincia a lavorare su questo, per il resto.. un passo alla volta....