Dan's Orbiter page

Orbiter Francophone => Création Orbiter Francophone => Topic started by: no matter on 04 July 2008, 10:16:07

Title: [résolu] ClearPropellantResources/SetThrusterResource
Post by: no matter on 04 July 2008, 10:16:07
Je suis en train de bien ramer avec une histoire de fuel...

Lorsque je n'ai plus d'électricité dans mon vaisseau, j'utilise ClearProppelantResources avec d'autres choses
afin que le vaisseau soit pratiquement totalement inaccessible à l'utilisateur.

Il ne reste en fait qu'une touche par le biais de laquelle lorsque l'équipage n'étais pas à bord au moment de
l'extinction, le vaisseau peut être remis en route (sous réserve d'être docké à une station).

A ce moment j'utilise SetThrusterResource après avoir recréé un nouveau réservoir de fuel.

L'ennuis est au niveau des rcs. Si par défaut, le nouveau réservoir créé est automatiquement assigné à mon th_main (le moteur principal), il en va différemment pour chaque thrusters RCS. Il faut donc réassigner soi-même le fuel aux moteurs d'attitude.  SetThrusterResource fait normalement l'affaire sauf si on utilise le modèle de rcs du deltaglider, çà ne peut pas fonctionner:

Une petite partie du code pour les rcs:

   
Code: [Select]
           [color=blue]th_att_rot[0][/color] = th_att_lin[0] = CreateThruster (_V(0,0, 8), _V(0, 1,0), MAXRCSTH, hpr, ISP);
            [color=green]th_att_rot[1][/color] = th_att_lin[3] = CreateThruster (_V(0,0,-8), _V(0,-1,0), MAXRCSTH, hpr, ISP);
[color=red]th_att_rot[2][/color] = th_att_lin[2] = CreateThruster (_V(0,0, 8), _V(0,-1,0), MAXRCSTH, hpr, ISP);
th_att_rot[3] = th_att_lin[1] = CreateThruster (_V(0,0,-8), _V(0, 1,0), MAXRCSTH, hpr, ISP);
CreateThrusterGroup (th_att_rot,   2, THGROUP_ATT_PITCHUP);
CreateThrusterGroup (th_att_rot+2, 2, THGROUP_ATT_PITCHDOWN);
CreateThrusterGroup (th_att_lin,   2, THGROUP_ATT_UP);
CreateThrusterGroup (th_att_lin+2, 2, THGROUP_ATT_DOWN);

[color=blue]th_att_rot[0][/color] = th_att_lin[0] = CreateThruster (_V(0,0, 6), _V(-1,0,0), MAXRCSTH, hpr, ISP);
[color=green]th_att_rot[1][/color] = th_att_lin[3] = CreateThruster (_V(0,0,-6), _V( 1,0,0), MAXRCSTH, hpr, ISP);
[color=red]th_att_rot[2][/color] = th_att_lin[2] = CreateThruster (_V(0,0, 6), _V( 1,0,0), MAXRCSTH, hpr, ISP);
th_att_rot[3] = th_att_lin[1] = CreateThruster (_V(0,0,-6), _V(-1,0,0), MAXRCSTH, hpr, ISP);
CreateThrusterGroup (th_att_rot,   2, THGROUP_ATT_YAWLEFT);
CreateThrusterGroup (th_att_rot+2, 2, THGROUP_ATT_YAWRIGHT);
CreateThrusterGroup (th_att_lin,   2, THGROUP_ATT_LEFT);
CreateThrusterGroup (th_att_lin+2, 2, THGROUP_ATT_RIGHT);

Pas la peine d'en mettre plus, on comprend bien que lorsque je vais réassigner (après qu'ils aient été déconnectésdu fuel (hpr) ) à la nouvelle ressource, tous les thrusters ne seront pas pris en compte.
Comment les différencier du reste si ils ont le même handle ( th_att_rot[ i ] ):wonder:
Code: [Select]
for (int i=0; i<4; i++)
      SetThrusterResource(th_att_rot[ i ], hpr_new) ;

A part détruire les rcs et les recréer (ou les créer différemment au départ), je ne trouve pas d'autre moyen...

EDIT: résolu, je vais simplement mettre le fuel à zéro au lieu de supprimer la ressource.



Message modifié ( 04-07-2008 11:34 )
Title: Re: [résolu] ClearPropellantResources/SetThrusterResource
Post by: DanSteph on 04 July 2008, 17:19:26
Je *crois* que pour deconnecter les moteur du reservoir je fais ismplement un SetThrusterResource avec NULL...
voir la doc ? (ou alors je créer un reservoir vide et je l'assigne a la place de l'autre , me souviens plus)

Dan
Title: Re: [résolu] ClearPropellantResources/SetThrusterResource
Post by: no matter on 04 July 2008, 23:25:22
Oui, SetThrusterResource(thruster,NULL) çà marche aussi mais çà donne le même problème à la réassignation,
certains de mes thrsuters sont ignorés lorsque je le fais.

En mettant la masse à zéro, çà fonctionne au niveau de mes rcs.

Dans la fonction qui tue l'équipage (entre autre^^):
Code: [Select]
if (GetPropellantMass(hpr) > 0) savemass = GetPropellantMass(hpr);
....
SetPropellantMass(hpr,0);
Dans la fonction qui réactive le soyuz si personne n'était à bord pendant l'instant fatal, si il est docké :
Code: [Select]
//refill with saved mass value
SetPropellantMass(hpr,savemass);

Voilà, personne ne rentrera au bercail avec un équipage mort :blbl:



Message modifié ( 04-07-2008 23:25 )