See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: [résolu] ClearPropellantResources/SetThrusterResource  (Read 912 times)

0 Members and 1 Guest are viewing this topic.

Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
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]
           th_att_rot[0] = th_att_lin[0] = CreateThruster (_V(0,0, 8), _V(0, 1,0), MAXRCSTH, hpr, ISP);
            th_att_rot[1] = th_att_lin[3] = CreateThruster (_V(0,0,-8), _V(0,-1,0), MAXRCSTH, hpr, ISP);
th_att_rot[2] = 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);

th_att_rot[0] = th_att_lin[0] = CreateThruster (_V(0,0, 6), _V(-1,0,0), MAXRCSTH, hpr, ISP);
th_att_rot[1] = th_att_lin[3] = CreateThruster (_V(0,0,-6), _V( 1,0,0), MAXRCSTH, hpr, ISP);
th_att_rot[2] = 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 )

------------

no matter.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15199
  • Karma: 210
  • Hein, quoi !?
    • FsPassengers
Reply #1 - 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


Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #2 - 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 )

« Last Edit: 04 July 2008, 23:25:22 by no matter »
------------

no matter.