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: [tuto] programmer UMMU avec plusieurs docks  (Read 26617 times)

0 Members and 1 Guest are viewing this topic.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
10 September 2007, 13:59:57

Cliquez le lien ci-dessous pour retourner au sommaire des "tutorials pour créer une DLL Orbiter"
http://orbiter.dansteph.com/forum/index.php?topic=6335.msg95352#msg95352


La SDK d'UMMU est disponible avec l'addon UMMU, une fois installé regarder dans le repertoire "doc" d'orbiter un exemple fonctionnel du SHuttlePB avec commentaires est fourni: http://orbiter.dansteph.com/index.php?disp=d

Cet exemple ne montre toutefois pas comment utiliser UMMU quand vous avez plusieurs dock, ce post est la pour combler cette lacune.


Pour utiliser UMMU dans votre addon avec plusieurs docks c'est facile, il faut juste permettre à l'utilisateur de définir le
dock actif pour UMMU et redéfinir à ce moment la position/detection de l'EVA pour qu'elle soit devant le dock. Accessoirement on peut *si c'est une station* redefinir aussi la position de la camera pour qu'elle montre l'exterieur du dock, voir comment ca marche sur l'ISS compatible UMMU disponible ici:
http://orbiter.dansteph.com/index.php?disp=dgIVMore&DId=31


Fonction UMMU requise

SetActiveDockForTransfer()
DefineAirLockShape()

Optionnel pour caméras:

SetCameraOffset();
SetCameraDefaultDirection();


Comment faire

Premierement déclarer une variable de votre classe qui contiendra le no de dock actif, donc dans le header de votre
projet:

Code: [Select]
int iActiveDockNumber;
Deuxiemement creer une nouvelle fonction dans votre projet qui sera responsable de redefinir la position d'un UMMU
en fonction du numéro de dock actif, accessoirement c'est le bon endroit pour redefinir une caméra.

Code: [Select]
///////////////////////////////////////////////////////////////////////////////////////////
// SetUMMUAirlockPos - example with two dock
///////////////////////////////////////////////////////////////////////////////////////////

void MyAddon::SetUMMUAirlockPos(void)
{

int AirlockStatus=Crew.GetAirlockDoorState();
Crew.SetActiveDockForTransfer(iActiveDockNumber);

switch(iActiveDockNumber)
{
case 0:

Crew.DefineAirLockShape(AirlockStatus,-1,1,-6.8,-4.8,15,20);
Crew.SetMembersPosRotOnEVA(_V(0,-5.8,16.0),_V(0,0,0));
//definissez ici la position de la camera pour ce dock
break;
case 1:
Crew.DefineAirLockShape(AirlockStatus,-1,1,-22.9,-17.9,-5,-2);
Crew.SetMembersPosRotOnEVA(_V(0,-18.9,-3.8 ),_V(-1.6,0,0));
//definissez ici la position de la camera pour ce dock
break;
}
}


Dans clbkConsumeBufferedKey ou dans votre panel definissez les deux touches (ou les boutons) qui
permettrons à l'utilisateur de changer le dock actif:

Code: [Select]
// change active dock
if(key==OAPI_KEY_SUBTRACT)
{
if(iActiveDockNumber>0)
iActiveDockNumber--;
sprintf(SendFocusScreenMessage(),"Active dock number changed to: %i",iActiveDockNumber);
SetUMMUAirlockPos();
return 1;
}
//---------------------------------------------------------------------------
// change active dock
if(key==OAPI_KEY_ADD)
{
if(iActiveDockNumber<2)
iActiveDockNumber++;
sprintf(SendFocusScreenMessage(),"Active dock number changed to: %i",iActiveDockNumber);
SetUMMUAirlockPos();
return 1;
}


N'oubliez pas dans clbkSetClassCap d'initialiser votre variable dock actif et d'appeller la fonction pour que
UMMU sache ou sortir au lancement de votre addon:

Code: [Select]
iActiveDockNumber=0;
SetUMMUAirlockPos();


Voila, bon UMMUing !

Dan



Message modifié ( 18-09-2007 04:09 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #1 - 10 September 2007, 15:23:11
Holly cow ! Zats pretty cool !!! :)


Pic

Offline yoann

  • Legend
  • ******
  • Posts: 1914
  • Country: France fr
  • Karma: 9
Reply #2 - 10 September 2007, 15:37:05
j'ai vu sur la partie anglophone t'a fait un sujet épinglé, avec la liste des addon compatible UMMU, pourquoi pas faire
ca ici ? ou a la fin de ton tuto peut etre ?


__________________________________
    Luke, je suis ton pere            kchuuu  pchiiiii

Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #3 - 10 September 2007, 15:41:27
Çà me rappelle qu'il faut que je fasse çà sur l'ATV2!!

Quote
Holly cow ! Zats pretty cool !!!
Jeez, it rocks!!!



Message modifié ( 10-09-2007 15:42 )

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

no matter.

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #4 - 10 September 2007, 16:04:52
Bon, va falloir que je fasse une mise à jour pour Ceres :)

Si je comprend bien, pour chaque docks (dans mon cas douze) il faut définir une "poche d'air", je voulais dire "Airlock" bien
sur 8)



Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #5 - 10 September 2007, 20:31:19
Salut c'est la quiche :badsmile:  (copyright Siriusfett)

Avec l'aide de mon ami momo il ne me reste que trois erreurs:

error C2065: 'gt0' : identificateur non déclaré
error C2065: 'lt2' : identificateur non déclaré

error C2660: 'MonAddon::SetCameraOffset' : la fonction ne prend pas 1 arguments

La dernière erreur me renvoie sur SetCameraOffset (_V(0,0,10)); dans classecap :wonder:



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #6 - 10 September 2007, 20:49:22
Quote
siriusfett a écrit:
error C2065: 'gt0' : identificateur non déclaré
error C2065: 'lt2' : identificateur non déclaré

Ce serais pas un code html du forum ca ? :doubt:
Genre ca:
if(iActiveDockNumber>0)

qui après copié collé devient ca:

if(iActiveDockNumber& gt0)

Bizarre si je copie/colle dans mon projet ca me mets bien le code juste avec > et <

Quote
error C2660: 'MonAddon::SetCameraOffset' : la fonction ne prend pas 1 arguments
SetCameraOffset (_V(0,0,10));

Ca c'est juste normalement... z'auriez pas tripoté genre declarer cette fonction dans le header ? (alors que c'est une
fonction d'Orbiter)

Si vous z'ête bloqué envoyez moi les sources completes que je'investigue...

Dan



Message modifié ( 10-09-2007 21:02 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #7 - 10 September 2007, 21:59:44

Chez moi aussi ... Nickel le copié collé .... mais directement sur la page affichée.
Si tu fais le copier coller à partir de citer le message tu te retrouves avec les gt0 et compagnie.


Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #8 - 11 September 2007, 00:13:26
effectivement, ça fonctionne mieux :)

J'ai virais void SetCameraOffset(void); dans mon header :top:

Il me reste 4 warning, mais ça compile...

 warning C4305: 'argument' : troncation de 'double' à 'float'
il me renvois sur cette ligne:

Crew.DefineAirLockShape(AirlockStatus,-1,1,-6.8,-4.8,15,20);

Je vais lui en foute moi de la troncation :badsmile:   

Me reste plus qu'a définir douze poches d'air :ptdr:



Message modifié ( 11-09-2007 00:18 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #9 - 11 September 2007, 01:05:32
Tu ne veux plus de warnings ?  :badsmile:
Utilise cette fonction ... ça te convertit une float en int ...



Code: [Select]
int ftoi(float flt)
{
    int i;
    _asm
    {
        mov  eax,flt; //charge la mémoire à laquelle tu veux acceder
        rcl  eax,1;   //shift vers la gauche pour enlever le signe
        mov  ebx,eax; //sauve l'acces
        mov  edx,4278190080; //nettoie le registre edx
        and  eax,edx; //recharge l'exposant
        shr  eax,24;
        sub  eax,7fh; //enlève 7fh(127) pour avoir la puissance actuelle
        mov  edx,eax; //sauve la valeur de la puissance
        mov  eax,ebx; //recharge depuis ebx
        rcl  eax,8;     //équilibre les 8 derniers bits qui contiennent la puissance
        mov  ebx,eax; //stocke le résultat
        mov  ecx, 1fh; //soustrait 17 h
        sub  ecx,edx;
        mov  edx,00000000h;
        cmp  ecx,0;
        je   loop2;
        shr  eax,1;
        or   eax,80000000h;        
loop1:    
        shr  eax,1; //shift (total bits - power bits);
        sub  ecx,1;
        add  edx,1;
        cmp  ecx,0;
        ja   loop1;
loop2:  
        mov  i, eax;        
   
//check sign +/-        
sign:
        mov  eax,flt;
        and  eax,80000000h;
        cmp  eax,80000000h;
        je     putsign;
    }

    return i;

putsign:
    return -i;
}


Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #10 - 11 September 2007, 01:17:07
Tu ne m'aide pas beaucoup Pic :sad:, j'y pense tu ne travailler pas sur un spacecraft :wonder:

:lol:



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #11 - 11 September 2007, 01:23:59
Quote
siriusfett a écrit:
Crew.DefineAirLockShape(AirlockStatus,-1,1,-6.8,-4.8,15,20);

Je vais lui en foute moi de la troncation :badsmile:   

Il attend des float et tu lui passe des doubles il te previent que ca peut ne pas marcher...
La ca iras sans warning, tu lui passe des floats: (un chiffre après le point et un f à la fin)

Code: [Select]
Crew.DefineAirLockShape(AirlockStatus,-1.0f,1.0f,-6.8f,-4.8f,15.0f,20.0f);

Après on peut critiquer pourquoi on doit ce faire ch.. à mettre de la levure dans le
pains et pas du sable mais pour le faire il faudrais déjà avoir bien compris le métier
(et dans ce cas on ne dirait plus ca) ;)

(je te rassure ca m'arrive de pester aussi, c'est le metier qui rentre :badsmile: )


Quote
picto a écrit:
Tu ne veux plus de warnings ?  :badsmile:
Utilise cette fonction ... ça te convertit une float en int ...

Cool, comme ca tout le monde mesure un metre ou deux metre... pratique pour les cartes d'identité ;)

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #12 - 11 September 2007, 01:27:02
Quote
siriusfett a écrit:
Tu ne m'aide pas beaucoup Pic :sad:, j'y pense tu ne travailler pas sur un spacecraft :wonder:

Ouais mais il est sur un bug depuis trois semaine: il veut
absolument qu'il mesure 1.5 metres et il en fait deux :ptdr:

Nan je rig.. et les gars non à deux sur un c'est pas symp... pas sur la tête nooon aaaahhhh

Dan



Message modifié ( 11-09-2007 01:27 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #13 - 11 September 2007, 01:27:07
La fonction en asm, c'est une déconnade, pas la fonction, mais la réponse ....
Vi, j'ai un bidule à faire .... j'arrête pas .... mais faut bien se défouler un peu ... ;)

Regarde comment est écrite la fonction de Dan ... ( infobulle )
Te demande t'elle des floats ou des doubles ?
Qu'est ce que te demande  le compilateur ?
Regarde le type d'écriture que tu lui balance au moment de l'appel ...
Compare les écritures d'une double et d'une float ...
Fais ton choix camarade ...

Perso, je m'en bat les sb ... de ce genre de warnings ( dans ce genre de cas ) ;)
On te demande pas une précision au micropoil de c.. prêt pour tes poches d'air ....


Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #14 - 11 September 2007, 01:29:52

PPPffff .... je me casse pour faire une réponse intelligente et je me fais griller :sad:

Sur la tête !!!


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #15 - 11 September 2007, 01:30:08
Quote
picto a écrit:
Perso, je m'en bat les sb ... de ce genre de warnings ( dans ce genre de cas ) ;)
On te demande pas une précision au micropoil de c.. prêt pour tes poches d'air ....

Sans déconnade,outre le fait que tu peux manquer des warning plus sérieux
(a cause de ta liste qui s'allonge de plus en plus) ca peut  créer de vrais bug et
problèmes et c'est pas une question de précision.... vaudrait mieux regler tout
les warnings. (c'est simple en plus si on le fait tout de suite)

En plus c'est bô un truc qui compile sans aucun warning :love:

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #16 - 11 September 2007, 01:33:02
Quote
picto a écrit:
PPPffff .... je me casse pour faire une réponse intelligente et je me fais griller :sad:
Sur la tête !!!

Mheuu non allez viens la...



Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #17 - 11 September 2007, 01:35:11

T'as de beaux yeux tu sais !!!


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #18 - 11 September 2007, 01:36:48
Quote
picto a écrit:
T'as de beaux yeux tu sais !!!

Mais mon atout principal c'est quand même mon ventre plats et soyeux ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #19 - 11 September 2007, 01:37:58

Et ta bouche lippue !!!


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #20 - 11 September 2007, 01:38:54
Quote
picto a écrit:
Et ta bouche lippue !!!

Et mon pied charnu

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #21 - 11 September 2007, 01:41:08

Et ton air bourru !


Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #22 - 11 September 2007, 01:43:44
Quote
DanSteph a écrit:
Quote
siriusfett a écrit:
Tu ne m'aide pas beaucoup Pic :sad:, j'y pense tu ne travailler pas sur un spacecraft :wonder:

Ouais mais il est sur un bug depuis trois semaine: il veut
absolument qu'il mesure 1.5 metres et il en fait deux :ptdr:

Dan

:lol:

Pas facile ça :ptdr:

Merci pour la réponse Dan :wor: moi j'aime pas les warning :)



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #23 - 11 September 2007, 01:49:17

Quote
Merci pour la réponse Dan

Et moi, j'ai pas l'droit à un merci :sad:
PPPfffff .....


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #24 - 11 September 2007, 01:49:51
Quote
yoann a écrit:
j'ai vu sur la partie anglophone t'a fait un sujet épinglé, avec la liste des addon compatible UMMU, pourquoi pas faire
ca ici ? ou a la fin de ton tuto peut etre ?

Comme ca doit etre mis à jour régulièrement et que c'est ch... (donc j'aurais de la peine à le faire)
je prefère n'avoir qu'un fil à maintenir.  En plus c'est "in topic" dans "dan's addon" ici ce serait plutot
de la self promotion.

Dan