simone Add-on Developer
Numero di messaggi : 1010 Età : 28 Località : Catania Data d'iscrizione : 12.02.10
| Titolo: domanda c++ "contare" i membri a bordo Dom 14 Set 2014 - 3:50 | |
| Salve a tutti , volevo chiedervi una cosa legata ad UMmu Allora Volevo fare in modo che quando entri nella mia nave un astronauta la dll inserisca nello scenario una mesh ad una data posizione ho quindi fatto in modo che ad ogni step la dll faccia il conto di quanti membri sono a bordo - Codice:
-
void machiavellism::clbkPostStep(double simt, double simdt, double mjd) {
//in testttttttt (conta dei membri a bordo) if (Crew.GetCrewTotalNumber() == 1){ member = 1; }; if (Crew.GetCrewTotalNumber() == 2){ member = 2; }; if (Crew.GetCrewTotalNumber() == 3){ member = 3; }; if (Crew.GetCrewTotalNumber() == 4){ member = 4; };
}
ho definito ovviamente una variabile chiamata member e fin qui tutto a posto (già testato a video funziona), ora il problema si pone quando carico la mesh, utilizzo questo - Codice:
-
VECTOR3 ofs2 = _V(6, 0, 8.8); if (member == 2){ AddMesh("machiavelli\\machiavellig", &ofs2); }; fosse per lui questo codice funzionerebbe ma non so dove poterlo mettere, se messo in clbkpoststep il programma carica di continuo la mesh (con perdita di fps enorme) se lo metto tra le altre mesh (in classcaps) ovviamente non va proprio in quanto non aggiornata ad ogni frame Sicuramente sbaglio io la posizione,attendo vostre risposte e buone orbite a tutti!!! | |
|
fred18 Add-on Developer
Numero di messaggi : 950 Età : 41 Località : La Spezia Data d'iscrizione : 04.01.12
| Titolo: Re: domanda c++ "contare" i membri a bordo Lun 15 Set 2014 - 15:38 | |
| Ciao Simone,
non ho sottomano il codice del TG, ma ci sono un po' di punti che avevo risolto riguardo a questo tema e se non ricordo male facevo all'incirca così:
anzitutto in classcaps carichi tutte le mesh ma le metti a visibilità 0
poi controlli al primo giro quanti sono gli astronauti a bordo e rendi visibili solo quelli.
poi ti sconsiglio di fare il check ad ogni frame, si perdono tantissimi fps! la cosa migliore è che ogni volta che un astronauta viene tolto od aggiunto (e mi pare che sia una cosa che con ummu si gestisce bene) rifai il check di quanti sono e rendi visibili quelli che devono essere visibili. Darò comunque un'occhiata al codice del tg per vedere se c'è qualcosa che può aiutarti.
| |
|
simone Add-on Developer
Numero di messaggi : 1010 Età : 28 Località : Catania Data d'iscrizione : 12.02.10
| Titolo: Re: domanda c++ "contare" i membri a bordo Lun 15 Set 2014 - 17:18 | |
| sisi in un colpo di lucidità ieri mi era venuto in mente di usare Meshvisibilitymode (o qualcosa del genere)
Cosa intendi per non farlo ad ogni frame, avevo intuito che sarebbe stato possibile farlo soltanto on-demand ma ignoro come possa farlo, ci studio e vi aggiorno ! | |
|
simone Add-on Developer
Numero di messaggi : 1010 Età : 28 Località : Catania Data d'iscrizione : 12.02.10
| Titolo: Re: domanda c++ "contare" i membri a bordo Mar 16 Set 2014 - 1:24 | |
| UPDATE: codice funzionante implementato nel prestep,consigli e suggerimenti ben accetti - Codice:
-
void machiavellism::clbkPreStep(double simt, double simdt, double mjd){
//in testttttttt (conta dei membri a bordo) if (Crew.GetCrewTotalNumber() == 0){ member = 0; }; if (Crew.GetCrewTotalNumber() == 1){ member = 1; }; if (Crew.GetCrewTotalNumber() == 2){ member = 2; }; if (Crew.GetCrewTotalNumber() == 3){ member = 3; }; if (Crew.GetCrewTotalNumber() == 4){ member = 4; };
if (member == 1) { SetMeshVisibilityMode(3, MESHVIS_ALWAYS); SetMeshVisibilityMode(4, MESHVIS_NEVER); SetMeshVisibilityMode(5, MESHVIS_NEVER); SetMeshVisibilityMode(6, MESHVIS_NEVER); }
if (member == 2)
{ SetMeshVisibilityMode(3, MESHVIS_ALWAYS); SetMeshVisibilityMode(4, MESHVIS_ALWAYS); SetMeshVisibilityMode(5, MESHVIS_NEVER); SetMeshVisibilityMode(6, MESHVIS_NEVER); }
if (member == 3)
{ SetMeshVisibilityMode(3, MESHVIS_ALWAYS); SetMeshVisibilityMode(4, MESHVIS_ALWAYS); SetMeshVisibilityMode(5, MESHVIS_ALWAYS); SetMeshVisibilityMode(6, MESHVIS_NEVER); }
if (member == 4){
SetMeshVisibilityMode(3, MESHVIS_ALWAYS); SetMeshVisibilityMode(4, MESHVIS_ALWAYS); SetMeshVisibilityMode(5, MESHVIS_ALWAYS); SetMeshVisibilityMode(6, MESHVIS_ALWAYS); };
if (member == 0){ SetMeshVisibilityMode(3, MESHVIS_NEVER); SetMeshVisibilityMode(4, MESHVIS_NEVER); SetMeshVisibilityMode(5, MESHVIS_NEVER); SetMeshVisibilityMode(6, MESHVIS_NEVER);
} }
| |
|
fred18 Add-on Developer
Numero di messaggi : 950 Età : 41 Località : La Spezia Data d'iscrizione : 04.01.12
| Titolo: Re: domanda c++ "contare" i membri a bordo Mar 16 Set 2014 - 8:40 | |
| così però ad ogni frame lui imposta la visualizzazione delle mesh, ho trovato il codice del tg che funziona così: conta gli ummu a bordo. se al frame dopo il numero degli ummu è cambiato allora reimposta le visibilità delle mesh, altrimenti non fa niente, in modo che la simulazione venga ben bene alleggerita - Codice:
-
if(Crew.GetCrewTotalNumber()!=nummus){ int q; for(q=0;q<Crew.GetCrewTotalNumber();q++){ SetMeshVisibilityMode(ummu_idh[q],MESHVIS_VC); } for(q=Crew.GetCrewTotalNumber();q<8;q++){ SetMeshVisibilityMode(ummu_idh[q],MESHVIS_NEVER); } }
nummus=Crew.GetCrewTotalNumber();
ovviamente nummus è un int da inizializzare a 0 (ovviamente non in post o prestep) | |
|
Contenuto sponsorizzato
| Titolo: Re: domanda c++ "contare" i membri a bordo | |
| |
|