|
Dalla versione 3.3, Train Director permette ai creatori di scenari di specificare
sia l'apparenza che il significato dei segnali.
L'introduzione di questa funzionalità permette di visualizzare gli aspetti dei
segnali corrispondenti a segnali di avviso, di protezione con avviso accoppiato,
di limitazione della velocità in base all'itinerario prescelto, e così via.
Diventa inoltre possibile visualizzare gli aspetti dei segnali usati da varie
amministrazioni ferroviarie.
Tutto cioè viene realizzato con l'utilizzo di file testo separati dallo
scenario, che descrivono le varie icone da usare, il comportamento che il treno
dovrà mantenere nell'avvicinarsi al segnale, e come decidere quale aspetto il
segnale deve presentare in base alle condizioni della linea.
Questi file testo separati sono chiamati "Train Director Scripts", o più
semplicemente file .tds.
Ad ogni segnale può venire associato un file .tds che ne descrive le
caratteristiche tramite il dialogo delle proprietà del segnale.

Il seguente è un esempio di un file .tds:
# Segnale di protezione a 1 luce (rosso,giallo,verde)
Aspect: red
IconE: rE.xpm
IconW: rW.xpm
IconS: rS.xpm
IconN: rN.xpm
Action: stop
Aspect: yellow
IconE: yE.xpm
Action: proceed
Aspect: green
IconE: gE.xpm
Action: proceed
OnInit:
.aspect = red
end
OnCleared:
if .aspect = red
if next.aspect = red
.aspect =
yellow
else
.aspect =
green
end
end
end
OnUpdate:
if .aspect = red
return
end
if next.aspect = red
.aspect = yellow
else
.aspect = green
end
end
Vediamo di descrivere le varie parti del file:
Commenti
La prima riga del file è una riga di commento, ed indica quale tipo di segnale
stiamo trattando:
# Segnale di protezione a 1 luce (rosso,giallo,verde)
Tutti i caratteri dal # compreso fino alla fine della riga vengono ignorati dal
programma.
I commenti sono del tutto opzionali, per cui non è strettamente necessario
usarli, anche se il loro uso aiuta molto chi vuole capire meglio la logica del
file stesso e a quale tipo di segnale applicarla.
Aspetti
La sezione successiva descrive i vari aspetti che il segnale può assumere:
Aspect: red
IconE: rE.xpm
IconW: rW.xpm
IconS: rS.xpm
IconN: rN.xpm
Action: stop
Aspect: yellow
IconE: yE.xpm
Action: proceed
Aspect: green
IconE: gE.xpm
Action: proceed
Il nome dell'aspetto è indicato dalle linee "Aspect:". In
questo caso abbiamo 3 aspetti: "red" (cioè rosso),
"yellow" (cioè giallo), e "green" (cioè verde).
Per ogni aspetto è necessario indicare l'icona da visualizzare quando il
segnale è nello stato corrispondente "per ciascuna delle 4 direzioni",
est, ovest, sud, nord.
Se lo scenario non ha segnali disposti in direzione nord o sud, è possibile non
specificare tali direzioni.
Negli esempi in questa pagina verrà sempre indicata l'icona da usare per la
direzione est, intendendosi comunque l'autore dovrà specificare sempre anche le
altre direzioni.
E' anche possibile indicare più di una icona per ogni direzione. Le varie icone
verranno visualizzate in sequenza, ritornando alla prima icona dopo che l'ultima
icona è stata visualizzata. Questo consente di "animare" il segnale, per
esempio per visualizzare i segnali lampeggianti.
Oltre all'icona, ogni aspetto ha associata un'azione, specificata dalle righe "Action:".
Questa azione verrà eseguita da ogni treno che viaggia nel blocco precedente il
segnale. Le azioni possibili sono:
- "stop": il segnale non può essere oltrepassato. Il
treno si fermerà prima del segnale.
- "proceed": il segnale può essere oltrepassato senza
particolari condizioni. Il treno proseguirà oltre il segnale.
- "speedLimit X": il segnale può essere oltrepassato
alla velocità X (rimpiazzare X con un numero). Il treno inizierà a
rallentare prima di impegnare il segnale; cioè il segnale si comporta come
un limite di velocità associato all'elemento di binario linkato al segnale
stesso.
- "none": il segnale verrà ignorato sia dai treni, che
quando l'utente clicca sul segnale stesso. Il segnale sarà controllato
completamente dal programma. I segnali di avviso sono caratterizzati da
questa azione.
Con queste semplici istruzioni è possibile creare una molteplicità di casi,
tali da descrivere le più comuni combinazioni.
Le sezioni successive dicono a Train Director quando cambiare l'aspetto del
segnale.
Eventi e Condizioni
Chiaramente un segnale deve cambiare il suo aspetto quando si verificano
certe condizioni nel tracciato. Tali condizioni possono essere generate sia dal
giocatore che dal movimento dei treni.
Vediamo di seguito per ogni condizione le azioni che è possibile prendere.
OnInit : al caricamento dello scenario
Le azioni associate a "OnInit:" vengono eseguite quando lo scenario viene
aperto. Tipicamente l'azione associata è la definizione dell'aspetto iniziale
del segnale (di solito al rosso):
OnInit:
.aspect = red
end
Vediamo più in dettaglio la sintassi da usare in questa parte del file .tds.
La sezione inizia con l'evento che vogliamo descrivere, cioè "OnInit:".
Dopo il nome dell'evento vengono specificate una serie di azioni in forma di
espressioni. Nel caso in esame, ".aspect = red" significa "cambia l'aspetto del
segnale in base alle istruzioni indicate nel blocco "Aspect: red". "
L'azione di assegnare un nome all'aspetto dice a Train Director di cambiare
l'icona e l'azione associata a quel segnale, usando i dati specificati nella
sezione "Aspect:" corrispondente al nome.
L'uso del "punto" in ".aspect", indica che ci riferiamo al segnale associato
a questo file .tds. Vedremo in seguito come sia possibile riferirsi ad altri
segnali.
La sezione viene sempre terminata da una riga con la parola "end".
OnCleared : l'utente apre il segnale
Quando l'utente clicca sull'icona di un segnale, se il blocco successivo è libero,
Train Director guarda alle istruzioni associate all'evento "OnCleared:"
per decidere come cambiare l'aspetto del segnale. In questo caso, le azioni da
prendere sono più complesse:
OnCleared:
if .aspect = red
if next.aspect = red
.aspect =
yellow
else
.aspect =
green
end
end
end
Come si vede, è possibile chiedersi se certe condizioni sono valide usando
la parola "if". Nella prima riga ci chiediamo se l'aspetto corrente del segnale
è rosso ("if .aspect = red"). Se non lo è, il programma ignora tutte le azioni
comprese tra la riga con l"if" e il corrispondente "end".
Se invece la condizione è verificata, il progamma prosegue con l'esecuzione
della riga successiva. Nell'esempio, ci chiediamo qual'è l'aspetto del segnale
successivo a quello attuale è rosso ("if next.aspect = xxxx"). Come si vede,
l'uso della parola "next" prima della parola ".aspect" indica al programma di "guardare
avanti" nel blocco protetto dal segnale stesso. E' anche possibile guardare 2 o
più blocchi a valle del segnale, semplicemente concatenando varie parole
"next", per esempio "next.next.aspect".
Se quindi il segnale successivo è rosso ("if next.aspect = red"), allora il
segnale corrente deve mostrare l'avviso di arresto, per cui cambiamo l'aspetto a
giallo (".aspect = yellow").
Se invece il segnale successivo non è rosso, Train Director eseguirà l'azione
associata alla parola "else", in questo caso mettendo il segnale al verde
(".aspect = green").
Si noti come ad ogni "if" corrisponde sempre un "end" (2 if, 2 end più quello
di fine sezione). La convenzione di spostare le istruzioni relative a ciascun
"if" aiuta a capire a quale condizione tali istruzioni si riferiscono.
OnUpdate : un'altro segnale ha cambiato aspetto
Quando un'altro segnale nel tracciato cambia aspetto, Train Director esegue le
istruzioni associate alla sezione "OnUpdate:". Questo consente per esempio di
cambiare l'aspetto di un segnale quando il segnale succcessivo cambia aspetto.
Nel nostro esempio:
OnUpdate:
if .aspect = red
return
end
if next.aspect = red
.aspect = yellow
else
.aspect = green
end
end
La logica è la seguente: se il segnale corrente è rosso, non viene eseguita
alcuna azione; la riga con "return" indica che Train Director pu&ò ignorare le
istruzioni seguenti per questo segnale.
Se invece il segnale corrente non è rosso, allora dobbiamo guardare al segnale
successivo, per vedere quale aspetto ha assunto ("if next.aspect = xxxx").
Se il segnale successivo è diventato rosso, allora dobbiamo cambiare l'aspetto
del segnale corrente a giallo (".aspect = yellow").
Se il segnale successivo non è rosso, allora dobbiamo cambiare l'aspetto del
segnale corrente a verde (".aspect = green").
L'approccio descritto finora consente di rappresentare molte delle combinazioni
presentate nel "Regolamento Segnali" di Trenitalia, e si spera di altre
amministrazioni sia nazionali che estere.
Nella pagina successiva vengono presentati casi più complessi.
|