Train Director 3 - Scripts

 English   -    Italiano


Immagine © Bahn TV

 

La versione 3.6 di Train Director aumenta il livello di personalizzazione degli scenari rispetto alle versioni precedenti. Infatti e' ora possibile associare degli scritti a quasi tutti gli elementi presenti in un tracciato: segnali, binari, pedali e treni! Tramite l'uso di scritti, e' possibile creare condizioni complesse come per esempio la creazione di itinerari multipli e il controllo della marcia dei treni, compresa la possibilita' di creare ritardi casuali nella marcia dei treni.

Il principio su cui si basano gli script e' l'esecuzione di funzioni specifiche che vengono attivate quando si verifica un particolare evento. Ogni elemento sul tracciato riconosce eventi diversi. La pagina di riassunto degli script elenca i vari eventi per i vari elementi del tracciato.

Per spiegare l'uso degli script, le seguenti simulazioni di esempio sono incluse con l'eseguibile di Train Director:

  • trainscr.trk: esempio di uso degli script associati ai treni. La simulazione stampa nella finestra degli avvisi quando lo stato del treno cambia (per esempio qunado il treno entra nel tracciato, o quando la sua direzione viene invertita).
  • signalscr.trk: esempio di uso degli script associati ai segnali. La simulazione mostra come sia possibile implementare segnali di avviso o segnali di protezione condizionati all'itinerario di ingresso in una stazione.
  • trackscr.trk: esempio di uso degli script associati ai binari e ai pedali.

Come Associare gli Script agli Elementi

Ogni script e' una porzione di un file testo associato a un elemento del tracciato. Il programma permette l'introduzione degli script per i binari direttamente dal dialogo delle proprieta' del binario:

Per quel che riguarda i treni, gli script sono specificati nel file .sch insieme all'orario del treno. Questo e' un esempio di script associato a un treno:

Train: T3
Enter: 0:12, A
    0:14, -, S1
  Script:
    OnShunt:
       do showalert T3 shunting
    end
    OnReverse:
       do showalert T3 reversed
    end
  EndScript
.

Per quel che riguarda i segnali, gli script sono file testo separati chiamati "Train Director Scripts", o piu' semplicemente file .tds. Questi file possono essere associati ai vari segnali tramite il dialogo delle proprietà del segnale.

La ragione per questa differenza sta' nel fatto che per i segnali e' molto comune riutilizzare lo stesso script per piu' di un segnale (per esempio tutti i segnali di avviso con protezione accoppiata avranno lo stesso script).

Tutti gli script usano una sintassi comune, composta dal nome dell'evento, seguito da uno o piu' righe di condizioni, espressioni o comandi. Gli eventi hanno la seguente struttura:

OnXXXXX:
    # condizioni, espressioni e comandi
    ....

end

dove XXXXX specifica l'evento, ed end specifica la fine delle condizioni, espressioni o comandi associato a tale evento.

Le espressioni servono a leggere o cambiare le proprieta' di binari, segnali, treni ecc. Mentre le proprieta' sono specifiche dell'elemento, e sono elencate per ogni tipo di elemento nella pagina di riassunto degli script, gli elementi stessi possono essere indicati in vario modo:

  • tramite la coordinata dell'elemento:   Track(x, y)  specifica l'elemento di binario alla coordinata x, y.
  • relativamente al treno o segnale o binario interessato dall'evento:   Track.proprieta, Train.proprieta, Signal.proprieta.
  • relativamente all'elemento che ha scatenato l'evento:  .proprieta.

Per esempio, la proprieta' ".aspect" di un segnale puo' essere cambiata con la seguente espressione:

    .aspect = red

Le espressioni sono anche usate per specificare delle condizioni, tramite l'uso di "operatori" di confronto.

Il seguente e' un esempio di espressione condizionale:

    Signal(10,23).aspect = red and Train(R2001).speed > 100 or Train(R2004).status = stopped

Come si vede, diverse espressioni possono essere collegate dagli operatori "and" e "or".

Gli operatori condizionali sono i seguenti:

=     uguale a
!      diverso da
>     maggiore di
>=   maggiore o uguale a
<     minore di
<=   minore o uguale a

and   verificato se la condizione di sinistra e la condizione di destra sono entrambe verificate
or      verificato se o la condizione di sinistra o la condizione di destra e' verificata

Oltre agli elementi del tracciato, si puo' usare l'operando "random" in un'espressione per ottenere un valore da 0 a 99 compresi, come nel seguente esempio:

    random < 40

In questo caso la condizione sara' verificata (in media) il 40% delle volte.

Un'altro operando che puo' essere usato nelle espressioni e' "time", per riferirsi all'orologio della simulazione:

    time > 1430

Il valore dell'operando "time" e' in hhmm, cioe' ore+minuti; nell'esempio precedente la condizione e' verificata dopo le 14:30.

Oltre alle espressioni per cambiare le proprieta' di un'elemento, gli script consentono anche l'uso di 2 tipi di comandi:

  • I comandi di condizione
  • I comandi imperativi

I comandi di condizione hanno la seguente struttura:

    if espressione
       comando1
       comando2
       ...
    else
       comando3
       comando4
       ...

    end

Il comando valuta se l'espressione e' verificata, ed in caso affermativo esegue la serie di comandi 1, 2 ecc. ignorando la serie di comandi 3, 4, ecc.
Nel caso l'espressione non sia verificata, il comando ignora la serie di comandi 1,2 ecc. ed esegue invece la serie di comandi 3, 4, ecc.

Si noti che la parte "else" e' facoltativa, e puo' essere omessa se non ci sono comandi da eseguire quando l'espressione non e' verificata.

Si noti inoltre che un comando puo' contenere altri comandi "if", in modo tale da poter specificare ulteriori condizioni che saranno controllate solo dopo che l'"if" esterno e' stato verificato.

I comandi imperativi sono introdotti dalla parola "do", e consentono di modificare l'operativita' del simulatore, similmente a quanto succede gia' per i pedali.

I comandi disponibili sono i seguenti:

do stationsched mostra l'orario delle stazioni
do fast aumenta la velocita' della simulazione
do slow diminuisce la velocita' della simulazione
do shunt train inizia la manovra del treno specificato
do traininfopage train mostra l'orario del treno specificato in una pagina HTML
do traininfo train mostra l'orario del treno specificato in un dialogo
do decelerate value train rallenta la velocita' del treno specificato del valore di km/h specificato
do accelerate value train aumenta la velocita' del treno specificato del valore di km/h specificato
do reverse train inverte la marcia del treno specificato
do click x, y simula un click del bottone sinistro del mouse alla coordinata specificata
do rclick x, y simula un click del bottone destro del mouse alla coordinata specificata
do ctrlclick x, y simula un click del bottone sinistro del mouse col tastro Ctrl premuto
do itinerary name attiva l'itinerario specificato. Non e' necessario avere un pulsante associato all'itinerario.
do assign oldtrain newtrain assegna il materiale di "oldtrain" (che deve essere arrivato a destinazione) al treno "newtrain".
do play soundfile suona il file specificato
do skip fa avanzare la simulazione a 3 minuti prima del prossimo evento (utile per non dover aspettare delle ore quando non sono previsti movimenti di treni)
do split train length spezza il treno specificato in due treni, e fa avanzare in manovra il primo troncone
do script file esegue lo scritto contenuto nel file specificato
do showinfo file.htm mostra il contenuto del file HTML nella finestra "Scenario Info"
do showalert text mostra la frase specificata nella finestra degli avvisi
do clearalert cancella tutti i messaggi dalla finestra degli avvisi
 

Un'altro comando imperativo interrompe l'esecuzione di una sequenza di comandi e ritorna immediatamente alla simulazione. Tale comando e' specificato dalla parola return, come in:

    if .aspect = red
       return
    end

Tutti i comandi dopo la riga return verranno ignorati.

Nella pagina successiva vengono presentati in dettaglio gli scritti associabili ai segnali. Si veda inoltre vari scenari disponibili dalla pagina delle simulazioni per esempi di come utilizzare gli scritti.