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: [Fermé] Irridium Mission Jupiter  (Read 65189 times)

0 Members and 1 Guest are viewing this topic.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #75 - 06 September 2007, 04:00:50
Si tu t'en sort pas avec UMMU fait peter le code je regarde...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #76 - 06 September 2007, 04:04:08

C'est dans ta boite ! :lol:
Le temps de préparer ;)


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #77 - 06 September 2007, 04:14:41
Je jette un n'oeil...

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #78 - 06 September 2007, 04:21:32
J'ai un CTD je peux rien voir, à mon avis c'est lié au mesh ? plus le meme nombre de groupe pour les anims ?

Dan



Message modifié ( 06-09-2007 04:31 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #79 - 06 September 2007, 04:27:50
Faudrais renvoyer un mesh ;)

Juste un truc... j'ai vu que t'avais mis 12'000 "//" pour desactiver un code
tu peux aussi utiliser "/*"  et "*/" pour desactiver toute une portion...

Exemple:

Code: [Select]
// if  (SYSdock.iAlarmeDuration %2==0)
// {
// bAlarmePrincipaleTopPanel = TRUE;
// bAlarmePrincipaleBottomPanel = TRUE;
// SYSdock.bFaitClignoterAlarme = TRUE;
// }
// else
// {
// bAlarmePrincipaleTopPanel = FALSE;
// bAlarmePrincipaleBottomPanel = FALSE;
// SYSdock.bFaitClignoterAlarme = FALSE;
// }


plus simple, juste deux lignes:


Code: [Select]

/*
if  (SYSdock.iAlarmeDuration %2==0)
{
bAlarmePrincipaleTopPanel = TRUE;
bAlarmePrincipaleBottomPanel = TRUE;
SYSdock.bFaitClignoterAlarme = TRUE;
}
else
{
bAlarmePrincipaleTopPanel = FALSE;
bAlarmePrincipaleBottomPanel = FALSE;
SYSdock.bFaitClignoterAlarme = FALSE;
}
*/


Dan



Message modifié ( 06-09-2007 04:29 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #80 - 06 September 2007, 04:35:49
Ah oui, c'est les load meshes ... les sondes ...
Je t'envoie ça ...


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #81 - 06 September 2007, 04:41:18
Autre truc l'indentation


plus facile à lire:

Code: [Select]
  if(blabla)
   {
           if(blabli)
           {
                     blou blou
           }
   }

Mais y a pas mal de truc dans le genre:


Code: [Select]
  if(blabla)
   {
   if(blabli)
   {
           blou blou
   }
   }

Sur quatres lignes c'est pas grave mais sur plus ca rend illisible...

Plutot que te faire ch... à tout refaire, sur chaque CPP tu va en haut "edit"
"tout selectionner" et tu tape "ALT+F8"

Ca re-indente tout automatiquement nickel.

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #82 - 06 September 2007, 04:46:42
Vi, je fait d'habitude pour rendre plus clair, mais en ce moment c'est la panique ;)
CTRL A  ... Alt F8
Je me rend compte que c'est quasi impossible dans le timing décrit ...
C'est un mois et demi qu'il me faudrait pour tout faire clean avant une beta ...
Comme tu disais, entre le truc qui "marchote" et le truc carré il faut du temps.
Quand je vois le temps que je passe pour régler certains détails :doubt:


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #83 - 06 September 2007, 05:57:17
Bon , ca plante plus... par contre je suis mort, j'ai les yeux qui se croisent...
Je verrais demain... enfin... tout à l'heure ;)

A++

Dan


Offline Well

  • Legend
  • ******
  • Posts: 2722
  • Karma: 46
    • L'Atelier Wellographique
Reply #84 - 06 September 2007, 21:22:31
Coucou tout le monde, je découvre ce post par l'intermédiaire de Nomatter,
Je suis complètement halluciné par ce bel addon en construction !!! Sacré projet Picto !!!!!!
Je t'envoie tout mon soutiens avec mon accord bien entendu pour les textures.
:top:


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #85 - 06 September 2007, 22:43:58

Merci ....
Et pour le compliment  .... que je prend ....
Et pour les textures .... que je prend aussi .... :)
Tu auras les mercis d'usage dans la doc  ;)


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #86 - 07 September 2007, 05:39:17
Aaah on a plus de place ici :)

bon, suite au pm je te poste UNE des fonction, il faudra faire toutes les autres la même chose.

D'abord un mot clé pour initOK, plus simple que ce souvenir:

Dans irridium.h:

Code: [Select]
#define INITBOUTONOK 987654321
pourquoi pas simplement 1 ou TRUE ?
Toujours le maximum de sécurité, a la suite d'une erreur de codage tu peux par erreur vouloir mettre 1 ou true sur
une autre variable et tu la met en fait sur initok... Très peu de chance d'accord mais pourquoi ce priver de cette
sécurité pour juste un chiffre ?

Ensuite tu modifie TOUTE les fonction d'initialisation des boutons en inserant ce que j'ai rajouté plus bas:
Tu n'oublie pas de changer &Diode Diode.initOK et le mot clé FIN_DIODE_SIMPLE en accord avec le tableau utilisé hein !!!


Code: [Select]
void Irridium::InitialiseDiode(int MotCle,int PositionPanelX,int PositionPanelY,int SourceBitmapX,int
SourceBitmapY,BOOL EtatInitial,int Panelo)
{
if
(MotCle<DIODE_CHECK_ELEC||MotCle>=FIN_DIODE_SIMPLE||PositionPanelX<0||PositionPanelX>1280||PositionPanelY
<0||PositionPanelY>1024||SourceBitmapX<0||SourceBitmapY<0||Panelo<0||Panelo>1)
{
//LogError("Putain erreur dans InitialiseSelecteur");
return;  //fait rien
}

// A RAJOUTER ---->>>>>
// initialise tout le tableau si premier appel à cette fonction pour cette instance:
static int ResetOk=0;
if(ResetOk!=(int)this)
{
int I;
for(I=0;I<FIN_DIODE_SIMPLE;I++)
memset(&Diode[I],0,sizeof(BOUTON));
ResetOk=(int)this;
}
// fin initialisation
Diode[MotCle].InitOK=INITBOUTONOK;
    // FIN A RAJOUTER <<<<<------


Diode[MotCle].Etat=EtatInitial;
Diode[MotCle].iBmpPosX=SourceBitmapX;
Diode[MotCle].iBmpPosY=SourceBitmapY;
Diode[MotCle].AidPosZoneX=PositionPanelX;
Diode[MotCle].AidPosZoneY=PositionPanelY;
Diode[MotCle].Panel=Panelo;
}




Message modifié ( 07-09-2007 05:39 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #87 - 07 September 2007, 05:41:32
Ensuite dans CHAQUE boucle qui utilise tes boutons il va falloir controller en premier si ce bouton a été initialisé
avec

Code: [Select]
if(Diode[Bidule].InitOK!=INITBOUTONOK)
     continue; // bouton pas initialisé passe au suivant


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #88 - 07 September 2007, 05:44:36
Ca inclu TOUTES les boucles, surtout celle dans initPanel

exemple:
Code: [Select]
for(int I=AID_DIODE_SIMPLE;I{
int A=I-AID_DIODE_SIMPLE;
if(Diode[A].InitOK!=INITBOUTONOK)
continue;
oapiRegisterPanelArea (I,_R(Diode[A].AidPosZoneX,Diode[A].AidPosZoneY,Diode[A].AidPosZoneX
+11,Diode[A].AidPosZoneY+6), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE);
}



Message modifié ( 07-09-2007 05:46 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #89 - 07 September 2007, 05:50:46
on est bien d'accord il y a trois chose a changer dans chaque fonction d'nitialisation:


Code: [Select]
void Irridium::[b]InitialiseDiodeA[/b](int MotCle,int PositionPanelX,int PositionPanelY,int SourceBitmapX,int
SourceBitmapY,BOOL EtatInitial,int Panelo)
{
if
(MotCle<DIODE_ELECTRICAL_GEN1_A||MotCle>=FIN_DIODE_A||PositionPanelX<0||PositionPanelX>1280||PositionPan
elY<0||PositionPanelY>1024||SourceBitmapX<0||SourceBitmapX<0||Panelo<0||Panelo>1)
{
// LogError("Putain erreur dans InitialiseSelecteur");
return;  //fait rien
}

// A RAJOUTER ---->>>>>
// initialise tout le tableau si premier appel à cette fonction pour cette instance:
static int ResetOk=0;
if(ResetOk!=(int)this)
{
int I;
for(I=0;I<FIN_DIODE_A;I++)
memset(&DiodeA[I],0,sizeof(BOUTON));
ResetOk=(int)this;
}
// fin initialisation
DiodeA[MotCle].InitOK=INITBOUTONOK;
    // FIN A RAJOUTER <<<<<------

DiodeA[MotCle].Etat=EtatInitial;
DiodeA[MotCle].iBmpPosX=SourceBitmapX;
DiodeA[MotCle].iBmpPosY=SourceBitmapY;
DiodeA[MotCle].AidPosZoneX=PositionPanelX;
DiodeA[MotCle].AidPosZoneY=PositionPanelY;
DiodeA[MotCle].Panel=Panelo;
}



Message modifié ( 07-09-2007 05:59 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #90 - 07 September 2007, 05:53:20
Oki, je suis trop fatigué pour faire ça clean maintenant, mais j'étudie ça pour faire du waterproof :sunk:
Quelle rapidité ! Sacrément difficile la prog quand même ! Quand y'en a plus y'en a encore ...


Juste un truc sur la sécurité ...
Je vois comment faire un memset sur une structure simple genre data

   DATASIMULATION  Data;
   memset(&Data,0,sizeof(Data));


Mais sur un tableau avec structure :wonder:

   BOUTON Display[FIN_DISPLAY];

C'est bon comme ça ?
Ce qui est bizarre, c'est que si je ne rajoute pas  BOUTON devant ce que
je reçois dans l'infobulle ne correspond pas à l'écriture dans la classe ...


   memset(&BOUTON Display,0,sizeof(BOUTON Display));



Message modifié ( 07-09-2007 05:59 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #91 - 07 September 2007, 05:54:58
Comme cela il n'y a aucun risque qu'un bouton NON INITIALISE soit utilisé ou déclaré dans le panel etc etc.

L'avantage des boucles c'est qu'on peut traiter massivement pleins de chose, le désavantage c'est que comme on
traite massivement des trucs qui doivent s'initialiser une par une avant il est TRES facile de ce planter= une chose non
initialisée serais utilisée avec tout les effets horribles possible, (arrachage de cheveux)

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #92 - 07 September 2007, 05:56:32
Quote
picto a écrit:
   memset(&BOUTON Display,0,sizeof(BOUTON Display));

ATTENTION La tu initialise la structure bouton, pas tes variables tableaux.

Relis tout demains a tete reposée. ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #93 - 07 September 2007, 05:57:00
Bon, faut vraiment faire dodo là ... je viens de voir ça :sick:
         memset(&Diode,0,sizeof(BOUTON));


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #94 - 07 September 2007, 05:58:57
En passant une fois fini stuveux tu me passe le code (on ce met d'accord sur un moment) en 20mn je controle que
tout est bon dans le code... deux paire d'yeux valent mieux qu'une surtout pour ce genre de truc.

Les tableaux c'est DANGEREUX si on a pas un controle strict, vaut mieux pas ce planter dans le controle sinon on crois
qu'on est en sécurité alors qu'on ne l'est pas. (on croyait avoir pris le parachute mais en fait c'est un sac avec le pick-
nick dedans ;) )

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #95 - 07 September 2007, 06:03:05
Ben, déjà, le coup des checks de sécurité faits en double, je suis épaté que tu aie vu ça !
C'est ton boulot la prog je crois :badsmile:

Mais je suis un peu inquiet pour la suite ...
Est ce ça que tu appelles les "fuites de mémoire" ?
Si oui, ça sous entend que je vais rencontrer encore plus de problèmes
dans ce genre au moment ou ça va partir sur les ordis des copains ... :sick:



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

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #96 - 07 September 2007, 06:12:14
Quote
picto a écrit:
Est ce ça que tu appelles les "fuites de mémoire" ?

Nan c'est une bete erreur de code...

Tu n'aimerais pas ca ???

oapiRegisterPanelArea(501,_R(893473,-2364512,893809435,-8907487),

ben c'est ce qui risque d'arriver sans double controle... init tableau+controle que l'init a bien été faite par InitBouton.

Comme il est TRES facile d'oublier un init (tu traite de grand nombre de boutons massivement) on ce premuni contre
ca.

Par la suite par curiosité tu met un break sur les continue:

Quote
   if(Diode[A].InitOK!=INITBOUTONOK)
      continue;

Et tu vois si tu passe sur un bouton non initialisé, ca peut aider a corriger un truc que t'avais pas vu.
mais au moins aucun bouton non initialisé ne sera declaré avec un oapiRegisterPanelArea.

Dan



Message modifié ( 07-09-2007 06:13 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #97 - 07 September 2007, 06:20:34
Quote
oapiRegisterPanelArea(501,_R(893473,-2364512,893809435,-8907487),

En debug, il me semble avoir aperçu un truc comme ça quand je déployais
les listes de variables dans les fenêtres du bas ..
Mais je veux pas dire de bêtises ...
Si ça se trouve, c'étail l'adresse de la variable ... je ne sais plus !


Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #98 - 08 September 2007, 13:52:28
Brainstorm ...
C'est presque au point, mais je cherche à faire une fonction qui
pourrait appeller n'importe quelle DLL à partir du vaisseau mère.

Il y a encore des choses basiques qui m'échappent en prog.
Notamment sur ce genre d'écritures.

nbr = nbr + 1;
sprintf(name, "Sonde%d", nbr); // entier vers chaine de caractére (int nbr)
GetStatusEx (&vs);
Local2Rel (ofsa, vs.rpos);
oapiCreateVesselEx (name, "Sonde", &vs); // Sonde , ici, c'est ta dll pour la sonde

Ok pour name, c'est ce qui nomme le nouveau vessel pour les scenarios et la fenêtre F3
Mais par exemple serait il possible d'appeller de la même façon plusieurs
DLLs dont les noms se suivent (en ayant fait gaffe aux noms des DLLs oeuf course ) ?

oapiCreateVesselEx (name, name, &vs);



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

Pic

Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #99 - 08 September 2007, 15:15:18
Quote
picto a écrit:
nbr = nbr + 1;
sprintf(name, "Sonde%d", nbr); // entier vers chaine de caractére (int nbr)
GetStatusEx (&vs);
Local2Rel (ofsa, vs.rpos);
oapiCreateVesselEx (name, "Sonde", &vs); // Sonde , ici, c'est ta dll pour la sonde

nbr  : c'est juste un compteur, initialisé à 0.. dans le cas où tu veux pleins de sondes ;)

2ème ligne : copie dans la variable "name" le mot "Sonde" concaténée avec nbr (%d pour double si je dis pas de bétises, c'est le type de la variable nbr juste à côté)

3ème ligne : récupère le VESSELSTATUS de ton vaisseau (position, vitesse, direction, pleins de paramètre quoi ;)))

4ème ligne : affecte l'offset pour le positionnement de ta sonde; l'avantage, c'est que celle-ci aura du coup les même
vecteur vitesse et direction mais sera décalé de l'offset défini préalablement)
la dernière ligne crée la sonde :

- name est le nom de ta sonde sous orbiter (exemple : Sonde01, Sonde02 ..)
- le 2ème champs est le nom du module dll (le nom exact de ta dll (exemple : Sonde - sans .dll bien sûr ;)))
- Le dernier champ est le VESSELSTATUS avec le nouvel offset préalablement affecté.

En gros cette fonction crée ton vessel à un endroit donné, une vitesse et une direction donné. Ca marche très bien.
Dans ton cas, ca devrait créer une sonde à chaque appel de cette méthode. Tu peux bien sûr affecter un léger mouvement pour écarter la sonde du vaisseau lors de la création.
Après, comme je te l'ai mis en MP, il faut tatonner d'autres fonctions pour mettre ta sonde dans le bon sens ...
Dis moi si tu as compris (et surtout si ca marche ;))



Message modifié ( 08-09-2007 15:18 )