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++] Fonctions à N arguments  (Read 35594 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 - 14 August 2007, 05:33:11

Meuh, mais, ça ressemble étrangement à ce qui se passe dans une classe tout çà !
Pffff!!! et j'ai fait mes 250 oapiRegisterPanelArea :sad:
Mais c'est instructif !


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #26 - 14 August 2007, 05:33:19
Si on fait toute les diodes (bouton) de la meme tailles (30x30?) il nous faut juste deux coordonnée, le coin en haut a
gauche de la zone sur le panel.

int AidPosZoneDiode_X[FIN_VARIABLE]
int AidPosZoneDiode_Y[FIN_VARIABLE]


Dans la declaration panel c'est simple:

Code: [Select]
for(I=AID_DIODE;I<AID_DIODE+FIN_VARIABLE-1;I++)
{
      // on oublie pas de soustraire l'offset pour les variables:
      A=I-AID_DIODE;
       oapiRegisterPanelArea (I,AidPosZoneDiode_X[A],AidPosZoneDiode_Y[A],AidPosZoneDiode_X[A]
+30,AidPosZoneDiode_Y[A]+30)
}

Et il suffit de modifier la fonction d'init pour lui donner aussi ces deux nouveau chiffres:

InitialiseBouton(DIODE_FUEL,158,345,300,30,FALSE);



Message modifié ( 14-08-2007 06:27 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #27 - 14 August 2007, 05:39:02
Voila , tu voulais des boutons automatique ? c'est fait et sans classe SVP... :badsmile:

En rajoutant des variables tableau tu peux donner encore plus de caracteristique
a chaque diode, d'abord la couleur depend des coordonée of course (source bitmap)
mais tu peux aussi rajouter un double qui va s'occuper du clignotement...
comme chaque diode aura une variable specifique au clignotement elle seront
pas synchro... Cette variable tu la fait bouger dans l'affichage simplement en fonction
du temps....

Alors ? tu va le faire ca ?

Rajouter des centaines de diode devient facile, la seul limite c'est les performance
mais la en les mettant en "MANUEL" et en utilisant une fonction pour change les variables
on peut optimiser:

Code: [Select]
ChangeVariableDiode[int MOTCLE,BOOL Etat)
{
   Diode[MOTCLE]=Etat;
   oapiTriggerRedrawArea(MOTCLE+AID_DIODE);

}


// change la variable et reaffiche automatiquement la diode avec le nouvel etat:
ChangeVariableDiode[DIODE_EGT,FALSE);


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #28 - 14 August 2007, 05:41:07
Tu l'as refait comme ça le DGIV ?
Ou tu l'as laissé tel qu'il se présentait à cause de la base du Deltaglider de base ?

PFFFFF !!!!! :sad:
C'est beau à pleurer ton code ... allez je poste ça juste pour montrer le ridicule de ce que j'ai fait en suivant bêtement
les modèles de la SDK .... j'éditerais si nécessaire ;)

      oapiRegisterPanelBackground (hBmp, PANEL_ATTACH_BOTTOM|PANEL_MOVEOUT_BOTTOM,
0xffffff);
      oapiSetPanelNeighbours (-1,-1,-1,1); //Pour dire à Orbiter ou se trouve l'autre panel gauche
droite haut bas
      SetCameraDefaultDirection (_V(0,0,1)); //Avec 1 .... y'a le Panel 1 en bas, mais ça on le sait déjà ...
      // MFDs et Boutons MFDs
      oapiRegisterMFD (MFD_LEFT, mfds_left);
      oapiRegisterMFD (MFD_RIGHT, mfds_right);
      oapiRegisterPanelArea (AID_MFD1_LBUTTONS,       _R( 189,  77, 218, 331),
PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED, PANEL_MAP_BACKGROUND);
      oapiRegisterPanelArea (AID_MFD1_RBUTTONS,       _R( 535,  77, 564, 331),
PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED, PANEL_MAP_BACKGROUND);
      oapiRegisterPanelArea (AID_MFD1_BBUTTONS,       _R( 245, 364, 508, 393),
PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN);
      oapiRegisterPanelArea (AID_MFD2_LBUTTONS,       _R( 717,  77, 746, 331),
PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED, PANEL_MAP_BACKGROUND);
      oapiRegisterPanelArea (AID_MFD2_RBUTTONS,       _R(1063,  77,1092, 331),
PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED, PANEL_MAP_BACKGROUND);
      oapiRegisterPanelArea (AID_MFD2_BBUTTONS,       _R( 773, 364,1036, 393),
PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN);
      // Lumieres MFDs
      oapiRegisterPanelArea (AID_MFD1LEFTLIGHT,       _R( 174, 346, 231, 406),
PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE);
      oapiRegisterPanelArea (AID_MFD1RIGHTLIGHT,      _R( 522, 346, 579, 406),
PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE);
      oapiRegisterPanelArea (AID_MFD2LEFTLIGHT,       _R( 702, 346, 759, 406),
PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE);
      oapiRegisterPanelArea (AID_MFD2RIGHTLIGHT,      _R(1050, 346,1107, 406),
PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE);
      // Displays et boutons des displays
      oapiRegisterPanelArea (AID_TOPDISPLAY,          _R( 590,  60, 690, 160), PANEL_REDRAW_USER,
PANEL_MOUSE_IGNORE, PANEL_MAP_BACKGROUND );
      oapiRegisterPanelArea (AID_HORIZON,             _R( 592, 188, 688, 284), PANEL_REDRAW_USER,
PANEL_MOUSE_IGNORE); //Display du milieu pour le moment Horizon.cpp
      oapiRegisterPanelArea (AID_BOTTOMDISPLAY,       _R( 590, 312, 690, 412),
PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE, PANEL_MAP_BACKGROUND );
      oapiRegisterPanelArea (AID_BOUTONTOPDISPLAY ,   _R( 596, 445, 626, 489),
PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN);
      oapiRegisterPanelArea (AID_BOUTONMIDDLEDISPLAY, _R( 626, 445, 656, 489),
PANEL_REDRAW_MOUSE, PANEL_MOUSE_LBDOWN);
      oapiRegisterPanelArea (AID_BOUTONBOTTOMDISPLAY, _R( 656, 445, 686, 489),
PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN);
      //oapiRegisterPanelArea (AID_ENGINEINDICATOR,     _R( 590,  60, 690, 160),
PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE);
      // RCSMode Bouton selecteur
      oapiRegisterPanelArea (AID_ATTITUDEMODE,        _R( 497, 439, 527, 469),
PANEL_REDRAW_MOUSE,  PANEL_
616), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN);

      oapiRegisterPanelArea (AID_GRAND_DISPLAY_BOTTOM_PANEL,_R(         566,
510, 714, 635), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE);



Message modifié ( 14-08-2007 05:47 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #29 - 14 August 2007, 05:44:16
Voila , c'est tout...

Sur le meme principe on peut faire des boutons, des diodes, pleins de truc...
Avec des boutons le truc en plus c'est juste l'interception des click dans mouseevent

Mais la, je regrette aussi de pas l'avoir fait pour DGIV... ca m'aurait evité pleins de
code de merde, du temps, de la clarté etc etc...

Par contre le seul danger de cette methode c'est: l'uniformisation

Ok ton panel a pleins de boutons mais ils ont tous la meme gueule, une armée de diode bien aligné,
faut donc ce gaffer et rajouter un peu de variété. Facile avec la bitmap et les parametres...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #30 - 14 August 2007, 05:44:50
Quote
Alors ? tu va le faire ca ?

Oui, juste pour le plaisir d'apprendre !
Tout fonctionne mais tant pis c'est moche !


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #31 - 14 August 2007, 05:46:08
Quote
picto a écrit:
Tu l'as refait comme ça le DGIV ?
Ou tu l'as laissé tel qu'il se présentait à cause de la base du Deltaglider de base ?

PFFFFF !!!!! :sad:
C'est beau à pleurer ton code ... allez je poste ça juste pour montrer le ridicule de ce que j'ai fait en suivant bêtement
les modèles de la SDK .... j'éditerais si nécessaire ;)

      oapiRegisterPanelArea (AID_MFD1_LBUTTONS,       _R( 189,  77, 218, 331),
PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED, PANEL_MAP_BACKGROUND);

Bah, non... c'est un peut moins pire que toi mais le DGIV ressemble au tient :sad:
Et j'ai aucune circonstance atténuante en plus... :sad:

Mais bon j'ai fait petit a petit, me suis pas rendu compte... :sad:

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #32 - 14 August 2007, 05:58:54

Pour le truc anti uniformisation, il suffit de répéter cinq ou si fois les opérations,
Que je vais d'ailleurs relire à tête reposée quand même : faut du temps pour ingurgiter
tout ça pleinement ! sur différents types de boutons et les disposer harmonieusement
ou fonctionnellement  ( ça va d'ailleurs de pair en général ) ...

Mais si je ne m'abuse, il n'y a rien pour compléter le register avec le type de redraw
ou de mouse event ou de map dans tes tableaux !

Dommage pour le DGIV ... :sad:
Par contre, j'imagine que tu as utilisé  ce genre de tableaux pour la gestion des systèmes
propres au DGIV, je ne parle pas des boutons là mais des variables qui jouent entre elles
pour donner "vie" à cette "chose"


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #33 - 14 August 2007, 06:02:29
En dernier:

La en multipliant les tableaux:

Diode[]
PosDiode_y[]
PosDiode_x[]

ChangeVariableDiode(DIODE,FALSE);


Bouton[]
PosBouton[]
PosBouton[]

ChangeVariableBouton(BOUT,FALSE);

On peut faire 4, 5 , 10 boutons ou diode aux comportement completement différents, des "gauges rubans" affichage
avec aiguille, des display digitals, des diodes etc etc...

Mais le top c'est qu'on pourrais typiquement faire ca avec UNE CLASSE. et des pointeurs... mais la on sort de la prog
basique.

Mais le temps passé a faire une classe vraiment polyvalente souple et simple a utiliser t'aurais deja fini les 10-
60 boutons de ton addons en fait...

Je suis impatient de voir ton code revisité :)

A++

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #34 - 14 August 2007, 06:07:08
Quote
picto a écrit:
Dommage pour le DGIV ... :sad:
Par contre, j'imagine que tu as utilisé  ce genre de tableaux pour la gestion des systèmes
propres au DGIV, je ne parle pas des boutons là mais des variables qui jouent entre elles
pour donner "vie" à cette "chose"

Bah oui j'ai utilisé pas mal d'autre truc aussi, mais en fait le defaut c'est que le DGIV c'est construit hyper
progressivement, le temps passé sur les boutons était court en comparaison du reste, ca justifiait pas de
changer le systeme... En plus c'était mélangé avec du code d'il y a 4 ans, de 2 ans d'il y a 1 ans...
different style, d'autre connaissance, donc il aurait fallu y passer un mois rien que pour tout remettre
de niveau sans bug...

Exemple typique ou a chaque etage on ce dit "ah bah, le sol est encore loins"...

Si il y a 4 ans j'avais pensé que ca deviendrais un DGIV j'aurais commencé differement c'est sure...
Mais bon, il marche bien ;)

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #35 - 14 August 2007, 06:18:03
Quote
picto a écrit:
Mais si je ne m'abuse, il n'y a rien pour compléter le register avec le type de redraw
ou de mouse event ou de map dans tes tableaux !

Ouais mais si tu met une variable par parametre tu retombe presque dans la complexité de
oapiRegisterArea en fait :) (sauf que le reste est automatique) Donc un type de bouton
(tableau) tous les même parametres...  sinon le re-utilisation de code ne sert plus a rien.

Mais oublie pas que cette methode est benefique pour 10-15 boutons pareils ou en tout cas qui réagissent
pareil (tu peux varier couleur taille et vitesse clignotement facilement)

Donc diode!=bouton deux position!=switch rotatif trois position

Dan



Message modifié ( 14-08-2007 06:22 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #36 - 14 August 2007, 06:25:26

Ca vaut le coup là, le seul cpp qui soit vraiment avancé est le panel.
Ca m'a ouvert les yeux sur la manière de lire un Callback .... :siffle:
Je n'avais pas encore capté que le int id que Martin attend pour faire quelque
chose est tout bêtement le nombre associé à chaque case ....

Du moment qu'il reçoit un nombre, il est content ...
Peu importe comment nous on peut le construire derrière !
Mais franchement, les exemples de la SDK sont pourris dans l'ensemble !
Ils n'incitent pas à la curiosité en fait !

Il n'y a que sur le DragonFly que j'ai vu l'utilisation de classes internes au Dragon
pour la gestion des panels et autres ( je retournerais voir plus tard ;) )

Et puis, toutes les fonctions qui doivent être vraiment intéressantes ( par exemple
celle qui redessine les MFDs disparaissent derrière les headers de l'OAPI ) alors que
ce sont elles qui pourraient être réellement instructives car souples !

Pour l'instant, je n'ai que le panel central qui soit totalement fonctionnel, les déclarations
et fonctions pour celui ci vont rester telles qu'elles, mais pour le reste, c'est exactement
le bon moment !


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #37 - 14 August 2007, 06:32:40
Gaffe toi, comme j'ai tapé au kilometre en meme temps que la reflexion
 me suis ptete un peu mélangé les pinceau avec les FIN_DIODE+DIODE_EGT;I<FINVARIABLE et consort...

mais si t'a pigé la logique... no problemo, sinon parcours les boucle en debug tu verra bien que AID!=54
ou que variable[54]  (ca tu verra tout de suite = CTD :) )

Bon dodo :zzz:

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #38 - 14 August 2007, 06:36:24
Quote
Donc diode!=bouton deux position!=switch rotatif trois position

Oui oui ... mais c'est ça qui est vachement bien avec ce système ...
Plus de prise de tête avec des noms alambiqués qui doivent contenir le nom du systeme, le type de bouton, et une
position écrite pour moi facile à repérer mentalement genre LEFT_TOP_BOUTON_POUR_MIDDLE_DISPLAY, là au moins,
c'est fait une bonne fois pour toute ... implicitement, à la déclaration, le bouton contient son type de fonctionnement !

C'est génial ! Bravo !

Ca ne devrait pas être trop long de convertir, il faudra juste faire gaffe à ne pas cafouiller pour reporter les valeurs
dans SetClassCap ... mais sinon, ça devrait aller ... deux trois petites choses ou je ne suis pas sûr de la logique mais
c'est peut être la fatigue ... a relire plus tard quoi :)

Ca devrait en intéresser plus d'un ce système j'imagine !


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #39 - 14 August 2007, 13:19:10
Quote
picto a écrit:
Plus de prise de tête avec des noms alambiqués qui doivent contenir le nom du systeme, le type de bouton, et une
position écrite pour moi facile à repérer mentalement genre LEFT_TOP_BOUTON_POUR_MIDDLE_DISPLAY, là au moins,
c'est fait une bonne fois pour toute ... implicitement, à la déclaration, le bouton contient son type de fonctionnement !


mhhh amha très mauvaise idée par position, si le frigo est en panne tu dis pas a ta femme "le truc qui est a
gauche en entrant dans la piece du bas" mais "le frigo" non ? ensuite quand tu en a dix sur la meme ligne tu met
"LEFT_BAS" pis apres "UN_PEUT_MOINS_LEFT" "ENCORE_MOINS_LEFT" "PLUS_LEFT_DU_TOUT" ? :badsmile:

Ensuite ca ce refere à quel systeme exactement ? les roues ? l'alarme feu ? l'ordinateur ? t'est obligé d'aller
regarder sur le panel pour reperer le bouton et lire sont etiquette du coup le code est incompréhensible à lire.
Si tu doit avoir une reference externe pour comprendre le code autant l'appeller BHG5678 dans ce cas ;)

Met toujours a quoi ca ce refere exactement, tu retrouvera bien la diode de l'alarme roue sur le panel c'est marqué
dessus normalement... ;)

plutôt:

ALARM_GEAR_LEFT
ALARM_COMPUTER_FAILURE
STATUS_COMPUTER_OFFON
STATUS_AIRLOCK_OPEN

Tu peut mettre le type aussi:

DIODE_ALARM_GEAR_LEFT
DIODE_COMPUTER_STATUS
DIODE_AIRLOCK_STATUS

Mais bon si tu tape deja dans un tableau qui fait que les diodes... pas besoin:

Diode[ALARM_GEAR_LEFT]
Diode[COMPUTER_STATUS]
Diode[AIRLOCK_STATUS]


Franchement c'est quand meme plus comprehensible:

Code: [Select]
if(Bouton[COMPUTER_POWER]==TRUE)
{
     Diode[COMPUTER_STATUS]=TRUE;
}

Que

Code: [Select]
if(Bouton[LEFT_TOP_BOUTON_SUR_MIDDLE_DISPLAY]==TRUE)
{
     Diode[LEFT_TOP_DIODE_SUR_MIDDLE_DISPLAY]=TRUE;
}

A plus

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #40 - 14 August 2007, 19:24:24
Pour les noms, tu as raison ... en fait, les noms les plus tordus
n'existent que sur les trois premiers boutons que j'ai fait. ;)
Maintenant ça donne des trucs comme ça

CREW_MANAGEMENT_OPEN_AIRLOCK
LIFE_SUPPORT_RESCUE_POWER_AIR_FILTER
MECHANICAL_OPEN_DOCK
ANTENNA_POINT
PROBES_RELEASEBUTTON

On voit bien ce qu'ils font au premier coup d'oeil

Petite précision le enum est un autre type de structure que le typedef en fait ?
Il me semble avoir lu quelque part qu'il y a une troisième forme de structure... :wonder:
Je vais essayer de retrouver son nom ....

Je viens de tilter sur un truc, il faut vraiment se gaffer du premier define de chaque type....
Vu que ça deviens un système très souple, on peut être tenté de rajouter un bouton ici ou là ...
Et gaffe aux chevauchages de AID ....
Genre

#define aid Diode 100
suivent ....122 diodes dans le enum
#define aid BoutonPoussoir 200
suivent .... 35 boutons
Etc ... :lol: Une belle zone pour le callback redraw event



Message modifié ( 14-08-2007 20:41 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #41 - 14 August 2007, 21:26:47
typedef defini un type après tu peux faire typedef struct ou typedef enum etc etc...
Enfin bref, la touche F1 sur typedef peut donner quelques infos aussi ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #42 - 14 August 2007, 22:58:27
Ca avance, tous les enums sont prêts ,toutes les fonctions de dessin aussi
Je prépare le runtime, et j'ai envie d'automatiser aussi les déclarations,
register et intialisations dans classcap. Mais il y a un truc que j'aimerais
comprendre avant de continuer, ça concerne un détail d'écriture sur la fonction
de register.

Code: [Select]
for(I=AID_DIODE;I<AID_DIODE+FIN_VARIABLE-1;I++)
{

      A=I-AID_DIODE;
       oapiRegisterPanelArea (I,AidPosZoneDiode_X[A],AidPosZoneDiode_Y[A],AidPosZoneDiode_X[A]
+30,AidPosZoneDiode_Y[A]+30)
}

C'est bizarre ton écriture .... ça devrait plutôt ressembler à ça non ?
Dans le cas d'un truc qu'on ne fait que redessiner.

Code: [Select]
for(I=AID_DIODE;I<AID_DIODE+FIN_VARIABLE-1;I++)
{
      A=I-AID_DIODE;
       oapiRegisterPanelArea (I,_R(AidPosZoneDiode_X[A],AidPosZoneDiode_Y[A],AidPosZoneDiode_X[A]
+30,AidPosZoneDiode_Y[A]+30), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE);
}

et PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN); à la fin d'une autre fonction pour les zones à mouse event.

Ce qui m'étonne, c'est que tu ignores l'écriture par défaut du ,_R( .... ),

oapiRegisterPanelArea (AID_PROBES_DOOR1 ,_R(868, 169, 898, 214), PANEL_REDRAW_USER,
PANEL_MOUSE_LBDOWN);

Ou alors il y a encore quelque chose qui m'échappe ... :wonder:



Message modifié ( 14-08-2007 22:59 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #43 - 14 August 2007, 23:02:20
C'est du pseudo code, pas à copier litteralement quoa, faut juste piger le principe et l'implementer quoa...
C'est l'ikea de la prog quoa, à monter soit-même :badsmile:

Dan
"Croaaa ?"



Message modifié ( 14-08-2007 23:03 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #44 - 14 August 2007, 23:07:24
C'est bien ce qu'il me semblait :sad:
T'es qu'un feignant :sad:

Quand j'aurais un truc bien carré, je posterais un exemple
EN VRAI CODE pour ceusses que ça intéresse !

Voui môssieur ! Farpaitement



Message modifié ( 14-08-2007 23:10 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #45 - 14 August 2007, 23:16:59
Croaaa ? :wonder:

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #46 - 15 August 2007, 01:00:18
Croaaa ....

J'y suis presque, toutes mes fonctions sont prêtes, tous les tableaux aussi ....
J'arrive au moment délicat de la conversion de la liste d'écriture de mes :fucking:
register dans la liste d'appel de la fonction d'initialisation de classcap ....
faut juste que je récupère les deux premiers chiffres du register bien en face
du nom associé et sans cafouillage, vu la quantité :sick:

J'ai opté pour des init fonctions à six arguments .... celles qui font tout d'un coup ;)
Et j'en ai cinq types pour l'instant ...

diode .... pour une indication panel
double diode ... deux diodes en alternance pendant un transit d'anim par exemple
poussoir simple ...
selecteur rotatif ...
Bouton à bascule ... interrupteur

Tant qu'on y est ce serait pas mieux de pouvoir récupérer tous les enum dans
une fonction dans class cap plutôt que de se retaper toute la liste  .... :badsmile:

InitialiseBouton(DIODE_FUEL,158,345,300,30,FALSE);
Etc ...
Etc ...


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #47 - 15 August 2007, 01:33:14
Quote
picto a écrit:
Tant qu'on y est ce serait pas mieux de pouvoir récupérer tous les enum dans
une fonction dans class cap plutôt que de se retaper toute la liste  .... :badsmile:

InitialiseBouton(DIODE_FUEL,158,345,300,30,FALSE);
Etc ...
Etc ...

Tu veux dire une init séparée que tu peux re-appeler ? sorry pas sur de comprendre...
Ou alors comme c'est tous les même paramteres une fonction qui te permet de ne pas les
remettre a chaque fois ? Genre:

InitialiseBouton(DIODE_FUEL,158,345,300,30,FALSE);
// meme params que le premier ?
InitialiseBouton(DIODE_COOL);
InitialiseBouton(DIODE_OKCORRAL);
InitialiseBouton(DIODE_ALBERT);

Enfin bref, precise TOUT est possible ;)

Mheuuu

Dan



Message modifié ( 15-08-2007 01:36 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #48 - 15 August 2007, 01:56:37
Ce que je veux dire c'est ça ...
Je suis en train de taper une liste dans setclasscap qui appelle toutes les fonctions intialisation...
Mais c'est dommage en fait puisque la liste de mots clés existe déjà dans les enum ....

Code: [Select]
InitialiseDiode(DIODE_CHECK_ELEC, 132, 26, XdiodeBmp, YdiodeBmp, false);    
InitialiseDiode(DIODE_CHECK_ATMO, 171, 26, XdiodeBmp, YdiodeBmp, false);
InitialiseDiode(DIODE_CHECK_HYDRO, 210, 26, XdiodeBmp, YdiodeBmp, false);
InitialiseDiode(DIODE_CHECK_TEMP, 249, 26, XdiodeBmp, YdiodeBmp, false);
InitialiseDiode(DIODE_CHECK_WATER, 288, 26, XdiodeBmp, YdiodeBmp, false);
InitialiseDiode(DIODE_CHECK_DOCK, 327, 26, XdiodeBmp, YdiodeBmp, false);
InitialiseDiode(DIODE_CHECK_ENGINE, 366, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_CHECK_PROBE, 405, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_CHECK_ANTEN, 444, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_CHECK_GYRO, 483, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_ELEC, 785, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_ATMO, 824, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_HYDRO, 863, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_TEMP, 902, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_WATER, 941, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_DOCK, 980, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_ENGINE,    1019, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_PROBE,     1058, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_ANTEN,     1097, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_RESET_GYRO,      1136, 26, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_APU_GEN_1 , 606, 17, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_APU_ON , 636, 17, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_APU_GEN_2 , 666, 17, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_APU_TEMPO_A , 528, 56, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_APU_TEMPO_AA , 528, 68, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_APU_TEMPO_B , 745, 56, XdiodeBmp, YdiodeBmp, false);  
InitialiseDiode(DIODE_APU_TEMPO_BB , 745, 68, XdiodeBmp, YdiodeBmp, false);

Code: [Select]
enum
{
DIODE_CHECK_ELEC
DIODE_CHECK_ATMO
DIODE_CHECK_HYDRO
DIODE_CHECK_TEMP
DIODE_CHECK_WATER
DIODE_CHECK_DOCK
DIODE_CHECK_ENGINE
DIODE_CHECK_PROBE
DIODE_CHECK_ANTEN
DIODE_CHECK_GYRO
DIODE_RESET_ELEC
DIODE_RESET_ATMO
DIODE_RESET_HYDRO
DIODE_RESET_TEMP
DIODE_RESET_WATER
DIODE_RESET_DOCK
DIODE_RESET_ENGINE
DIODE_RESET_PROBE
DIODE_RESET_ANTEN
DIODE_RESET_GYRO
DIODE_APU_GEN_1
DIODE_APU_ON
DIODE_APU_GEN_2
DIODE_APU_TEMPO_A
DIODE_APU_TEMPO_AA
DIODE_APU_TEMPO_B
DIODE_APU_TEMPO_BB

FIN_DIODE_SIMPLE
}
Diode[FIN_DIODE_SIMPLE];


Je sais, c'est vicelard, mais tant qu'à pousser le bouchon ;)
Ce pourrait donc être malin de créer une fonction qui appelle
les fonctions en prenant les listes d'enum dans l'ordre ...

Tu remarqueras au passage que la position de départ sur un bitmap est fixée sur une constante.
Pratique pour réorganiser les bitmaps facilement ... ;)


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 264
  • Hein, quoi !?
    • FsPassengers
Reply #49 - 15 August 2007, 02:05:54
Bah, pas une super idée car les positions sont toute différente...

Si tu fais un for next ca va faire con ils seront tous au meme endroit: :badsmile:

Code: [Select]
for()
{
       InitialiseDiode(DIODE_CHECK_ELEC,132, 26, XdiodeBmp, YdiodeBmp, false);  
}


Tu pourrais faire comme ca pour que l'incrementation soit automatique: (c'est ce que tu veux?)

Code: [Select]
int NoDiode=0;
InitialiseDiode(NoDiode,132, 126, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,134, 23, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,239, 260, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,450, 216, XdiodeBmp, YdiodeBmp, false);   NoDiode++;

Mais ce serait très con... dis moi comme ca immediatement quel est la diode qui est a la position 941, 26 ?
oui... c'est illisible ! (normalement c'est DIODE_CHECK_GYRO mais faut compter... pénible)


Code: [Select]
NoDiode=0;
InitialiseDiode(NoDiode,132, 126, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,134, 23, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,239, 260, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,450, 216, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,134, 23, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,239, 260, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,134, 23, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,239, 260, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,450, 216, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,941, 26, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,134, 23, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,239, 260, XdiodeBmp, YdiodeBmp, false);   NoDiode++;
InitialiseDiode(NoDiode,450, 216, XdiodeBmp, YdiodeBmp, false);   NoDiode++;

Ca vaut pas le coup, ces lignes te permettent justement de definir ton panel très facilement, si tu le rend illisible
c'est le contraire de ce que tu veux (lisible, simple)

Ou alors j'ai pas compris ?

Dan



Message modifié ( 15-08-2007 02:15 )