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 28282 times)

0 Members and 2 Guests are viewing this topic.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #25 - 11 September 2007, 01:51:22
Quote
picto a écrit:
Quote
Merci pour la réponse Dan
Et moi, j'ai pas l'droit à un merci :sad:
PPPfffff .....

T'en veux toujours plus grand fou.. :badsmile:

Tient siriusfett , fait ton choix pour picto:
http://smileys.sur-la-toile.com/categorie6-Amour.html

Dan


Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #26 - 11 September 2007, 02:29:41
Je suis ton plus grand fan Pic ;)





Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #27 - 11 September 2007, 02:33:38
Je rappelle qu'il y a des mineurs sur ce forum, allez faire vos cochonneries ailleurs :doubt:

Flatche <- douche froide :badsmile:

Dan



Message modifié ( 11-09-2007 02:34 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #28 - 11 September 2007, 02:40:13
Oh oui !!! :) C'est bon !!!

Brrrr .... 'tain de douche froide ...
Bon, ben redevenons sérieux puisque le patron l'exige ... :badsmile:

Ok pour les warnings, mais dans certains cas ...
Par exemple, sur une fonction de dessin avec GDI ...
J'écris ça ...

Data.dThrustMainOne=GetThrusterLevel (th_main[0]);
LineTo (hDC, 3+x, 98-Data.dThrustMainOne*73);
Sachant que GetThrusterLevel est forcément une double ...

Ca fonctionne mais j'ai évidamment un warning !
conversion de 'double' en 'int', perte possible de données
Evidamment que je veux un int à la fin ...
J'vois mal l'ordi dessinner sur 0.2 pixel ...

Et ou que je fasse la conversion, j'aurais un warning !



Message modifié ( 11-09-2007 03:06 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #29 - 11 September 2007, 02:58:11
Quote
picto a écrit:
Data.dThrustMainOne=GetThrusterLevel (th_main[0]);
LineTo (hDC, 3+x, 98-Data.dThrustMainOne*73);
Sachant que GetThrusterLevel est forcément une double ...

Ca fonctionne mais j'ai évidamment un warning !
conversion de 'double' en 'int', perte possible de données
Evidamment que je veux un int à la fin ...
J'vois mal l'ordi dessinner sur 0.2 pixel ...

Dans ce cas tu force le type implicitement, le compilo admettra que tu est grand et sais ce que tu fait...

LineTo veux un int comme parametre, t'a qu'a faire comme ca, tu rajoute (int) devant le *résultat* du calcul.

Code: [Select]
LineTo (hDC, 3+x, (int)(98-Data.dThrustMainOne*73));
Le résultat de la parenthese sera forcé au type int (tu perd les fractions si il y en a)
Faut quand meme ce gaffer juste ou tu le met ici ca fera pas la meme chose du tout:

Code: [Select]
LineTo (hDC, 3+x, 98-(int)Data.dThrustMainOne*73);Le compilo gueule plus non plus mais si Data.dThrustMainOne=1.8 par exemple:

premier cas:  98-1.8*73=33  (33.4 converti en int, résultat probablement juste)
deuxieme cas: 98-2*73=48  (le 1.8 a été converti en int avant le calcul, plus du tout ce qu'on voulais)


Ca marche avec tout:

Code: [Select]
GetMyFloat((float)iMonInt);
Dan



Message modifié ( 11-09-2007 03:05 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #30 - 11 September 2007, 03:16:54



Pic

Offline Pagir

  • Legend
  • ******
  • Posts: 4522
  • Karma: 1
Reply #31 - 11 September 2007, 05:33:58
Hé!


C'est cool, c'te banque de Smiley à insertion automatique!!!

Pagir


Pagir

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #32 - 12 September 2007, 00:20:07
Bon je suis sur la bonne voie, j'ai défini deux poches d'air et je peux transférai mes mmu d'un DGIV à Ceres, par contre je
n'arrive pas à changer le dock actif, j'ai défini les touches 4 et 5 (elles fonctionnent) mais il ne me donne que le dock
zéro comme actif :wonder:

Question subsidiaire : comment je peux faire retourné mes mmu's dans leur Dg sans le dé docker ?



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #33 - 12 September 2007, 04:41:13
Quote
siriusfett a écrit:
Bon je suis sur la bonne voie, j'ai défini deux poches d'air et je peux transférai mes mmu d'un DGIV à Ceres, par
contre je
n'arrive pas à changer le dock actif, j'ai défini les touches 4 et 5 (elles fonctionnent) mais il ne me donne que le dock
zéro comme actif :wonder:

Question subsidiaire : comment je peux faire retourné mes mmu's dans leur Dg sans le dé docker ?


Sans voir le code impossible à dire, pour la deuxieme question simplement si tu fait une eva sur le dock actif le MMU
sera transferé si le dock est occupé par un vaisseau "UMMU"

Dan


Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #34 - 12 September 2007, 12:39:31
J'ai trouvé pour les touches, c'est de ma faute :badsmile:   

if(iActiveDockNumber>2)

au lieu de :

if(iActiveDockNumber<2)

Par contre, quand je navigue avec les touches il me trouve trois docks actifs, je penser qu'il prenez en compte la poche
d'air que j'avais définie par défaut dans mon premier code mais non si je choisie le dock actif 1 ou 2 je fais mon EVA au
même endroit !!! :wonder:

Par contre si je transfert un mmu d'un DGIV à Ceres pas de problème après je le sélectionne dans Ceres et la je le re
transfert sur le dock occupé par le DG il se retrouve à côté, la ou j'ai définie la position dans mon code pour l'EVA.

Je continue mon investigation  ;)



Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #35 - 12 September 2007, 13:57:40
Quote
Par contre, quand je navigue avec les touches il me trouve trois docks actifs, je penser qu'il prenez en compte
la poche d'air que j'avais définie par défaut dans mon premier code mais non si je choisie le dock actif 1 ou 2 je fais
mon EVA au même endroit !!

Les EVA sont directement définies par la position où elle vont se produire, il suffit qu'un port soit actif avec son airlock ouvert. Par erreur, deux ports peuvent se retrouver avec un EVA qui sort au même endroit.

Normalement, tous tes Crew.DefineAirLockShape(...) et Crew.SetMembersPosRotOnEVA(...) doivent se
retrouver dans la nouvelle fonction SetUMMUAirlockPos avec un CASE pour chacun.

Aucun ne doit subsister dans clbkSetClassCaps, en revanche n'oublie pas iActiveDockNumber=0; qui doit s'y
trouver pour définir le port par défaut (çà renvoit au CASE 0 défini dans la nouvelle fonction).

Fais F4 ->"Object info", pour voir tous les ports de ton vaisseau courant. Tu verras vite si tu en as effectivement trois
de définis.
Vérifie aussi que tu n'as pas oublié la ligne Crew.SetActiveDockForTransfer(iActiveDockNumber);

En tout cas, sans voir le code, c'est un peu compliqué de trouver ce qui ne va pas.



Message modifié ( 12-09-2007 14:05 )

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

no matter.

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #36 - 12 September 2007, 16:53:39
J'y et pensé à clbkSetClassCaps mais je n'ai pas tous désactivé, je vais continué à faire des essais, merci pour l'astuce F4
je n'y pense jamais.



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #37 - 13 September 2007, 16:25:34
Y'a t'il moyen de "forcer" le slot attribué à un astro ?
Je pensais naïvement que l'ordre de déclaration des AddCrewMember allait
créer les astro dans des slots incrémentés dans le même ordre que la déclaration.
Mais visiblement, c'est plus compliqué que ça ...


Dans l'ordre...

   Crew.AddCrewMember("Andy Penck",41,70,72,"Sci" );
   Crew.AddCrewMember("Anna Blume",27,70,58,"Ast" );

      srf[5] = oapiCreateSurface (LOADBMP (IDB_TETE01));
      srf[6] = oapiCreateSurface (LOADBMP (IDB_TETE02));

IDB_TETE01          BITMAP        ".\\Tetes\\AndyPenck.bmp"
IDB_TETE02          BITMAP        ".\\Tetes\\AnnaBlume.bmp"

Et pourtant, quand je fais ça ...

char *Name=Crew.GetCrewNameBySlotNumber(SelectedUmmuMember);
sprintf (cbuf, "Astro %i \"%s\" ",SelectedUmmuMember,Name);
oapiBlt (surf, srf[5+SelectedUmmuMember], 0, 20, 0, 0, 100, 100);

Le nom affiché ne correspond pas du tout à la bitmap concernée :sad:
J'obtiens

Astro 0 "Richard Long" avec  AndyPenck.bmp
Astro 1 "Eric Wall" avec AnnaBlume.bmp

Par contre, ce qui est bizarre c'est que le slot correspond
bien à la bitmap que je voulais mais pas le nom de l'astro.... 8o

Il y aurait bien une méthode plus fiable qui serait de comparer les chaines de caractères obtenues
par GetCrewNameBySlotNumber(int Slot) avec le titre de la bitmap que j'ai pris soin de nommer de
la même façon que l'astro .... mais je ne sais pas faire ça .... :sad:



Message modifié ( 13-09-2007 16:38 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #38 - 13 September 2007, 19:13:09
Non les slots bougent...

1 patrick
2 albert
3 sonia

suprime albert ca donne:

1 patrick
2 sonia
3 autretype


Donc seul moyen, comparaison avec par exemple un tableau qui contient
les noms et tu compare avec le nom du crew à afficher.

Comme les equipages sont censé bougé attribuer un "slot" a un nom aurait été idiot.

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #39 - 13 September 2007, 20:03:24
Je ne sais pas comment "comparer" des chaines de caractères :sick:
Euuuuhhh .... en fait , c'est pas très compliqué .... :sick:



Message modifié ( 13-09-2007 20:12 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #40 - 13 September 2007, 20:17:06
strcmp (si tu pensais à autre chose ;) )

pour le tableau de chaine regarde le header de Ummu.
Je crois qu'il y a d'ailleurs le genre que tu veux dans l'exemple shuttlepb
a la fin: un tableau de chaine comparé au misc ID qui decide quel
spacesuit avoir.

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #41 - 13 September 2007, 20:49:05

Ca y est, c'est fini ... avec strcmp ... c'est nickel ...
C'est bien Missiou d'avoir pensé à faire des GetByName ... :wor:

Puis je suggérer deux trucs à ajouter plus tard à la structure des MMUs ...
Le genre  ... utile pour faire une photo d'identité au hasard aux invités à bord.
Et la taille ... pour que j'ai pas à redessiner un bouton sur Tochope :badsmile:


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #42 - 13 September 2007, 21:07:33
Quote
picto a écrit:
Puis je suggérer deux trucs à ajouter plus tard à la structure des MMUs ...
Le genre  ... utile pour faire une photo d'identité au hasard aux invités à bord.
Et la taille ... pour que j'ai pas à redessiner un bouton sur Tochope :badsmile:

A ma connaissance il n'y a aucun addon qui integre UMMU via un panel
(à part le tiens à venir)

En plus la carte d'identité c'est une spécificité sympa mais qui a trop de
défauts pour être généralisée. Dès qu'un nom est différent il n'y a plus
de carte ce qui rend les échanges entre addons ou les changements
de noms moins souple.

Et attendre que les gens fournissent des cartes en jpg à mon avis...

En bref c'est souple pour peu de boulot (UMMu epargne entre un et deux mois de boulot
à un programmeur confirmé), ceux qui ont envie peuvent à peu de frais (normalement, strcmp
c'est du basique) ce faire une chouette interface. Pour les autres l'interface doit rester simple.
(un progeux confirmé doit pouvoir ajouter UMMU en 20mn et 3-6h avec des features genre
carte d'id)

C'est toujours une balance, plus on complique l'interface en lui donnant des possibilités
plus il y a de risque que les gens ne l'utilisent pas car trop "touffue", la compliquer
pour des truc hyper specifique n'est pas une bonne idée.

Quel loghorrée ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #43 - 13 September 2007, 21:21:35

Oui, je n'avais pas vu les choses sous cet angle ... la simplicité ...

Il est vrai qu'en bossant un peu je parviens à ajouter des trucs sympas à l'interface.
Pas aussi vite que les progueux pros par contre ... :sad:
Pour les invités, il y aura un "sorry no photo available for
this member" sur le display pour la première version ...

Mais en tout cas, MMU et OrbiterSound sont deux super programmes
pour faire pas mal de wow effet à peu de frais de prog ...


Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #44 - 14 September 2007, 00:04:13
J'ai trouvé pour mon problème de sélection de dock actif, la solution se trouvé dans clbkConsumeBufferedKey :pfff:

J'ai une question  pour le moment :)

Quand je veux transférer un mmu d'un DGIV dans ma station, je dois d'abord faire une EVA de ma station vers le dock ou se trouve mon DG pour pouvoir ensuite faire mon transfert ?? Je pense que c'est une histoire de dock actif, pourtant si je
sélectionne le dock actif à partir de ma station je devrais pouvoir faire ensuite mon transfert à partir du DG :wonder:

Je repart dans mes investigations.  ;)



Message modifié ( 14-09-2007 00:08 )


Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #45 - 14 September 2007, 05:03:26
Quote
Quand je veux transférer un mmu d'un DGIV dans ma station, je dois d'abord faire une EVA de ma station vers
le dock ou se trouve mon DG pour pouvoir ensuite faire mon transfert ?? Je pense que c'est une histoire de dock actif,
pourtant si je sélectionne le dock actif à partir de ma station je devrais pouvoir faire ensuite mon transfert à partir du
DG.

Non, t'es sûr qu'il y a quelqu'un dans ton DGIV?
Normalement, çà devrait transférer, tu n'as même pas besoin d'aller activer le port de ta station (par contre pour
revenir dans le DGIV, il faudra).
:trucdeouf:


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

no matter.

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #46 - 14 September 2007, 11:20:01
Il y a bien du monde, :) je pense que le problème vient peut être de mon initialisation, car sur le doc 0 ça fonctionne
nickel, de toute façon pour le moment je n'ai pas défini toutes mes poches d'air.
Dans le genre bordélique, mon code se pose là    :badsmile:



Message modifié ( 14-09-2007 11:45 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #47 - 15 September 2007, 17:26:22
En farfouillant dans MMU je vois tous ces case pour returned.

Code: [Select]
#define TRANSFER_TO_DOCKED_SHIP_OK 2
#define EVA_OK 1
#define ERROR_NO_ONE_ON_BOARD 0
#define ERROR_AIRLOCK_CLOSED -1
#define ERROR_DOCKED_SHIP_HAVE_AIRLOCK_CLOSED                  -2
#define ERROR_DOCKED_SHIP_IS_FULL -3
#define ERROR_CREW_MEMBER_NOT_FOUND -4  
#define ERROR_DOCKEDSHIP_DONOT_USE_UMMU -5
#define ERROR_MISC_ERROR_EVAFAILED -6

Quelle tambouille fais tu pour returned ?
J'aimerais ajouter des case à l'interface ...
Et, si c'est possible juste en modifiant un peu la fonction qui gère ces
define, ce serait plus clean que par des séries interminables de if ...else
et autres else if



Message modifié ( 15-09-2007 17:28 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #48 - 15 September 2007, 18:02:22
si tu me dis pourquoi tu veux faire ca je pourrais etre plus precis dans ma réponse...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #49 - 15 September 2007, 18:12:41
Code: [Select]
#define ERROR_NO_CREW_SELECTED -7
#define ERROR_CREW_PULSE_TOO_HIGH                                -8
#define ERROR_CREW_IS_EATING                                     -9

Etc ... Etc ...
Pour rendre l'équipage actif ...
Mais je ne parle pas de modifier MMU, juste de savoir si je peux développer
l'interface plus tard une fois que les MMUs sont dans Boulinium ...

Tu me diras que je pourrais me faire une petite fonction interne avec ma propre
tambouille par slot number ou par name et faire des case tout simples ou l'eva est
ou n'est pas possible.

Mais bon, vu qu'une fonction existe déjà, je me disais que peut être il était très simple de rajouter ces case ...



Message modifié ( 15-09-2007 19:46 )

Pic