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: [C++] Gros bug  (Read 15278 times)

0 Members and 1 Guest are viewing this topic.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #25 - 21 September 2007, 15:25:40
Et quand je fais un nettoyage des petites cases avant elles restent désespérément à 0 ! :wall:

   static int ResetOk=0;   
   if(ResetOk!=(int)this)
   {
      int I;
      for(I=0;I<3;I++)
         memset(&PanelDockStatus,0,sizeof(DOCKSTATUS));
      ResetOk=(int)this;
   }

   for (int merde=0;merde>=2;merde++)
   {
   PanelDockStatus[merde].iOuterDoor=CLOSED;
   PanelDockStatus[merde].iChamber=CLOSED;
   PanelDockStatus[merde].iInnerDoor=CLOSED;
   PanelDockStatus[merde].bFlagPourFaireChuterLaPression=FALSE;
   PanelDockStatus[merde].bFlagPourFaireMonterLaPression=FALSE;
   PanelDockStatus[merde].dPressure=100.00f;
   }



Message modifié ( 21-09-2007 15:26 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #26 - 21 September 2007, 19:28:07
merde<3
c'est mieux que
merde>=2
:pfff:


Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #27 - 21 September 2007, 19:40:15
Quote
picto a écrit:
merde&lt3
c'est mieux que
merde&gt=2
:pfff:


:lol: Pic prends des vacances :ptdr:



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #28 - 21 September 2007, 20:38:56

Au lieu de te marrer, tu aurais mieux fait de lire mon post et de voir la boulette :sad:


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #29 - 21 September 2007, 22:16:08
J'ai lu en diagonale mais pour forcer un type ca c'est pas bon:

int(MaVariable+DeuxVariable)

Ca c'est bon
(int)(MaVariable+DeuxVariable)

ou ca si une:

(int)MaVariable

Essaie comme ca:

sprintf(oapiDebugString(),"PRESSION %i",(int)PanelDockStatus[1].dPressure);


Ensuite si tu veux pas avoir du gros caca je te suggere:

Code: [Select]
int I;
for (I=0;I<(FIN_DOCK_PANELSTATUS-1);I++)
{
    PanelDockStatus[I].iOuterDoor=CLOSED;
    PanelDockStatus[I].iChamber=CLOSED;
    PanelDockStatus[I].iInnerDoor=CLOSED;
    PanelDockStatus[I].bFlagPourFaireChuterLaPression=FALSE;
    PanelDockStatus[I].bFlagPourFaireMonterLaPression=FALSE;
    PanelDockStatus[I].dPressure=100.00f;
}

La l'init est auto en fonction de la dimension de ton tableau (FIN_DOCK_PANELSTATUS)

Ca marchait en fait après ton <3 ?

Dan



Message modifié ( 21-09-2007 22:30 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #30 - 21 September 2007, 22:46:14
Oui, c'est reparti ;)

Pour le coup du int(mavariable+madeuxièmevariable)
T'as vraiment lu en diagonale :siffle:
C'est un point là et non pas un + ....
int(PanelDockStatus[1].dPressure)

Juste ce :fuc: détail qui foutait sa zone.
Dingue que sur un truc quand même plus compliqué que je cale deux jours sur une connerie de signe inversé.
Mais je suis effaré par le temps qui file ... :sick:

Normalement, MMu nouvelle version cette nuit ou demain ...



Message modifié ( 21-09-2007 22:53 )

Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #31 - 21 September 2007, 23:32:51
Quote
picto a écrit:

Au lieu de te marrer, tu aurais mieux fait de lire mon post et de voir la boulette :sad:


Si je le pouvais Pic, si je le pouvais    :sad:

Je comprend ta frustration, mais reste cool Pic ;)



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #32 - 22 September 2007, 00:01:41

Je sais ... deux jours que je suis dessus et je n'ai rien vu avant.
Alors .... je sais que c'est pas facile à voir en survolant un post sur le forum.
Mais, pas d'inquiétude, ca me fait du bien aussi une rigolade de temps en temps ... ;)

Bon, par contre, bonne nouvelle, MMU nouvelle mouture quasiment prête.


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #33 - 22 September 2007, 00:09:24
Quote
picto a écrit:
T'as vraiment lu en diagonale :siffle:
C'est un point là et non pas un + ....
int(PanelDockStatus[1].dPressure)

Nan j'ai bien lu dans ce cas c'était juste pour te préciser encore que :

1-dans le cas ou ta parenthese inclue deux ou plusieurs variables et que tu veux que le resultat soit "int" il faut pas
faire int(a+b) mais (int)(a+b)
2-si une seule variable juste (int)a

Ct pour éviter une confusion, j'imaginais que tu avais vu sur l'exemple que je montrais qu'il fallait une parenthese
autour des variables mais elle était juste la pour entourer une opération...

Capisce ?

Reste cool pic ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #34 - 22 September 2007, 00:15:43
Désolé les gars ... :sad:
Je ne vois plus rien ... :sad:
J'ai même pas fait gaffe aux parenthèses autour du int ... (int) ... :sick:
Je vais retrouver ma bonne humeur :)



Message modifié ( 22-09-2007 00:16 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #35 - 22 September 2007, 01:19:51
Je poste ce gros machin  temporairement juste pour montrer dans quelle  gymnastique je me débat.
Je ne demande pas à ce que ce code soit lu, mais j'aimerais un conseil ...
Soit je manque de concentration, soit je suis fatigué, mais je décroche complètement dans ces séries interminables
de else et autres else if ...

Ze question .... y a t'il une autre méthode envisageable sachant que les trois boutons concernés possèdent chacun
une structure identique ?

Je pensais qu'on pouvait comparer les choses entre elles plus facilement en C++ ...
En fait, je crois que je m'y suis pris comme un manche pour faire passer les résultats du mouse event dans les variables de chaque dock.


Le principe , quatre boutons, un selecteur et trois interrupteurs  dans le mouse event qui gèrent trois docks avec chacun une porte intérieure, une porte extérieure et un sas ...
J'ai donc créé une structure par dock qui contient des états pour les boutons, pour la possibilité ou non d'EVA, pour la pression dans le sas etc .. etc ...

Puis j'essaye de tout gérer dans le mouse event ... c'est peut être ça qui rend les choses si indigestes.
Je ferais peut être mieux de faire des trucs dans le post step aussi ... Mais en fait, ce que je ne sais pas faire, c'est tout ramener à des cases simples comme par exemple pour le returned code de UMMU pour l'EVA

Pour compliquer un peu plus, il y a un des docks qui peut fonctionner avec les deux portes ouvertes, ce qui ajoute encore des if et des else if..

[EDIT]Viré le code



Message modifié ( 22-09-2007 03:15 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #36 - 22 September 2007, 02:09:16
J'ai voulu améliorer l'affichage en mettant des code au lieu de cpp et j'ai tout ****é :sad:
pour donner une réponse il faut que je comprenne le code... tu peut remettre des [code ] ?
ca marche pas quand j'édite ton post. Et aussi m'expliquer un peu le principe.

Dan



Message modifié ( 22-09-2007 02:09 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #37 - 22 September 2007, 02:40:14
Par exemple
if (DockingStatus(2)!=0)
créé un nouveau cas pour le dock qui peut recevoir un vaisseau ...
etc ... etc ...

C'est pour ça que je me dis qu'il y a surement moyen de simplifier l'écriture  en remplissant les tableaux dans
le mouse event puis en les comparant ensuite pour dire  "redessine tel bouton" "joue tel son" "autorise l'EVA" etc
etc ...
se retrouver avec des "case" simples comme pour MMU quand on essaye d'EVAer.

#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

mais je ne sais pas comment tambouiller les structures entre elles.

Quelque chose comme ça j'imagine ...

MaisonBernard.Salon.Frigo=TRUE;  // bernard a un frigo dans son Salon (variable bool 1 ou 0)
MaisonMarie.Cuisine.Frigo=TRUE;   // Marie elle est normale, elle à son frigo dans sa cuisine
MaisonMarie.Chambre.Armoire=153;

Mais alors, ces écritures avec plusieurs points m'échappent encore complètement ... :sick:



Message modifié ( 22-09-2007 02:44 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #38 - 22 September 2007, 02:58:01
A vouais.... au lieu d'un nom fixe de structure qui t'oblige a repeter trois fois les if() ??
pas sur de piger a 100% ... désolé en fait je vois pas ton prob (chui dans le Ceres a fond la
et 50 lignes comme ca avec des tableaux et tout c'est vraiment indigeste 'ffectivement)...

comme tout est accessible par tableaux il suffit de changer les no... ?

Avec des images peut-êtres ?

En fait t'a qu'un panel qui controle les trois dock c'est ca ?

mhhhh....

Te faut peut etre plusieurs fonctions:

Une qui remet les boutons dans le bon etat en fonction des info du dock selectionné...
Une qui actionne le bon dock en fonction des boutons...

On doit pouvoir simplifier mais comme je vois pas le truc... :sick:

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #39 - 22 September 2007, 03:13:22
Non, les if sont déjà divisés par trois ;)
Mais malgré tout il en reste un paquet :sick:
Bah ... laisse tomber ...
Je vais m'en sortir ...
Ce que j'entrevoyais était un truc plus imbriqué en bas niveau.
Mais je ne suis pas encore sûr d'avoir tout compris.

 typedef struct{
      int Armoire;
      int Table;
      int Lit;
bool Frigo;
}PIECEMAISON;

 Ensuite on fait le plan de la maison typique en y declarant nos structures
 des pieces (imbrication de structure):

 typedef struct{
      PIECEMAISON Cuisine;
      PIECEMAISON Chambre;
      PIECEMAISON Salon;
      int AutreVariables;
}MAISON;

MaisonBernard.Salon.Frigo=TRUE;
MaisonMarie.Cuisine.Frigo=TRUE;

Je me disais que si j'avais une variable de ce genre
Que je puisse tester comme ça ...

if(Dockstatus[ActiveDock].OuterDoor.InnerDoor == TRUE)

Ce serait peut être plus lisible que
si OuterDoor[ActiveDock] == TRUE;
et InnerDoor[ActiveDock] ==true
alors dockstatus[ActiveDock]=true
mais si OuterDoor[ActiveDock] == TRUE;
mais que InnerDoor [ActiveDock]== false
et que la pression n'est pas égale à zéro
alors dockstatus[ActiveDock] = false.

Mais je ne sais pas encore faire ça ;)



Message modifié ( 22-09-2007 03:31 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #40 - 22 September 2007, 03:48:47
je reflechi mais je vois toujours pas désolé...

on peut simplifier des cas qui ce repetent mais pour différent objets...
typique les trois sas on le meme comportement mais ca c'est deja simplifié
vu que tu tape dans les sas par tableau:  monsas[No].Porte

Mais les sas tu sera bien obligé de tester tout les cas vu qu'aucun cas n'est pareil.. ?

Des fois je me fait des petit tableaux pour recapituler tout les cas ca aide a "visualiser" le prob...
Le sas peut avoir pleins d'etat... le premier chiffre c'est porte externe (0 ouverte, 1 fermée)
le deuxieme chiffre c'est la presurisation (0 pas de pressu) et le troisieme la porte interne tu peux
avoir:

111  (tout fermé pressurisé)
000  (tout ouvert non pressurisé (tout le monde est mort)
001  (porte interne fermée externe ouverte pas de pression)
100 (porte externe fermée  pas pression porte interne ouverte)
110 (porte externe fermée  pressurisé
101 (toute porte fermée sas non pressurisé)

enfin tu vois le truc quoi...

Ca m'intrigue ton raisonnement... ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #41 - 22 September 2007, 04:01:29
Ben, je sais pas quoi ajouter d'autre :)
Cette écriture avec deux points c'est possible ou pas ?

if(Dockstatus[ActiveDock].OuterDoor.InnerDoor == TRUE)


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #42 - 22 September 2007, 04:23:17
Quote
picto a écrit:
Ben, je sais pas quoi ajouter d'autre :)
Cette écriture avec deux points c'est possible ou pas ?
if(Dockstatus[ActiveDock].OuterDoor.InnerDoor == TRUE)

Ben ...ouais pour l'ecriture mais la logique je vois
pas. innerdoor est pas contenue dans la outerdoor
que je sache ?

innerdoor et outerdoor font partie de "sas" mais innerdoor
fait pas partie de outerdoor...

si tu veux tester les deux on une fois tu peut toujours faire:

if((innerdoor+outerddor)==2)   (TRUE+TRUE=2)

Si c'est ca mais j'ai un doute sur ton intention avec ".OuterDoor.InnerDoor"


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #43 - 22 September 2007, 04:42:55

C'était pour l'exemple ... :)
Mais oui, je pensais à quelque chose comme ET mais à l'intérieur d'une seule variable.
Bon, je me rend compte que c'est pas vraiment ça l'écriture avec deux points ...


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #44 - 22 September 2007, 04:47:55
Faut bien voir les "." comme des boites...



struct ARMOIRE
{
  Tiroire;
  Etagere;
}

struct MAISON
{
    ARMOIRE Armoire;
}

MAISON Maison;

Maison.Armoire.Tiroire=2;
Maison.Armoire.Etager=1;

La boite maison contient une boite armoire qui contient des trucs...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #45 - 22 September 2007, 04:57:50

Oui ... je vois bien le truc ...

Donc dans ce cas tu as raison un seul niveau suffit.

Dock[ActiveDock].OuterDoor=True ou False
Dock[ActiveDock].InnerDoor=True ou False

Par contre juste un truc d'organisation et de clarté.

Dans un cas comme le mien, ferais tu tous les tests dans le Mouse Event
ou ferais tu les comparaisons pour décider si le Dock est ouvert et l'EVA possible dans post step
en fonction du remplissage des tableaux dans le mouse event.

Je crois que c'est ce qui rend le truc plus illisible parce que j'essaye de TOUT faire dans le mouse event.


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #46 - 22 September 2007, 05:40:51
post step = test pendant des millions d'images ou ce n'est pas necessaire.

mouse event oui mais peut etre via une "usine", une fonction qui te retourne
"oui on peut faire une eva" ou non... juste pour garder les choses claires
dans mouse event.

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #47 - 22 September 2007, 05:46:02

Ouais mais certains trucs comme dockingstatus(0) ...

Qu'est ce qui se passe si un vaisseau se dédocke sans prévenir hein ? :badsmile:
Soit j'automatise la fermeture et les dégâts sont minimes soit quoi ?

Tout le monde est cadavéré ? :)


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #48 - 22 September 2007, 06:08:13
Quote
picto a écrit:
Qu'est ce qui se passe si un vaisseau se dédocke sans prévenir hein ? :badsmile:

clbkDockEvent ou dois-je en dire plus ? :badsmile:

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #49 - 22 September 2007, 13:12:14

Callquoi ? :badsmile:


Pic