0 Members and 1 Guest are viewing this topic.
Papyref a écrit:static UINT GrpMeshTrappeDroit[2] = {72,73};TrappeDroitOuvre = new MGROUP_ROTATE (0, GrpMeshTrappeDroit,2, _V(-7,-7,0), _V(0,0,1), float(-0.7*PI));Pour définir ce que doit faire le GrpMesh et de quoi il est constitué.Je pense que dans ce cas par exemple un petit tableau de données est constitué avec les deux meshes cités en première ligne et que ces données vont être utilisées pour construire le groupe.
Papyref a écrit:Dans l'initialisation des variables de classe on écrit TrappeDroitOuvre =NULL; qui mets le pointeur à zéro.Que se passerait il si on ne mettait pas le pointeur à zéro ? Je ne vois pas de différence en testant l'animation !
if(cMonPointeur!=NULL) // passe seulement si pointeur non null{ ExecuteFonctionSensible(MonPointeur); // aucun risque de CTD}
void Hercule::clbkSaveState(FILEHANDLE scn){ char cbuf [256]; VESSEL2::clbkSaveState (scn); sprintf (cbuf," %d %0.4f",Porte_status,Porte_proc); oapiWriteScenario_string (scn,"PORTE", cbuf);}void Hercule::clbkLoadStateEx(FILEHANDLE scn, void *vs){ char *line; while (oapiReadScenario_nextline (scn, line)) { if (!_strnicmp (line, "PORTE", 5)) { sscanf (line+5, "%d %0.4f", &Porte_status,&Porte_proc); } else { ParseScenarioLineEx (line, vs); } } SetAnimation (uAnim_Porte , Porte_proc);}
Si je sauvegarde avec les portes fermées j'obtiens dans le scénario PORTE 0 0.0000 et si je sauvegarde portes ouvertes j'obtiens 3 1.0000
Il me semble qu'une animation étant caractérisée par son status et sa procédure, ce sont ces paramètres que je dois sauvegarder dans le scénario.
Papyref a écrit:Mon SetAnimation est en clbkPostStep et je ne vois pas trop pourquoi il ne marcherait pas ?Le maitre aura peut être un avis. Je dois avoir oublié d'initialiser quelquechose
void MonAddon::clbkSetClassCaps (FILEHANDLE cfg){ //////////////////////////////////////////////////////////// // DEFINI LES VARIABLES A SAUVER/RESTORER // elle seront sauvées/resotrées automatiquement // dans clbkSaveState et clbkLoadStateEx //////////////////////////////////////////////////////////// Scn.InitClass(); // obligatoirement en premier // Variables compressée (utilisation normale) Scn.SavedVariable(0, &Porte_status); Scn.SavedVariable(1, &Porte_proc);
void MonAddon::clbkSetClassCaps (FILEHANDLE cfg){ //////////////////////////////////////////////////////////// // DEFINI LES VARIABLES A SAUVER/RESTORER // elle seront sauvées/resotrées automatiquement // dans clbkSaveState et clbkLoadStateEx //////////////////////////////////////////////////////////// Scn.InitClass(); // obligatoirement en premier Scn.SavedVariable("DOOR_STATUS", &Porte_status); Scn.SavedVariable("DOOR_STATE", &Porte_proc);
// --------------------------------------------------------------// Read status from scenario file// --------------------------------------------------------------void ShuttlePB::clbkLoadStateEx (FILEHANDLE scn, void *vs){ char *line; while (oapiReadScenario_nextline (scn, line)) { if(Scn.LoadScenario(line)==TRUE) continue; ParseScenarioLineEx (line, vs); // unrecognised option - pass to Orbiter's generic parser } // ici les variables sont toutes restorées // remet les portes à la bonne position SetAnimation (uAnim_Porte , Porte_proc);}
Classe SaveRestore à telecharger ici:http://orbiter.dansteph.com/forum/index.php?topic=6381.msg96441#msg96441
//==================================================== //ANIMATIONS AVEC PARENT //==================================================== ANIMATIONCOMPONENT_HANDLE parent; //*** Jambes et patins du train static UINT GrpMeshJambeGauche[4] = {11,12,15,16}; JambeGaucheOuvre = new MGROUP_TRANSLATE (0, GrpMeshJambeGauche,4, _V(1.5,-3.5,0)); static UINT GrpMeshPatinGauche[3] = {20,59,61}; PatinGaucheOuvre = new MGROUP_ROTATE (0, GrpMeshPatinGauche,3, _V(4.5,-4.9,0), _V(0,0,1), float(-0.166*PI)); uAnim_JambeGauche = CreateAnimation (0.0); parent = AddAnimationComponent (uAnim_JambeGauche, 0, 1,JambeGaucheOuvre ); uAnim_PatinGauche = CreateAnimation (0.0); AddAnimationComponent (uAnim_PatinGauche,0.2,1,PatinGaucheOuvre,parent); static UINT GrpMeshJambeDroit[4] = {13,14,17,18}; JambeDroitOuvre = new MGROUP_TRANSLATE (0, GrpMeshJambeDroit,4, _V(-1.5,-3.5,0)); static UINT GrpMeshPatinDroit[3] = {19,58,60}; PatinDroitOuvre = new MGROUP_ROTATE (0, GrpMeshPatinDroit,3, _V(-4.5,-4.9,0), _V(0,0,1), float(0.166*PI)); uAnim_JambeDroit = CreateAnimation (0.0); parent = AddAnimationComponent (uAnim_JambeDroit, 0, 1,JambeDroitOuvre ); uAnim_PatinDroit = CreateAnimation (0.0); AddAnimationComponent (uAnim_PatinDroit,0.2,1,PatinDroitOuvre,parent);} //*** FIN ANIMATION PARENT
void Hercule::clbkSetClassCaps (FILEHANDLE cfg){ Scn.InitClass();
Papyref a écrit:1>f:\orbiter\orbitersdk\samples\herculebidon\clbksetclasscap.cpp(13) : error C2228: la partie gauche de '.InitClass' doit avoir un class/struct/union1> le type est ''unknown-type''1>Le journal de génération a été enregistré à l'emplacement "file://f:\Orbiter\Orbitersdk\samples\HerculeBidon\Debug\BuildLog.htm"
#include "orbitersdk.h"#include "SaveRestoreScenario.h" // header du SDK class Hercule:public VESSEL2 {public: Hercule(OBJHANDLE hVessel, int flightmodel): VESSEL2 (hVessel, flightmodel) {} SaveRestoreScenario Scn; // handle de la classe .....}
Function(){}
Function(void){}
void Function(void){}
int Function(void){return 1;}
if(Tata) CaMarche();else CaMarcheAussi2();
if(Tata) CaMarche(); MaisPlusIci();else CaMarcheAussi2();
// voila du rustique concu pour les intempériesif(Tata){ CaMarche();}else{ CaMarcheAussi2(); EtIciAussi();}