# Segnale di avviso da nascondere e piazzare prima di un segnale normale per farlo
# considerare di partenza e bloccare i transiti anche in corretto tracciato: se il
# suo segnale è aperto i precedenti non si aprono verso di lui, e se questi ultimi
# sono aperti, il suo segnale non si apre. È compatibile con l'avviso nascosto che
# forza la deviata (rfi_avv_dev.tds) - e in tal caso va posto a valle di esso - e
# con l'avviso nascosto che forza il binario corto (rfi_avv_tronc.tds), e in questo
# caso va posto a monte di esso. Non ci possono essere avvisi normali prima o dopo
# questo segnale, perché i segnali di partenza non ne possono avere.
#
# Aspetti: block, nothing, red_short (tutti spenti, in quanto segnale da nascondere)

# ATTENZIONE:  per la corretta inizializzazione del segnale, eventuali avvisi spe-
#              ciali che lo seguono devono essere inseriti nel tracciato DOPO di
#              esso, in modo che il loro aspetto venga aggiornato prima.

# Special pure distant to be placed hidden before an exit signal to simulate the tri-
# angle and so prevent a no stop route through that signal. If its signal is clear,
# previous signals will not clear towards it, and if they are clear, its signal won't
# clear. It's compatible with the hidden distant that forces a diverging route (rfi_
# avv_dev.tds) - and in this case it must be placed after that signal - and with the
# hidden distant that forces a short track (rfi_avv_tronc.tds), and in this case it
# must be placed before that signal. No normal distants can be placed before or after
# this signal, as they are not allowed before triangle exit signals.
#
# Aspects: block, nothing, red_short (all unlit, as this signal should be hidden)

# WARNING: For this signal to be initialized correctly, any other special distant
#          following this signal should be placed in the layout AFTER this one, so
#		   their aspect will be updated before this one's.

# P.Rosati  21/01/2021 (Versione 5.1)

Aspect: block
	IconE: NN_b_E.xpm
	IconW: NN_b_W.xpm
	IconN: NN_b_N.xpm
	IconS: NN_b_S.xpm
	Action: none

Aspect: nothing
	IconE: NN_b_E.xpm
	IconW: NN_b_W.xpm
	IconN: NN_b_N.xpm
	IconS: NN_b_S.xpm
	Action: none

Aspect: red_short
	IconE: NN_b_E.xpm
	IconW: NN_b_W.xpm
	IconN: NN_b_N.xpm
	IconS: NN_b_S.xpm
	Action: none

# initial aspect

OnInit:
	if nextApproach.aspect = red_short	# Avviso speciale che richiede GG o RGG se il prossimo imperativo è chiuso
		.aspect = red_short				# A special distant follows, requiring YY or RYY if next main signal is unclear
	else
		.aspect = nothing
	end
end

# the player or a script cleared the signal

OnCleared:
	return
end

# this or another signal changed its aspect

OnUpdate:
	# Se seguito da protezioni, permissivi o marmotte imperative aperte, blocca il segnale precedente
	# If followed by a clear home, permissive or real shunting signal, block previous signal
	if next.script > "rfi_perm" and next.script < "rfi_perm_B" and next.aspect ! red and next.aspect ! off
		.aspect = block
		return
	end
	if next.script > "rfi_prot" and next.script < "rfi_prot_B" and next.aspect ! red and next.aspect ! off
		.aspect = block
		return
	end
	if next.script = "rfi_sam_i.tds" or next.script = "rfi_marm_i.tds" or next.script = "rfi_marm_id.tds"
		if next.aspect ! red and next.aspect ! off
			.aspect = block
			return
		end
	end
	if nextApproach.aspect = red_short	# Avviso speciale che richiede GG o RGG se il prossimo imperativo è chiuso
		.aspect = red_short         	# A special distant follows, requiring YY or RYY if next main signal is unclear
	else
		.aspect = nothing
	end
end

# a train passed the signal

OnCross:
	return
end
