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++] Sauvegardes scenario  (Read 13505 times)

0 Members and 1 Guest are viewing this topic.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
03 October 2007, 23:38:19
J'ai un problème de sauvegardes.
Je tourne en rond pour essayer de mettre au point un système qui permette
de travailler les constantes du vaisseau pour les moteurs, réservoirs et ISP  ...
temporairement.

Un peu à la manière de Boulicraft, mais par lecture scenario pour faire vite.

Vu que ce sont des const double j'ai essayé d'en faire des variables doubles de classe
mais visiblement Orbiter n'aime pas trop ...
Et je n'ai aucune idée sur comment détourner le truc pour faire cette mise au point.

   Scn.SavedVariable("MAIN_THRUST",      &MAX_MAIN_THRUST);
   Scn.SavedVariable("IONIC_THRUST",      &MAX_IONIC_THRUST);
   Scn.SavedVariable("RCS_THRUST",         &MAX_RCS_THRUST);
   Scn.SavedVariable("MAX_TANK1",      &MAX_TANK1_CAPACITY);
   Scn.SavedVariable("MAX_TANK2",      &MAX_TANK2_CAPACITY);
   Scn.SavedVariable("MAX_RCS_FUEL",   &MAX_RCS_FUEL_CAPACITY);
   Scn.SavedVariable("EMPTY_MASS",            &EMPTY_MASS);



Message modifié ( 03-10-2007 23:42 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #1 - 04 October 2007, 00:38:28
Ben pas bsoin de constante, tu fait des variables normale de classe:

double MAX_MAIN_THRUST;

Dans clascap tu les initialise a une valeur par defaut au début:

MAX_MAIN_THRUST=20000;

Et tu cree tes moteurs avec....
Au chargement du scenario tu redefini tes moteurs après le chargement des variables éventuellement changée.

Une constante c'est une variable tout a fait comme les autres, tu *promet* juste au programme que tu ne les
changera jamais, ca lui permet de faire quelques optimisations dessus.

Oublie pas après chargement et avant definition des moteurs de les proteger contre les ecritures
foireuse des scn avec des minimum et maximum.

Ca, ca force la valeur a etre plus grande que 10000 et plus petite que 30000:
MAX_MAIN_THRUST=min(30000,max(MAX_MAIN_THRUST,10000));  

Tant qu'on lui passe un truc "dans les clous" c'est bon, si on passe en dehor c'est forcé..ie:
si tu passe 5000 ce sera forcé a 10000 si tu passe 100'000 ce sera forcé à 30000

A++

Dan



Message modifié ( 04-10-2007 00:38 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #2 - 04 October 2007, 00:54:50
OK, je ne savais pas dans quel ordre Orbiter faisait le boulot entre la création
des moteurs et le save restore.

J'avais décidé de ne pas faire d'initialisation dans classcap pour être sûr
que les valeurs utilisées seraent bien celles définies dans le scenario. :sick:
Visiblement, c'était une boulette :badsmile:
Je pensais vraiment que la position dans class cap du save restore et l'écriture
du premier scenario serait suffisante pour que ce ne soit pas foireux.

Je vais essayer et je prend aussi le coup du min max .... c'est très bien.
Même si ce n'est destiné qu'à la mise au point des moteurs de boulinium,
ça vaut le coup de prévoir les bêtises pour gagner du temps sur les tests.

Il y aura aussi moyen de régler le ROT DRAG pour certains grincheux qui se reconnaitront surement ! :badsmile:

Ce ne sera pas une feature par la suite par contre .... A moins de le faire d'une
façon classe comme le DGIV avec un programme de configuration bien fait :)



Message modifié ( 04-10-2007 01:00 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #3 - 04 October 2007, 01:30:36
:wall:
Ca ne fonctionne pas mon idée !

Même en mettant ça dans le scenario:

  ISP_AIR 0.00
  ISP_VACCUM 0.00
  MAIN_THRUST 0.00
  IONIC_THRUST 0.00
  RCS_THRUST 0.00
  MAX_TANK1 0.00
  MAX_TANK2 0.00
  MAX_RCS_FUEL 0.00
  EMPTY_MASS 130000.00

Et en faisant dans cet ordre là dans class cap , j'ai des moteurs qui fonctionnent, visiblement selon les valeurs
intialisées .... :doubt:

Code: [Select]
void Irridium::clbkSetClassCaps (FILEHANDLE cfg)
{
MAX_MAIN_THRUST = 1064360.0;
MAX_HOVER_THRUST = 744975.0;
MAX_RCS_THRUST = 4500.0;
MAX_TANK1_CAPACITY = 35250.0;
MAX_TANK2_CAPACITY = 35250.0;
MAX_RCS_FUEL_CAPACITY = 2700.0;
EMPTY_MASS = 13000.0;
ISP = 3.3e4;
ISP_P0 = 3e4;

Scn.SavedVariable("ISP_AIR", &ISP);
Scn.SavedVariable("ISP_VACCUM", &ISP_P0);
Scn.SavedVariable("MAIN_THRUST", &MAX_MAIN_THRUST);
Scn.SavedVariable("IONIC_THRUST", &MAX_HOVER_THRUST);
Scn.SavedVariable("RCS_THRUST", &MAX_RCS_THRUST);
Scn.SavedVariable("MAX_TANK1", &MAX_TANK1_CAPACITY);
Scn.SavedVariable("MAX_TANK2", &MAX_TANK2_CAPACITY);
Scn.SavedVariable("MAX_RCS_FUEL", &MAX_RCS_FUEL_CAPACITY);
Scn.SavedVariable("EMPTY_MASS", &EMPTY_MASS);

ph_main = CreatePropellantResource (MAX_TANK1_CAPACITY + MAX_TANK2_CAPACITY);
etc ... etc ...

Et je suis sûr de mon coup car quand je met ça dans classcap au moment de la première initialisation,
je n'ai effectivemment ni moteurs ni réservoirs.

Code: [Select]
void Irridium::clbkSetClassCaps (FILEHANDLE cfg)
{
MAX_MAIN_THRUST = 0.0;
MAX_HOVER_THRUST = 0.0;
MAX_RCS_THRUST = 0.0;
MAX_TANK1_CAPACITY = 0.0;
MAX_TANK2_CAPACITY = 0.0;
MAX_RCS_FUEL_CAPACITY = 0.0;
EMPTY_MASS = 130000.0;
ISP = 0;
ISP_P0 = 0;

Le scénario est donc superbement ignoré !


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #4 - 04 October 2007, 01:56:17
Quote
DanSteph a écrit:
Au chargement du scenario tu redefini tes moteurs après le chargement des
variables éventuellement changée.

Donc dans clbkRestoreBidule ;)

Y a des fonctions pour ajuster les moteurs les tank sans devoir tout detruire/recreer.

Quote
picto a écrit:
Le scénario est donc superbement ignoré !

Ben non,les variables sont bien chargée mais les moteurs vont pas changer comme par miracles ;)

double MaxThrust=10000;
SetMaxThrust(MaxThrust)

Si tu met MaxThrust maintenant à 10000000 le moteur va pas broncher... c'est juste une variable.
Faut refaire un SetMaxThrust(MaxThrust)


Dan



Message modifié ( 04-10-2007 02:02 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #5 - 04 October 2007, 02:24:37
Tu veux dire dans cette fonction ?
Je suis un peu largué sur ce coup là :sick:
C'est comme si ces variables ne suivaient pas le même chemin que n'importe quelle autre.
Ce qui m'embrouille le plus, c'est que quand je suis le code, je me retrouve bien avec une
variable lue sur le scenario juste avant  de créer thrusters et autres bidules ... :wonder:

Code: [Select]
// --------------------------------------------------------------
// Read status from scenario file
// --------------------------------------------------------------
void Irridium::clbkLoadStateEx (FILEHANDLE scn, void *vs)
{
char *line;
while (oapiReadScenario_nextline (scn, line))
{
if(Scn.LoadScenario(line)==TRUE||Crew.LoadAllMembersFromOrbiterScenario(line)==TRUE)
continue;
ParseScenarioLineEx (line, vs); // unrecognised option
}
}



Message modifié ( 04-10-2007 02:35 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #6 - 04 October 2007, 02:48:52
clbkSetClassCap est executée AVANT clbkLoadStateEx
clbkLoadStateEx n'est appellée QUE si on lis un scenario (donc pas en cas de création par scn editor)


Code: [Select]
void Irridium::clbkLoadStateEx (FILEHANDLE scn, void *vs)
{
char *line;
while (oapiReadScenario_nextline (scn, line))
{
if(Scn.LoadScenario(line)==TRUE||Crew.LoadAllMembersFromOrbiterScenario(line)==TRUE)
continue;
ParseScenarioLineEx (line, vs); // unrecognised option
}

// a partir d'ici toutes tes variables on été lue depuis le scenario
// C'est le moment de proceder aux initialisations qui dépendent des scn

// Par exemple (pseudo code)
MAX_MAIN_THRUST=min(30000,max(MAX_MAIN_THRUST,10000)); // limitation caca du scn
SetMaxThrust(MAX_MAIN_THRUST); // reglage moteur , tank etc etc

}



Message modifié ( 04-10-2007 02:50 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #7 - 04 October 2007, 03:04:43
Oki ....

Je viens de comprendre.
Comme quoi .... quelquefois on fait des trucs qui fonctionnent mais en ayant eu un mauvais raisonnement.
Et ben, je crois que je vais avoir encore un sérieux ménage à faire dans le code! :sick:

Par exemple pour le panel, je fais un init dans class cap

InitialiseDiodeAA(DIODE_ELECTRICAL_PANO_SOLAIRE_AA,235, 335, XdiodeBmp, YdiodeBmp,Eteint, Panel1);

Puis un save variable toujours dans class cap

Scn.SavedVariable(id, &DiodeAA[id - FIN_DIODE_SIMPLE - FIN_DIODE_A ].Etat);

Et pouf, je retrouve ma diode allumée si j'ai quitté Orbiter avec cette diode allumée.
Mais l'analyse que j'avais fait était que c'était parce que c'était en dessous dans class cap.
Ce qui est faux donc .... le coup de bol que j'ai eu c'est que InitPanel se fait après Load scenario :sick:

Mais j'ai pris cette manie de penser que de faire la sauvegarde SOUS l'initialisation suffisait.



Message modifié ( 04-10-2007 03:05 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #8 - 04 October 2007, 13:16:59
Je viens de comprendre pourquoi j'étais obligé de faire certaines initialisations
à la première image de post step aussi du coup :pfff:
C'est assez chouette toutes ces fonction spéciales qui sont mises à notre disposition sur les moteurs aussi.
Dans le genre void   IncThrusterLevel (THRUSTER_HANDLE th, double dlevel) const; (single time step )
Je comprend aussi pourquoi tu dis que Martin à pensé à faire une SDK riche .... il est vrai qu'en fouillant un
peu c'est hallucinant de voir la quantité de possibilités qui nous sont offertes.



Message modifié ( 04-10-2007 13:29 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #9 - 04 October 2007, 14:18:13
attention quand même, après clbkLoadStateEx le status des modèles d'orbiter *pour certains* rare
truc n'est pas fini d'initialiser. Par exemple impossible d'obtenir un handle vers un autre vessel depuis
clbkLoadStateEx c'est pour ca que le first_step_init est utile. Sinon pour les animations,moteurs,
fuel et tout ca peut etre fait à la fin de clbkLoadStateEx

A++

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #10 - 04 October 2007, 15:49:22

Ouais .... ben c'est pas gagné ces histoires de moteurs ... :sick:

C'est n'importe quoi pour le moment !
Je ne comprend rien à toutes ces fonctions différentes ...
Elles ont presque le même nom ... certaines sont sans effet ou redondantes ...

Comme rien ne fonctionne après lecture du scénario, j'ai bien envie de tout
recopier bêtement à partir de class cap  pour ce qui concerne la création des
ressources moteurs fuel ISP

Bref ... c'est  pas très intéressant et en plus ça mââârche pââââ !
Je m'appelle pas Von Braun quoi! :pfff:


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #11 - 04 October 2007, 15:55:00
Crunch Crunch Crunch *machonne le boulot*

Pris du frelonIX code fait a l'arrache, vite fait... si ca peu te donner quelques idée.

A la fin de clbkLoadStateEx :

Code: [Select]
PB_ISP_LOADED=max(500,min(800000,PB_ISP_LOADED));
if(PB_ISP_LOADED!=(int)PB_ISP)
{
DWORD ThrusterNbr=GetThrusterCount();
DWORD i;
for(i=0;i<ThrusterNbr;i++)
{
THRUSTER_HANDLE hThrust=GetThrusterHandleByIndex(i);
SetThrusterIsp(hThrust,PB_ISP_LOADED,PB_ISP_LOADED);
}
}

PB_MAXMAINTH_LOADED=max(10000,min(200000,PB_MAXMAINTH_LOADED));
if(PB_MAXMAINTH_LOADED!=(int)PB_MAXMAINTH)
{
SetThrusterMax0 (th_main,PB_MAXMAINTH_LOADED);
SetThrusterMax0 (th_hover,PB_MAXMAINTH_LOADED);
}

A++

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #12 - 04 October 2007, 15:57:21
Note que le seul avantage de faire tout ca externe c'est si tu veux qu'un "beta testeur" (Pagir ? :) )
te "mette au point" les bonnes valeurs de poussée et autre... comme cela il a pas besoin de
toucher le code et peu faire ses essais lui-même.

Sinon ca sert a rien, personne tripote jamais ces valeurs pratiquement
(ou quelques types seulement)

Donc pour 1.0 perte de temps à part le gag du la "mise au point externe"

A++

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #13 - 04 October 2007, 16:09:38
Quote
"mise au point externe""beta testeur" (Pagir ?  ):)
Vi ... c'est pour ça ... mais pour l'instant le gain de temps .... ben :badsmile:
Vi ... pi JLuc .... pi Sirius aussi  ....

Comme ça, on va pouvoir faire des tableaux .... :pfff:
Remarque, avec des pilotes c'est plutôt intéressant ...

Thanks pour l'indication ...
Je crains de n'avoir pas tout compris vu ce que je faisais .... :lol:
Avec ça sur le scenario

  ISP 30000.00
  MAIN_THRUST 2128720.00
  IONIC_THRUST 1489950.00
  MAX_FUEL 71500.00
  EMPTY_MASS 130000.00


Et ça dans le loadstateex

   ISP_P0 = ISP;
   MAX_TANK1_CAPACITY=MAX_TANK2_CAPACITY=(MAX_FUEL-MAX_RCS_FUEL_CAPACITY)/2;
   SetEmptyMass (EMPTY_MASS);
   SetMaxFuelMass (MAX_FUEL);
   SetISP (ISP);
   SetMaxThrust (ENGINE_MAIN, MAX_MAIN_THRUST);
   SetMaxThrust (ENGINE_HOVER, MAX_HOVER_THRUST);
   ph_main = CreatePropellantResource (MAX_TANK1_CAPACITY + MAX_TANK2_CAPACITY);
   ph_rcs  = CreatePropellantResource (MAX_RCS_FUEL_CAPACITY);
   Data.dFuelMass=GetPropellantMass(ph_main);



Message modifié ( 04-10-2007 16:14 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #14 - 04 October 2007, 16:32:46
Mais quand même c'est pas facile de s'y retrouver.
En y repensant, ce n'était pas complètement débile ce que je faisais !

SetMaxThrust
comparé à
SetThrusterMax0
SetISP
comparé à
SetThrusterIsp

Quand je dis que c'est redondant ... c'est plutôt confusant en fait :pfff:
Pourquoi toute ces fonctions qui ont l'air de faire la même chose ?



Message modifié ( 04-10-2007 16:33 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #15 - 04 October 2007, 17:03:05
C'est la zone :sad:

Un scenario que je lance ...

ACTIVE_PROBE 0
ISP 30000.00
MAIN_THRUST 2128720.00
IONIC_THRUST 1489950.00
MAX_FUEL 71500.00
EMPTY_MASS 130000.00

Class Cap

   Scn.SavedVariable("ACTIVE_PROBE",   &iActiveProbe);   
   Scn.SavedVariable("ISP",               &LOADED_ISP);
   Scn.SavedVariable("MAIN_THRUST",         &MAX_MAIN_THRUST);
   Scn.SavedVariable("IONIC_THRUST",         &MAX_HOVER_THRUST);
   Scn.SavedVariable("MAX_FUEL",            &MAX_FUEL);
   Scn.SavedVariable("EMPTY_MASS",            &EMPTY_MASS);

Le Current State après avoir quitté Orbiter

  ACTIVE_PROBE 0
  MAIN_THRUST 2128720.00
  IONIC_THRUST 1489950.00
  MAX_FUEL 71500.00
  EMPTY_MASS 130000.00

Elle est passée ou la ligne ISP ? :doubt:
Et pourtant, la variable existe ... de toutes façons, sinon ça ne compilerait pas ...


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #16 - 04 October 2007, 18:23:01
Quote
picto a écrit:
Pourquoi toute ces fonctions qui ont l'air de faire la même chose ?

Ptete la doc pourrais donner une explication ? :)

pour l'ISP c'est bien une variable de classe double ?
Je sais pas...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #17 - 04 October 2007, 19:35:15
Oui c'est bien une double pourtant.
Je suis un peu naze ... on va se ressaisir ;)



Message modifié ( 04-10-2007 19:41 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #18 - 05 October 2007, 17:29:34

Je crois avoir identifié la source de mes problèmes de lecture.
Mais pas d'écriture sur le scenario par contre...

Dans ClassCap, sur le modèle du ShuttleA, tous les thrusters sont liés à une unique ISP.
Et je vois que dans LoadStateExt tu redemandes un Handle juste avant d'y intégrer l'IsP loaded.

C'est bizarre d'ailleurs ... pourquoi un handle créé dans class cap n'est il pas dispo ensuite
n'importe ou dans le code ?

Si j'ai ça dans le header de classe pourquoi faut il en redemander un dans LoadStateExt ?

PROPELLANT_HANDLE ph_main, ph_rcs;

Comme ceci ...
      DWORD ThrusterNbr=GetThrusterCount();
      DWORD i;
      for(i=0;i<ThrusterNbr;i++)
      {
         THRUSTER_HANDLE hThrust=GetThrusterHandleByIndex(i);
         SetThrusterIsp(hThrust,PB_ISP_LOADED,PB_ISP_LOADED);
      }
L'avantage, je le vois, c'est qu'en cinq lignes je redéfinis TOUS les thrusters y compris les RCS
mais sinon ?


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #19 - 05 October 2007, 19:42:29
Quote
picto a écrit:
C'est bizarre d'ailleurs ... pourquoi un handle créé dans class cap n'est il pas dispo ensuite
n'importe ou dans le code ?
Si j'ai ça dans le header de classe pourquoi faut il en redemander un dans LoadStateExt ?

Bien revoir le scope des variables... variable declarée dans fonction=non dispo ailleurs,
j'avais deux solutions pour ce cas:

1-rendre les handle des thruster comme variable de classe. (accessible partout)
2-rechoper les handles des thruster par un autre moyen.

Dan


Offline JLuc

  • Sr. Member
  • ****
  • Posts: 341
  • Karma: 0
Reply #20 - 05 October 2007, 19:59:35
Picto,

Tu sais, je ne sais pas que piloter des vaisseaux de la mort qui tue! Si je pouvais modifier quelquechose dans un
config.cfg, c'est à ma portée. Mais, .... ça va te faire du boulot!

JLuc


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #21 - 05 October 2007, 20:22:28
Je me doute bien vu comment tu maitrises cet aspect des
engins Orbiter .... mais as tu regardé le config d'Irridium ?
C'est plutôt basique .... tout est dans la DLL.  :sick:

C'est pour ça que je suis bien embêté sur ce coup là.

Je pensais vraiment gagner du temps en en passant par une
lecture scenario, et puis, j'imagine qu'une lecture de config par
la DLL nécessite autant de boulot non ?

Mais je vois ou tu veux en venir. Pour les tests tu voudrais faire passer
irridium en SP3, PPPPPfffff .... franchement, ça ne m'emballe pas ...

Autre problème,  j'ai vraiment besoin de ces variables pour faire d'autres
choses dans le code.Affichages displays, manettes des gazs et compagnie.



Message modifié ( 05-10-2007 20:49 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #22 - 05 October 2007, 23:49:15
Peu de méthode .... beaucoup de mémoire :badsmile:

Il me semblait bien avoir lu un truc sur les fichiers configs dans les tutos de Dan :)
Ceci pourrait il être une solution pour se créer un fichier de config type SP3 utilisable
par une équipe de beta testeurs en mettant toutes les variables dans une structure ?
Peut être en rajoutant une instruction dans la fonction pour ajouter une ID devant ou
un nom clair comme sur les fichiers scenarios d'Orbiter ... :wonder:

Sauve la structure config:

Code: [Select]
FILE * stream;
stream  = fopen( "Sound\\DeltaGliderIV\\config.cfg", "wb" );
{
fwrite( &Cfg, sizeof( Cfg ), 1, stream );
fclose( stream );
}



ouvre le fichier et charge la structure config:

Code: [Select]
FILE * stream;
stream  = fopen( "Sound\\DeltaGliderIV\\config.cfg", "rb" );
if(stream)
{
fread( &Cfg, sizeof( Cfg ), 1, stream );
fclose( stream );
}


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #23 - 06 October 2007, 00:33:05
Pas vraiment, la structure requiere d'avoir les données alignées au byte pres sinon ca merde.
En claire si tu laisse quelqu'un ecrire a la mano dans ton fichier et qu'il mets même un espace
en plus c'est foupoudav.

pour un fichier "humain" il faut un décodage & controle fin des données du fichier.
La structure c'est utile en "private", ie: TU sauve,TU charge et personne tripote. ;)

A++

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #24 - 06 October 2007, 00:58:52
Bref .... c'est pas ma période :sad:
Idées foireuses sur idées foireuses ! :badsmile:



Message modifié ( 06-10-2007 01:07 )

Pic