|
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.
|