Forum Orbiter Italia
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.


CLICCA QUI PER SCARICARE ORBITER 2016
 
IndiceIndice  LinkLink  Ultime immaginiUltime immagini  CercaCerca  RegistratiRegistrati  Accedi  
Accedi
Nome utente:
Password:
Connessione automatica: 
:: Ho dimenticato la password
FOI è sui social



Parole chiave
texture IMFD TransX Rientro autofcs 2025 Eridanus ummu Shuttle modellino OrbiterSound terra Fausto 2024 DGIV apollo tastiera d3d9 AMSO Nassp 2022 Antares tutorial SPACE jarvis comandi
Siti amici
AstronautiNEWS

ForumAstronautico

Orbiter Forum

Tuttovola.org
Ultimi argomenti attivi
» Progetto: NOVA HLV
[C++] Multistage2 bug carburante EmptyDa Andrew Mer 12 Giu 2024 - 10:19

» Buona Pasqua 2024!
[C++] Multistage2 bug carburante EmptyDa Ripley Mar 2 Apr 2024 - 22:13

» Premiato il team del satellite italiano AGILE
[C++] Multistage2 bug carburante EmptyDa Andrew Mer 21 Feb 2024 - 17:17

» Space Shuttle Atlantis al KSC Visitor Complex
[C++] Multistage2 bug carburante EmptyDa Andrew Gio 22 Giu 2023 - 11:46

» Primo lancio di Starship: successo o fallimento?
[C++] Multistage2 bug carburante EmptyDa Andrew Ven 5 Mag 2023 - 18:19

» Rendere L'audio di Orbiter Sound e XR Sound indipendenti senza capogiri!
[C++] Multistage2 bug carburante EmptyDa Kappa4401 Mer 5 Apr 2023 - 13:59

» Kappa4401 Orbiter's Tour
[C++] Multistage2 bug carburante EmptyDa Kappa4401 Mer 29 Mar 2023 - 13:59

» OpenOrbiter BETA
[C++] Multistage2 bug carburante EmptyDa Ripley Mer 29 Mar 2023 - 0:39

» Missione "Robin Sunrise"
[C++] Multistage2 bug carburante EmptyDa Andrew Mar 20 Dic 2022 - 8:56

» Errore Orbiter "Initialising 3D environment"
[C++] Multistage2 bug carburante EmptyDa Ripley Mar 13 Dic 2022 - 16:26

» Artemis I
[C++] Multistage2 bug carburante EmptyDa Ripley Mar 22 Nov 2022 - 16:16

» Sviluppo della Flotta XR Open Source
[C++] Multistage2 bug carburante EmptyDa Ripley Lun 14 Nov 2022 - 15:24

» D3D9 - il client grafico di Jarmonik
[C++] Multistage2 bug carburante EmptyDa Ripley Lun 31 Ott 2022 - 12:28

» Ci ha lasciati Jim McDivitt
[C++] Multistage2 bug carburante EmptyDa Pete Conrad Lun 17 Ott 2022 - 21:19

» "Starlab" space station
[C++] Multistage2 bug carburante EmptyDa Pete Conrad Gio 6 Ott 2022 - 15:12

» Ciao a tutti
[C++] Multistage2 bug carburante EmptyDa Andrew Lun 5 Set 2022 - 22:01

» "Saturn X" concept
[C++] Multistage2 bug carburante EmptyDa Andrew Mer 10 Ago 2022 - 0:30

» Avere 2 versioni della stessa base
[C++] Multistage2 bug carburante EmptyDa Ripley Mar 28 Giu 2022 - 17:49

» Costruiranno uno spazioporto per suborbitali a Taranto?
[C++] Multistage2 bug carburante EmptyDa Francy03 Sab 18 Giu 2022 - 20:04

» Missione Minerva
[C++] Multistage2 bug carburante EmptyDa Ripley Gio 16 Giu 2022 - 23:06

» Ciao a tutti da Francy
[C++] Multistage2 bug carburante EmptyDa Ripley Gio 16 Giu 2022 - 11:59

» Orbit Hangar - nuovo indirizzo
[C++] Multistage2 bug carburante EmptyDa Ripley Lun 13 Giu 2022 - 17:46

» Ruote dei Delta Glider e Simili mezze sottoterra!
[C++] Multistage2 bug carburante EmptyDa Kappa4401 Ven 11 Mar 2022 - 20:22

» E' morto Tito Stagno
[C++] Multistage2 bug carburante EmptyDa Pete Conrad Mar 1 Feb 2022 - 20:41

» Crash di Orbiter 2016 con gli astronauti!
[C++] Multistage2 bug carburante EmptyDa Ripley Mar 4 Gen 2022 - 14:03

Argomenti simili

 

 [C++] Multistage2 bug carburante

Andare in basso 
2 partecipanti
AutoreMessaggio
ndudi
Add-on Developer
Add-on Developer
ndudi


Numero di messaggi : 450
Età : 40
Località : como
Data d'iscrizione : 13.06.11

[C++] Multistage2 bug carburante Empty
MessaggioTitolo: [C++] Multistage2 bug carburante   [C++] Multistage2 bug carburante EmptyGio 14 Feb 2013 - 20:27

Da qualche tempo sto provando ad addentrarmi nel mondo dell'add-on developping in c++, e mi sto entusiasmando molto. Come molti principianti del genere sto familiarizzando con la nuova lingua partendo dalle sorgenti create con il comodo traduttore di artlav sc3->.dll.Come è noto questo convertitore presenta un fastidioso bug: i vascelli con esso creati, se lanciati con un vettore multistage (o jettisonati da una nave spacecraft), compaiono con i serbatoi vuoti.
Ho cercato su OF e ci sono varie risposte, ma tutte un pò vaghe, o comunque incomprensibili per un novellino del c++ come me, oltretutto un pò imbranato in inglese.
Tempo fà lessi in qualche post che qualcuno (forse il buon fred?) aveva trovato una semplice soluzione al problema, ovviamente in c++.
Mi chiedevo se qualcuno in grado di risolvere il baco volesse aiutare i meno esperti, magari condividendo le righe di codice che permettono di aggirarlo happy face
Grazie infinite in anticipo!
Torna in alto Andare in basso
fred18
Add-on Developer
Add-on Developer



Numero di messaggi : 950
Età : 41
Località : La Spezia
Data d'iscrizione : 04.01.12

[C++] Multistage2 bug carburante Empty
MessaggioTitolo: Re: [C++] Multistage2 bug carburante   [C++] Multistage2 bug carburante EmptyGio 14 Feb 2013 - 23:56

Ciao ndudi,

allora la funzione che ti può essere utile in questo caso è clbkPostCreation

quindi devi dichiararla nell'header (il file .h) (void nomedelvessel::clbkPostCreation()) che fare il rispettivo overload nel file .cpp.

ti consiglio di mettere all'inizio del file .cpp una riga di definizione per la massa di carburante. Ad esempio se la massa di carburante è 10 all'inizio del file .cpp (dopo #include "orbitersdk.h" per intenderci) scriverai:

#define FUELMASS 10

a questo punto nella funzione clbkSetClassCaps metterai (col nome di default del convertitore di artlav):

ph_h[0]=CreatePropellantResource(FUELMASS);

e poi quasi alla fine del file .cpp, prima della riga

DLLCLBK void InitModule(HINSTANCE hModule){}

metterai la funzione

void nomedelvessel::clbkPostCreation (){
SetFuelMass(FUELMASS);
}



Ecco questo metodo funziona sicuramente se il vessel è creato rilasciandolo dal multistage, l'unica cosa che mi pare non vada bene è che ogni volta che carichi lo scenario il tuo veicolo inizierà sempre lo scenario con il pieno di carburante.

non sono sicuro di questo, non mi ricordo più sorry bisogna provare.

Comunque nell'MT4 ho messo una variabile globale che cambia valore a seconda che la navetta sia appena stata creata o se la si stia caricando da un file di scenario. Però ora non ricordo più bene come funzionasse, domani ci dò un'occhiata e ti scrivo come ho fatto di preciso anche riguardo a questo!

spero di esserti stato d'aiuto! a domani

Torna in alto Andare in basso
fred18
Add-on Developer
Add-on Developer



Numero di messaggi : 950
Età : 41
Località : La Spezia
Data d'iscrizione : 04.01.12

[C++] Multistage2 bug carburante Empty
MessaggioTitolo: Re: [C++] Multistage2 bug carburante   [C++] Multistage2 bug carburante EmptyVen 15 Feb 2013 - 15:08

Allora ho dato un'occhiata al codice che avevo usato e come avevo fatto, direi che ci sono due modi che però utilizzano lo stesso identico sistema per risolvere l'ultima questione.

Riassumendo con calma:

- nel post precedente abbiamo impostato l'overload della funzione clbkPostCreation per far sì che alla creazione del veicolo nella simulazione esso abbia il pieno di carburante.

- rimane il problema che se carico uno scenario in cui il veicolo esiste già ed ha un certo quantitativo di carburante, la funzione precedente bypassa tutto quanto e riempie di nuovo completamente i serbatoi, cosa che probabilmente non ci va bene

quindi dobbiamo trovare un sistema per far sì che quando carico il veicolo, il programma "capisca" se lo sto creando ex-novo (quindi se lo rilascio dal multistage o da qualsiasi altro veicolo) o se lo sto caricando da uno scenario.

per fare ciò la cosa più intuitiva da fare è far cercare al modulo del veicolo qualcosa nel file scenario da cui viene eventualmente caricato, in modo che se lo trovasse saprà che è stato caricato appunto da un file scenario e dovrà lasciare i serbatoi pieni come questo indicava, se invece non trovasse nulla vorrà dire che il modulo è stato caricato durante la simulazione e quindi dovrà riempire i serbatoi.

come si fa? confused 2

Anzitutto per far cercare al modulo qualcosa nel file scenario bisogna che il modulo stesso al momento del salvataggio dello scenario vi lasci un traccia, una specie di briciola di pollicino, che poi potrà ritrovare.

il modo più "elegante" e formalmente corretto è quello che lasci una traccia apposita, immagino una voce nel file scenario che si chiama

LOADED 1

Per far sì che il modulo lo scriva nel file scenario dovremo impostare l'overload della funzione clbkSaveState, che diventerà quindi:

Codice:

void nomedelvessel::clbkSaveState(FILEHANDLE scn)
{
 SaveDefaultState(scn);
 
 char loadedtxt[256];


 sprintf(loadedtxt,"LOADED");
 oapiWriteScenario_int(scn,loadedtxt,1);
}


A questo punto bisogna impostare quello che deve succedere al momento della creazione del nostro vessel.

Imposteremo nel file .h una nuova variabile pubblica intera loaded, quindi scriveremo appunto nel file .h tra le variabili pubbliche int loaded; .

ora nel file .cpp dovremo modificare la funzione clbkLoadStateEx in modo che quando il modulo viene caricato assegni alla variabile intera loaded il valore che trova nel file scenario alla riga che dice appunto LOADED

per farlo scriveremo

Codice:

void nomedelvessel::clbkLoadStateEx(FILEHANDLE scn,void *vs)
{
 char *line;
 int i,n;
 
 while(oapiReadScenario_nextline(scn,line)){
if(!strnicmp(line,"LOADED",6)){
sscanf(line+6,"%i",&loaded);
}else{
  ParseScenarioLineEx(line,vs);
  }

ovviamente se ho altre variabili da caricare bisogna impostare correttamente gli if e gli else if.

A questo punto il modulo ha la variabile intera loaded che assume il valore 1 se il modulo è caricato da un file scenario (precedentemente salvato, se si crea a mano bisogna ricordarsi di aggiungere la riga LOADED 1), assume invece un altro valore che ora non ci interessa in caso il modulo venga creato durante la simulazione, quindi per esempio il caso di rilascio da multistage.

A questo punto bisogna aggiungere nella funzione clbkPostCreation il riferimento alla variabile loaded e cioè dire che se la variabile loaded non è 1 allora bisogna riempire al massimo i serbatoi

Codice:

void nomedelvessel::clbkPostCreation (){
if(loaded!=1){
SetFuelMass(FUELMASS);
  }
}


Penso che questo post possa essere d'aiuto sia a te per quanto riguarda il workaround del bug, sia a tutti gli altri per quanto riguarda caricare e salvare variabili nei file scenario.

Spero di essere stato comprensibile sweat drop

ciaoooo
Torna in alto Andare in basso
ndudi
Add-on Developer
Add-on Developer
ndudi


Numero di messaggi : 450
Età : 40
Località : como
Data d'iscrizione : 13.06.11

[C++] Multistage2 bug carburante Empty
MessaggioTitolo: Re: [C++] Multistage2 bug carburante   [C++] Multistage2 bug carburante EmptyVen 15 Feb 2013 - 17:53

Grazie mille Fred per la tua disponibilità!!Sei stato chiarissimo e concettualmente ho capito tutto! Ora vedremo se sarò in grado di applicare i tuoi suggerimenti, ti farò sapere!Grazie ancora!
Torna in alto Andare in basso
fred18
Add-on Developer
Add-on Developer



Numero di messaggi : 950
Età : 41
Località : La Spezia
Data d'iscrizione : 04.01.12

[C++] Multistage2 bug carburante Empty
MessaggioTitolo: Re: [C++] Multistage2 bug carburante   [C++] Multistage2 bug carburante EmptyVen 15 Feb 2013 - 17:59

figurati, mi fa piacere aiutare! happy face

attendo presto news sul risultato! Laugh
Torna in alto Andare in basso
ndudi
Add-on Developer
Add-on Developer
ndudi


Numero di messaggi : 450
Età : 40
Località : como
Data d'iscrizione : 13.06.11

[C++] Multistage2 bug carburante Empty
MessaggioTitolo: Re: [C++] Multistage2 bug carburante   [C++] Multistage2 bug carburante EmptyVen 15 Feb 2013 - 18:59

Tutto perfettamente funzionante come previsto!!!E' stato relativamente semplice grazie all'ottima spiegazione passo passo!Come hai detto tu questa procedura è utilissima per salvare e caricare qualsiasi tipo di variabile, grazie ancora!!! Forza Forza
Torna in alto Andare in basso
fred18
Add-on Developer
Add-on Developer



Numero di messaggi : 950
Età : 41
Località : La Spezia
Data d'iscrizione : 04.01.12

[C++] Multistage2 bug carburante Empty
MessaggioTitolo: Re: [C++] Multistage2 bug carburante   [C++] Multistage2 bug carburante EmptyVen 15 Feb 2013 - 19:23

grande!!! Thumb Up
Torna in alto Andare in basso
Contenuto sponsorizzato





[C++] Multistage2 bug carburante Empty
MessaggioTitolo: Re: [C++] Multistage2 bug carburante   [C++] Multistage2 bug carburante Empty

Torna in alto Andare in basso
 
[C++] Multistage2 bug carburante
Torna in alto 
Pagina 1 di 1
 Argomenti simili
-
» Payload multistage2
» Carburante insufficiente per Marte
» Consumo carburante pilota automatico DG IV

Permessi in questa sezione del forum:Non puoi rispondere agli argomenti in questo forum.
Forum Orbiter Italia :: Progetti della community :: Sviluppo Add-on :: Orbiter SDK-
Vai verso: