0 Members and 1 Guest are viewing this topic.
DagoO a écrit:J'ai une question moi (il en faut bien..)En commençant le projet, tu t'attendais à 100% à le finir, même si un gros problème se serais présenté (réparable de toute façon) ou il y aurait eu des chances qu'orbiter ne puisse pas boire ton idée et donc impossibilité de faire l'add-on?Autrement dit : peut-on tout faire en programmant pour orbiter?
Bibi Uncle a écrit:QuoteDagoO a écrit:J'ai une question moi (il en faut bien..)En commençant le projet, tu t'attendais à 100% à le finir, même si un gros problème se serais présenté (réparable de toute façon) ou il y aurait eu des chances qu'orbiter ne puisse pas boire ton idée et donc impossibilité de faire l'add-on?Autrement dit : peut-on tout faire en programmant pour orbiter?Moi je dirais que non.
vous affolez pas, je suis tombé sur un os qui va être difficile à résoudre. J'ai intégré hier l'actualisation et la synchronisation des autres vaisseaux du scénario. J'ai pris comme à mon habitude les éléments orbitaux comme référence.Hélas, ils ne sont pas assez précis pour permettre un docking. Pour exemple j'ai tenté un rendez-vous avec l'ISS. L'erreur de précision de la position de notre vaisseau ajouté à l'erreur de l'ISS permet tout juste de faire une approche à une quarantaine de kilomètres.
virtual void oapi::Module::clbkVesselJump ( OBJHANDLE hVessel ) Discontinuous vessel repositioning notification. Sent to modules after a vessel position has been set explicitly (rather than via continuous state propagation. This callback can be used to force a refresh of parameters that depend on vessel position.
using namespace oapi; // ne pas oublier sinon le compilateur ne la verra pas( FXMODULE est le nom que j'ai choisi , tu le remplaces par celui que tu préfères ...)class FXMODULE: public Module{public: FXMODULE (HINSTANCE hDLL); //mon constructeur ~FXMODULE(); //mon desstructeur void clbkSimulationEnd();// surcharge des méthodes void clbkSimulationStart (RenderMode mode);// surcharge des méthodes//tu pourrais déclarer :// void clbkVesselJump ( OBJHANDLE hVessel ) //dessous c'est mon code qui n'est pas utile autrement que comme démonstration pour toi char* GetDate(); bool CreerFichier(); bool DossExist(char* filepath); bool chargefichier(char *filepath);//ouverture du fichier void writeLine(FILE* file,char* line); void writeLog(char* line); bool simEnd; CITYDESIGNERFILE baseFile; PROXBASE BaseLaPlusProche; FILE* logFile; bool fileIsOpen();//informe de l'état du fichier };// qui cohabite avec le MFDclass MFDMeshPoser: public MFD {public: double Altitude ;//ajout de spock VESSEL *MeshBuilder;//le nom du vaisseau MFDMeshPoser (DWORD w, DWORD h, VESSEL *vessel); ~MFDMeshPoser ();
/ là c'est mon constructeurFXMODULE::FXMODULE(HINSTANCE hDLL):Module(hDLL){//initialisationmemset(&baseFile,0,sizeof(CITYDESIGNERFILE)); baseFile.filename="vide";}// et là la fonction qui t'interressera je croisFXMODULE::clbkVesselJump( OBJHANDLE hVessel ){// tu sauras quoi faire je pense avec les OBJHANDLE .}
...#define STRICT#define ORBITER_MODULE#include "multiplay.h"#include "windows.h"#include "orbitersdk.h"#include "orbiterapi.h"#include "MFDTemplate.h" // c'est là qu'est ma déclaration de FXMODULE#include "resource.h"FXMODULE * moduleFx=NULL ; //déclaration portée globaleDLLCLBK void opcDLLInit (HINSTANCE hDLL){ hSpockDLL=hDLL; static char *name = "City Designer"; // MFD mode name MFDMODESPEC spec; spec.name = name; spec.key = OAPI_KEY_T; // MFD mode selection key spec.msgproc = MFDMeshPoser::MsgProc; // MFD mode callback function // Register the new MFD mode with Orbiter g_MFDmode = oapiRegisterMFDMode(spec); moduleFx=new FXMODULE(hSpockDLL); // LA CONSTRUCTION oapiRegisterModule(moduleFx) ; }Maintenant , à chaque fois qu'un vaisseau est déplacé d'une manière explicite , ton code s'execute .MODULE fournit d'autres fonctions qui te permettent de controler chaque frame , telle que :[quote]virtual void oapi::Module::clbkPreStep ( double simt, double simdt, double mjd ) [virtual] Time step notification before state update. Called at each time step of the simulation, before the state is updated to the current simulation time. This function is only called when the "physical" state of the simulation is propagated in time. clbkPreStep is not called while the simulation is paused, even if the user moves the camera. [/quote]
Mais c'est la précision qui me fait défaut.
[b]DLLCLBK void opcPreStep[/b] ( double simt, double simdt, double mjd ) Time step notification before state update. Called at each time step of the simulation, before the state is updated to the current simulation time. This function is only called when the "physical" state of the simulation is propagated in time. opcPreStep is not called while the simulation is paused, even if the user moves the camera. [b]Deprecated[/b]:This function has been[color=red] replaced by [b]oapi::Module::clbkPreStep. [/b][/color]Parameters: simt simulation time after the currently processed step [s] simdt length of the currently processed step [s] mjd simulation time afte the currently processed step in Modified Julian Date format [days] Note:Plugins should no longer implement this function. Instead they should create an instance of a class derived from oapi::Module during InitModule that overloads the oapi::Module::clbkPreStep method, and register it with oapiRegisterModule. opcPreStep is called by Orbiter only if no instance of oapi::Module is created and registered during InitModule, or if a registered module does not overload the oapi::Module::clbkPreStep method
Mais je vais voir ton idée, elle peut-être intéressante...
oapi::Module::clbkPreStep.
pilote334 a écrit:Bon ben ça y est je fous le nez dedans...Yves