FlightGear/Gli script XML: differenze tra le versioni

Jump to navigation Jump to search
m
Update syntaxhighlight tags - remove use of deprecated <source> tags
(ortografia)
m (Update syntaxhighlight tags - remove use of deprecated <source> tags)
Ad esempio, un caso molto semplice è il binding che gestisca la chiusura di una finestra:
 
<sourcesyntaxhighlight lang="xml">
<binding>
<command>dialog-close</command>
</binding>
</syntaxhighlight>
</source>
 
Il comando '''dialog-close''' è un comando di sistema per la chiusura di una finestra, diversamente è possibile aprire una qualsiasi finestra di dialog descritta come codice xml nella directory ''$FG ROOT/fgdata/gui/Dialogs''.
 
<sourcesyntaxhighlight lang="xml">
<binding>
<command>dialog-show</command>
<dialog-name>location-in-air</dialog-name>
</binding>
</syntaxhighlight>
</source>
 
In questo caso si mostra la finestra di dialog il cui codice xml è definito nel file ''location-in-air.xml''.
Un esempio più complesso è la modifica dei valori rilasciati da un asse del joystick in modo che siano compatibili con i valori previsti da FlightGear. Ovviamente alcune cose, come l'interfacciamento tra il PC ed il joystick, avviene tramite programmi di sistema operativo e quindi per mezzo di chiamate scritte in C++. Queste chiamate di basso livello permettono la generazione di un albero delle proprietà del dispositivo joystick raffigurato in questo esempio per il solo asse '''0''' e bottone '''0''' da una struttura XML del seguente tipo:
 
<sourcesyntaxhighlight lang="xml">
<PropertyList>
<name>Logitech Inc. WingMan Force 3D</name>
</button>
</PropertyList>
</syntaxhighlight>
</source>
 
Questa struttura contiene tre oggetti, il nome della proprietà (''<name>..</name>'') e due variabili ''<axis n="0">..</axis>'' e ''<button n="0">..</button>''. A questo punto è possibile fare il ''binding'' ovvero legare il valore presente in una certa proprietà con qualche trasformazione che può avvenire richiamando un codice in C++ e/o utilizzando uno script in Nasal.
 
<sourcesyntaxhighlight lang="xml">
<PropertyList>
...
</binding>
</axis>
</syntaxhighlight>
</source>
 
In questi caso all'interno di ''<binding>..</binding>'' vi è il codice che potrà modificare il valore dell'asse '''0''' (''<axis n="'''0'''">'') tramite il comando di sistema ''<command>'''property-scale'''</command>'' che contiene alcuni parametri, il primo è il nome della proprietà dell'albero globale delle proprietà (''<property>'''/controls/flight/aileron'''</property>'') che dovrà essere unito in binding con il valore dell'asse '''0''' (''<axis n="'''0'''">''). I successivi quattro parametri sono richiesti, tutti o solo in parte, dipende la contesto, dal comando '''property-scale''' e definiscono il tipo di trasformazione del dato numerico che realizza il comando '''property-scale'''.
È anche possibile fare un binding non verso una chiamata C++ come '''property-scale''' ma verso uno script in Nasal, in questo caso potremo avere il seguente codice XML:
 
<sourcesyntaxhighlight lang="xml">
<PropertyList>
...
</binding>
</axis>
</syntaxhighlight>
</source>
 
Il questo caso il comando C++ richiamerà l'interprete Nasal (''<command>'''nasal'''</command>'') seguito come parametro dal codice Nasal (''<script>'''...'''</script>'') che nel nostro esempio è semplicemente una chiamata ad una funzione Nasal di nome ''controls.throttleAxis()'' posizionata all'interno dell'aerea che raccoglie tutti gli script Nasal standard di FligtGear.
È il bindig che permette di attivare uno script in linguaggio [[FlightGear/Il_linguaggio_NASAL|Nasal]], ad esempio il semplice script permette di stampare il valore dell'asse n. 2 del joystick normalizzato tra 0 ed 1:
 
<sourcesyntaxhighlight lang="xml">
<axis n="2">
<desc>Throttle</desc>
</binding>
</axis>
</syntaxhighlight>
</source>
 
Come si vede viene definita all'interno dello script una variabile ''th'' nella quale viene assegnato un valore con il comando Nasal: ''cmdarg().getNode("setting").getValue()'' dopo una certa elaborazione numerica. Poi questo valore viene stampato su consolle: ''print(th);''. Finalmente viene invocato un comando Nasal con ''controls.throttleAxis();'', questo comando si trova definito all'interno del file Nasal posto in ''$FG ROOT/fgdata/Nasal/controls.nas''. Niente quindi impedisce che tutto il codice Nasal sia posto direttamente dentro la parte ''<script>...</script>''.
È un comando utile per la gestione degli assi del joystick. Un esempio per il suo utilizzo è il seguente:
 
<sourcesyntaxhighlight lang="xml">
<PropertyList>
...
</binding>
</axis>
</syntaxhighlight>
</source>
 
[[File:FlightGear - property-scale - power curve 1.svg|300px|thumb|Esempio di variazione della sensibilità del joystick rispetto il valore del parametro power.]]
266

contributi

Menu di navigazione