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++] Classe SaveRestoreScenario  (Read 1844 times)

0 Members and 1 Guest are viewing this topic.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
14 September 2007, 23:01:24
J'ai un petit problème avec les variables qui concernent les animes.

Dans la fonction ClassCap je fais le save par la classe avec des variables compressées.
Les variables sont bien écrites sur le scenario mais quand je relance le current state ...
Je me retrouve avec un conflit entre la nécessité de faire une
initialisation dans class cap des variables d'animes et le save restore ...
La seule façon que j'ai trouvé de pouvoir jouer une anim en fonction du
scenario est de supprimer les initialisations ..

Ce qui est un peu embêtant si le vessel est créé par Scenario Editeur :grat: :grat: :wonder:
J'ai essayé de lancer un scenario sans variables sauvées... effectivemment, plus une anim ne fonctionne du coup ...

Quand je  regarde les exemples de la SDK, je m'aperçois que les animes sont jouées dans loadscenario normal.
Puis initialisées dans class cap .... pas de conflit dans ce cas ...

Quand je demande  de continuer les animations sauvées sur un scenario dans le callback postcreation elles restent figées dans leur état de sauvegarde .... bref ... c'est la m.... :sad:



Message modifié ( 14-09-2007 23:59 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #1 - 15 September 2007, 00:12:22

C'est reparti pour du monologue :)

J'ai trouvé ... j'ai pris une sale manie ... c'est d'initialiser par défaut  toutes mes variables
dans une boucle taggée au début de post step à la place de classcap ....
En virant les initialisations de cet endroit puis en les mettant juste avant le saverestore
dans classcap, pas de problèmes ... tout fonctionne nickel ...

N'empêche, pas pu m'empêcher de penser, à priori, que c'était A CAUSE de save restore :badsmile:


Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #2 - 15 September 2007, 01:15:53
Je continue ...
Dans la classe save restore rien n'est prévu pour les variables de type bool ... :sad:
J'ai donc ajouté les fonctions nécessaires en copiant celles qui existent, mais deux choses ...

J'ai cet avertissement à la compile ...
warning C4800: 'int' : valeur forcée à la valeur booléenne 'true' ou 'false'
(avertissement sur les performances)

         //bool
         if(PointerNamedVoid!=NULL&&PointerNamedType==TYPE_BOOL)
         {
            *(bool*)PointerNamedVoid=atoi(LigneSauveRestore);
         }



Et je ne suis pas sur de la justesse de cette écriture ...
c'est le %i sur une valeur booléenne dont je ne suis pas sûr ...

         sprintf(Temp,"%i  §%i,",I,*(bool *)PointerVoid);

Sinon, bravo Dan, :wor: , c'est génial cette méthode, c'est tellement simple de sauvegarder avec cette méthode que ça donne envie de sauver la moindre variable pour retrouver son vaisseau dans un  état strictement identique à celui dans lequel on l'avait laissé à la session précédente au poil de c... du Capitaine près ! :)
Ce que je suis d'ailleurs en train de faire ;)

Un seul petit problème, les MFDs ne sont pas sauvegardés si on quitte Orbiter en étant focussé sur le panel du bas.
Bizarre .... quand le focus est sur le panel central ou en vue extérieure, ils sont bien sauvegardés ... Mais je pense que c'est un problème d'Orbiter ...



Message modifié ( 15-09-2007 01:43 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #3 - 15 September 2007, 03:41:19
Quote
picto a écrit:
Dans la classe save restore rien n'est prévu pour les variables de type bool ... :sad:

BOOL en fait c'est des int, d'ailleur clique droit tu trouve un truc du style:

typedef int                 BOOL;


Essaie comme cela, c'est atoi qui renvoie int qui dois couiller:

Code: [Select]
//bool
if(PointerNamedVoid[I]!=NULL&&PointerNamedType[I]==TYPE_BOOL)
{
*(bool*)PointerNamedVoid[I]=(bool)atoi(LigneSauveRestore);
}

C'est pratique hein ? :)

Dire que le DGIV n'en profite même pas :pfff: ... comme quoi on a des idées quand on a
pas sois-même le "nez dans le guidon" ;)

Dan



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

« Last Edit: 15 September 2007, 04:59:15 by DanSteph »

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #4 - 15 September 2007, 04:21:19
C'est pratique .... tu m'étonnes ... c'est génialement pratique oui !
Pas de bol pour le DG4 ... mais j'imagine que ça va servir à tout ce qui doit suivre ;)

Quand je vois comment c'est chiant par la méthode habituelle sur les exemples de la SDK ...
Compter les caractères ... reporter ... etc .... :doubt:
Je dois en être à 300 variables sauvées et ça m'a pris 40 ou 50 lignes de code.

J'ai toujours les deux avertissements, mais ce n'est pas très grave ... ça fonctionne quand même ...

Le premier sur l'écriture que tu viens de mettre sur le forum et la seconde sur cette ligne là ...

      //bool
      if(PointerVoid[Index]!=NULL&&PointerType[Index]==TYPE_BOOL)
      {
         *(bool*)PointerVoid[Index]=atoi(PutZero+1);
      }



C'est la même chose en fin de compte ... mais en fait, je ferais mieux d'arrêter d'utiliser des booléennes.

Un truc que je fais de plus en plus souvent est de définir des mots clés ... genre Ouvert, Ferme, 0,1
utilisés sur des variables genre porte ...porte ouvert ... porte ferme ... c'est aussi lisible voir plus que
porte true ou porte false .... ;)

Mais bon ... ce qui est fait est fait ....


« Last Edit: 15 September 2007, 04:59:15 by picto »
Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #5 - 15 September 2007, 04:51:27
Bizzare ca ca devrait marcher .. :wonder:

Code: [Select]
picto a écrit:

//bool
if(PointerVoid[Index]!=NULL&&PointerType[Index]==TYPE_BOOL)
{
*(bool*)PointerVoid[Index]= (bool)atoi(PutZero+1);
}



Message modifié ( 15-09-2007 04:51 )

« Last Edit: 15 September 2007, 04:59:15 by DanSteph »

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #6 - 15 September 2007, 04:59:15

Ce ne sont que deux warnings ....
Et au pire je convertis mes variables en amont et les sauve en int ;)


« Last Edit: 15 September 2007, 04:59:15 by picto »
Pic