Aggiornamento sul terrain editor.
Dopo diversi giorni di lavoro, che sono stati più di quanto avessi preventivato all'inizio (non tanto per la complessità del problema, ma il fatto è che sono stato rallentato da problemi personali) direi che sono quasi alla fine della base di questo progetto.
Cosa è stato fatto in questo periodo?
Il codice è stato organizzato in modo che il controllo/editor del livello contenga due oggetti separati definiti come TerrainEditor e ModelLevelEditor. Tali oggetti vanno a riferire lo stesso oggetto Level, solo che il promo va a modificare il terreno e le texture del terreno, mentre il secondo da la possibilità di modificare in modo agevole i modelli presenti nel livello.
Questi oggetti come si è capito danno specifiche funzioni che agiscono su una parte del modello dell'applicazione.
Tra le caratteristiche comuni ad entrambi c'è la coda delle operazioni svolte: posso cioè tornare indietro con le operazioni svolte e ripristinare lo stato precedente alla modifica fatta, questo per ogni operazione possibile (editing del terreno, editind delle texture del terreno, editing delle trasformazioni spaziali del modello). Ancora è da rifinire e perfezionare, ma per ora funziona.
Ho aggiunto la possibilità di importare oggetti 3D a runtime, cioè non compilati a posteriori da XNA tramite il Visual C# o VS. Questa parte devo dire mi ha impegnato un po', ma solo per il fatto che non capivo come re-indirizzare il compilatore alla giusta versione delle dll da usare.
Ora, tramite un sistema di Builder e ContentManager, "compila" a tempo di esecuzione i file che deve importare nella scena. Il tutto rallenta un po' (dato che la compilazione/importazione dei modelli nel formato compatibile con XNA impiega un po' ti tempo; forse potrei ottimizzare aggiungendo in futuro la compilazione in un thread separato, in questo modo, almeno al caricamento di un livello precente otterrei un tempo minore), ma funziona.
Unica "pecca": dato che non riesco ancora a trovare il riferimento a tutti i file necessari per la compilazione di un modello (texture e simili) sarà compito di usa il modello copiare poi nella cartella/directory che più preferisce i file necessari al corretto funzionamento del modello nel livello.
A cosa serve poter importare oggetti nel livello se poi non si possono usare? Ho aggiunto quindi la possibilità di inserire/eliminare modelli dal livello tramite il mouse. Lo stesso dicasi per quanto riguarda la traslazione/rotazione/scaltura degli stessi.
Per le trasformazioni spaziali degli oggetti ho creato ed aggiunto degli assi cartesiani, per ora molto semplici, che permettono di postare l'oggetto.
Dato che le modifiche possibili sono diventate varie, ho deciso di rendere modulare il modo di agire sui dati.
L'applicazione permetterà di modificare la parte del modello che vogliamo modificare: tramite dei radio button (o con un short-cut) si può passare dalla modalità di editig del terreno, alla modalità di editing delle texture ed infina a quella dei modelli.
Forse è un po' scomodo all'inizio, ma se si pensa che in altri programmi professionali fanno cose simili (ok forse è esagerato comparare questo sgorbio che sto facendo con programmi professionali, ma a qualcuno/qualcosa ci si deve pur ispirare no?).
Aggiunta la possibilità di caricare nuove immagini da usare nei brush per la modifica del terreno, e queste immagini poi saranno copiate nella directory dei terrain brush e ricaricate al riavvio successivo.
Credo che andrò a fare una cose del genere anche per le texture usate per il terreno, in modo che quando si vorrà poi riusare il livello creato in un gioco (ma chi mai andrà a farlo mi domando io XD) almeno avrà parte dei dati raggruppati e più facilmente utilizzabili.
Per ora non credo di avere altro da aggiungere.
Se ho dimenticato qualcosa aggiungerò in seguito.
Vi lascio con uno screen del programma:
Per le percentuali di lavorazione:
Terrain Editor Journal
Alla prossima ^^
PS: non credo che molti avranno qualcosa da dire, ma in caso contrario che dite tutto quello che vi passa per la testa! Curiosità, possibili correzioni, cosa da fare/aggiungere.
E se avete qualche curiosità sul codice ditelo, e vedrò di pubblicarlo! (almeno in parte ^^)
Continua a leggere!
Iscriviti a:
Post (Atom)