'##############
'Matrix Script
'##############

'Simulates 80s style Matrix Line and Terminus Display (Type Annax)

'(c) 13.04.2010 Marcel Kuhnt

'Script Version: 1.1
'Omsi release: 1.0

'Needs:
'- Cockpit (Batterietrennschalter)
'- IBIS


'Revision History:
'- Marcel Kuhnt		10.08.2009	Added Revision History
'- Marcel Kuhnt		13.04.2010	Added Line List Script
'- Marcel Kuhnt		23.04.2010	Line right formatted
'-Varios: http://www.omnibussimulator.de/forum/index.php?page=Thread&postID=144480#post144480
'- Marcos Elias omsi.com.br	18.07.2012              Edit for 1-line matrix
'- Marcos Elias omsi.com.br	14.09.2013              Sao Paulo-like changing Matrix (4 or 6 digit, XXXX-YY)
'- Marcos Elias omsi.com.br	01.10.2013	Placas laterais e dianteiras estilo Sao Paulo
'- Marcos Elias omsi.com.br	11.10.2013	Alteracoes e simplificacoes, letreiro de um estado so mesclado a 3 fases

'------------------------------------------------------------------------------------------


{macro:Matrix_init}
	0 (S.L.Matrix_TerminusIndex_Last)
	0 (S.L.Matrix_Nr_Last)
	"" (S.$.Matrix_Terminus)
	"" (S.$.Matrix_Nr)
	"" (S.$.Matrix_TerminusPlacaLinha)
	"" (S.$.Matrix_TerminusPlacaDaFrente)
	"" (S.$.Matrix_Terminus_NaoAnimado)
{end}


{trigger:ai_scheduled_settarget}

'Stromversorgung herstellen:
	1 (S.L.elec_busbar_main_sw)	
	1.0 (S.L.elec_V_battery)

'Hier wird die Nummer eingestellt:
	(L.$.SetLineTo) 7 $SetLengthL (S.$.Matrix_Nr)

'Hier wird das Ziel eingestellt:
	1 (S.L.elec_busbar_main_sw)
	(L.L.AI_target_index) (S.L.IBIS_TerminusIndex) (M.V.GetTerminusCode) (S.L.Debug_2) (S.L.IBIS_TerminusCode)

{end}


{macro:Matrix_frame}

' Se o bus estiver desligado, entao apaga tudo

(L.L.elec_busbar_main) !
{if}
'Aqui q tava o bug q desliga e nao atualiza a linha, fiz diferente, usando o elec main pra aparecer ou n o letreiro
'	"" (S.$.Matrix_Terminus)
'	"" (S.$.Matrix_Nr)
'	"" (S.$.Matrix_TerminusPlacaLinha)
'	"" (S.$.Matrix_TerminusPlacaDaFrente)
'	"" (S.$.Matrix_Terminus_NaoAnimado)
'	1 (S.L.Matrix_TerminusCreateString)
{else}

'******************************+
'    Terminus-Matrix
'******************************+

' Zeitdifferenz:
	(L.S.GetTime) (L.L.Matrix_TerminusActTimer) - s2

	l2 0 <
	{if}
		(L.S.GetTime) (S.L.Matrix_TerminusActTimer) 0 s2
		1 (S.L.Matrix_TerminusCreateString)
	{endif}

' BAGULHO IMPORTANTE PRA MSGS DO IBIS!!!! SEPA DAP RA FAZER AS LETRAS! ex
' Ob der Suffix >= 26 ist, speichere in s4: 1 = A, 2 = B, 3 = C, 4 = D... etc
' Ob der Suffix >= 94 ist, speichere in s4:
	(L.L.IBIS_Linie_Suffix) 94 >= s4


' Wenn sich das neue Ziel vom alten unterscheidet, dann wechsele:

	l4 ! (L.L.IBIS_TerminusIndex) s0 (L.L.Matrix_TerminusIndex_Last) = ! &&

' ODER wenn die Nummer eine "zielbeeinflussende" ist und ungleich dem negativen Matrix_terminusIndex_Last:

	l4 (L.L.IBIS_Linie_Suffix) s1 /-/ (L.L.Matrix_TerminusIndex_Last) = ! && ||
	(L.L.elec_busbar_main) &&
	{if}
		l2 (C.L.Matrix_Waittime) (C.L.Matrix_Changetime_Terminus) 3.5 * + <
		{if}
			l2 (C.L.Matrix_Waittime) >
			{if}
'CODIGOS ESPECIAIS, DO 94 PRA FRENTE
'USE DEPOIS DO NUMERO DA LINHA (NAO EH ROUTE NEM ZIEL!)
				(L.L.Matrix_TerminusCreateString)
				{if}

'Atribui os valores a variaveis de texto minhas, mais facil pra puxar dps do q ficar com a macro gigante

l0 1 (M.V.GetTerminusString) 33 $SetLengthL (S.$.MEP_LetreiroLinha1)
l0 2 (M.V.GetTerminusString) 33 $SetLengthL (S.$.MEP_LetreiroLinha2)
l0 3 (M.V.GetTerminusString) 33 $SetLengthL (S.$.MEP_LetreiroLinha3)


					l1 94 =
					{if}
						"  RESERVADO " (S.$.Matrix_NewTerminus)
						"RESERV." (S.$.Matrix_Nr)
						"" (S.$.Matrix_TerminusPlacaDaFrente)
					{else}
					l1 95 = (L.L.Matrix_ChangeCounter) ! &&
					{if}
						"xxxxxxxxxxxxxxxx" (S.$.Matrix_NewTerminus)
						"xxxxxxx" (S.$.Matrix_Nr)
						"xxxxxxxxxxxxxxxx" (S.$.Matrix_TerminusPlacaDaFrente)
					{else}
					l1 95 =
					{if}
						"" (S.$.Matrix_NewTerminus)
						"" (S.$.Matrix_Nr)
						"" (S.$.Matrix_TerminusPlacaDaFrente)
					{else}
					l1 96 = (L.L.Matrix_ChangeCounter) ! &&
					{if}
						"WWW.OMSI.COM.BR" (S.$.Matrix_NewTerminus)
						"xxxxxxx" (S.$.Matrix_Nr)
						"QUADBUS II" (S.$.Matrix_TerminusPlacaDaFrente)
					{else}
					l1 96 =
					{if}
						" MEP QUADBUS II" (S.$.Matrix_NewTerminus)
						"QUADBUS II" (S.$.Matrix_Nr)
						"WWW.OMSI.COM.BR" (S.$.Matrix_TerminusPlacaDaFrente)
					{else}
					l1 97 =
					{if}
						"" (S.$.Matrix_NewTerminus)
						"" (S.$.Matrix_Nr)
						"" (S.$.Matrix_TerminusPlacaDaFrente)
					{else}


'AQUI EH A COISA IMPORTANTE, DPS DAS PLACAS VAI O CONTADOR DO LETREIRO

' Atualiza a textura DA PLACA, os 2 primeiros desativados pq bugou
'	4 "..\..\Anzeigen\Rollband_SD79\" (M.V.GetTerminusString) $+ (S.$.Rollband_Tex_V)
'	l0 1 + 4 "..\..\Anzeigen\Rollband_SD79\" (M.V.GetTerminusString) $+ (S.$.Rollband_Tex_H)

' *************** 
' *************** 
' *************** foddaaaa esse funcionaaaaaaaaaaaaaaaaaaaaaaaaaaaa
' *************** 
' *************** 


' ####################### PLACA DA FRENTE COMECO ############################
' primero, puxa a textura da linha 4 do hof que todo mapa tem e joga na variavel da placa, com o nome do arquivo da lona
l0 4 (M.V.GetTerminusString) (S.$.Bitmap_MEP_Placa_Frente)

'depois add um nome antes identificando q eh a placa da frente
'exemplo: se a textura tradicional no hof eh mep_circularii.png, a placa do quadbus sera placafrente_mep_circularii.png
"placafrente_" (L.$.Bitmap_MEP_Placa_Frente) $+ (S.$.Bitmap_MEP_Placa_Frente)

'por fim, add antes o caminho da pasta completa pro omsi poder pegar a textura final
"..\..\Anzeigen\Placas_MEPQuadbus_OMSI.com.br\" (L.$.Bitmap_MEP_Placa_Frente) $+ (S.$.Bitmap_MEP_Placa_Frente)
' ############################### PLACA DA FRENTE FIM ##########################

' ####################### PLACA LATERAL COMECO ############################
' primero, puxa a textura da linha 4 do hof que todo mapa tem e joga na variavel da placa, com o nome do arquivo da lona
l0 4 (M.V.GetTerminusString) (S.$.Bitmap_MEP_Placa_Via)

'depois add um nome antes identificando q eh a placa *DA VIA*
'exemplo: se a textura tradicional no hof eh mep_circularii.png, a placa do quadbus sera placafrente_mep_circularii.png
"placavia_" (L.$.Bitmap_MEP_Placa_Via) $+ (S.$.Bitmap_MEP_Placa_Via)

'por fim, add antes o caminho da pasta completa pro omsi poder pegar a textura final
"..\..\Anzeigen\Placas_MEPQuadbus_OMSI.com.br\" (L.$.Bitmap_MEP_Placa_Via) $+ (S.$.Bitmap_MEP_Placa_Via)
' ############################### PLACA LATERAL FIM ##########################


' ####################### PLACA LATERAL COMECO ############################
' primero, puxa a textura da linha 4 do hof que todo mapa tem e joga na variavel da placa, com o nome do arquivo da lona
l0 4 (M.V.GetTerminusString) (S.$.Bitmap_MEP_Placa_Lateral)

'depois add um nome antes identificando q eh a placa *LATERAL*
'exemplo: se a textura tradicional no hof eh mep_circularii.png, a placa do quadbus sera placafrente_mep_circularii.png
"placalateral_" (L.$.Bitmap_MEP_Placa_Lateral) $+ (S.$.Bitmap_MEP_Placa_Lateral)

'por fim, add antes o caminho da pasta completa pro omsi poder pegar a textura final
"..\..\Anzeigen\Placas_MEPQuadbus_OMSI.com.br\" (L.$.Bitmap_MEP_Placa_Lateral) $+ (S.$.Bitmap_MEP_Placa_Lateral)
' ############################### PLACA LATERAL FIM ##########################


'	TESTE ESTATICO ABAIXO SO PRA VER MSM
'	"..\..\Anzeigen\Rollband_SD79\" "Bln_Am Kiesteich.tga" $+ (S.$.Rollband_Tex_V)


'	AGORA O CONTADOR PRA TROCAR DE ACORDO COM AS FASES!!!


'MEP MATRIX TEXTO FIXO COMECO: if eh texto fixo, entao nao usara o changecounter!!!! else, usara!!! VER O FIM DO IF!!!!
'MEP_Matrix_Fixa eh configurada no IBIS.osc pelo evento do botão
(L.L.MEP_Matrix_Fixa) 1 =
{if}
	
(L.$.Matrix_Nr) 4 $SetLengthL (S.$.Matrix_NewTerminus)
(L.$.Matrix_NewTerminus) " " $+
(L.$.MEP_LetreiroLinha3) $+ (S.$.Matrix_NewTerminus)

'(L.$.MEP_LetreiroLinha3) 33 $SetLengthL (S.$.Matrix_NewTerminus)

'E a placa da frente
(L.$.MEP_LetreiroLinha3) 100 $SetLengthL (S.$.Matrix_TerminusPlacaDaFrente)


{else}

					(L.L.Matrix_ChangeCounter) 0 =
	
                                        {if}
						
'Linha principal primeira fase
						"  LINHA " (L.$.Matrix_Nr) $+ 33 $SetLengthL (S.$.Matrix_NewTerminus)

'Versão fixa sem piscar, pega so 4 digitos sem o -21 -31 etc
						(L.$.Matrix_Nr) 5 $SetLengthR (S.$.Matrix_Terminus_NaoAnimado)
						(L.$.Matrix_Terminus_NaoAnimado) " " $+
						(L.$.MEP_LetreiroLinha3) $+ (S.$.Matrix_Terminus_NaoAnimado)

	
'DESATIVADO		'DESATIVADO		'DESATIVADO	(L.$.Matrix_Nr) (S.$.Matrix_TerminusPlacaLinha)
						(L.$.MEP_LetreiroLinha1) 100 $SetLengthL (S.$.Matrix_TerminusPlacaDaFrente)


					{else}
						
					(L.L.Matrix_ChangeCounter) 1 =
						{if} 
							(L.$.MEP_LetreiroLinha1) 33 $SetLengthL (S.$.Matrix_NewTerminus)
						{else}
					(L.L.Matrix_ChangeCounter) 2 =
							{if}
							(L.$.MEP_LetreiroLinha2) 33 $SetLengthL (S.$.Matrix_NewTerminus)
							(L.$.MEP_LetreiroLinha2) 100 $SetLengthL (S.$.Matrix_TerminusPlacaDaFrente)	
							{else}	
					(L.L.Matrix_ChangeCounter) 3 =
							{if}
							(L.$.MEP_MsgMatrix1) 33 $SetLengthL (S.$.Matrix_NewTerminus)
							{endif}	

{endif}

'MEP MATRIX TEXTO FIXO FIM: if eh texto fixo, entao nao usara o changecounter!!!! else, usara!!! VER O FIM DO IF!!!!

					{endif}
					{endif}
					{endif}
					{endif}
					{endif}
					{endif}
					{endif}
					{endif}
					{endif}
					0 (S.L.Matrix_TerminusCreateString)
					(T.L.ev_Matrix_Terminus_change)
'Das soeben in den temporären Speicher geschriebene Ziel:
					l4
					{if}
						l1 /-/ 
					{else}
						l0 
					{endif}
					(S.L.Matrix_TerminusAct)
				{endif}

'Zahl von aktualisierten Zeichen:

'DDT			l2 (C.L.Matrix_Waittime) - 0 max 33 * (C.L.Matrix_Changetime_Terminus) / trunc 50 min s3
'^ddt = 'DESATIVADO DESEMPENHO TESTE
'DESATIVADO DESEMPENHO TESTE				l3 1 >=
'DESATIVADO DESEMPENHO TESTE				{if}
'DESATIVADO DESEMPENHO TESTE					(L.$.Matrix_NewTerminus) l3 $SetLengthL
'DESATIVADO DESEMPENHO TESTE					(L.$.Matrix_Terminus) 50 l3 - $SetLengthR $+
'DESATIVADO DESEMPENHO TESTE					(S.$.Matrix_Terminus)
'DESATIVADO DESEMPENHO TESTE				{endif}
			{endif}
		{else}

'Aumenta o valor do contador, dps verifica se ta no limite pra voltar ele pra zero pra quantidade de fases..
				(L.L.Matrix_ChangeCounter) 1 + (S.L.Matrix_ChangeCounter)

(L.L.Matrix_ChangeCounter) 4 >=
{if}
0 (S.L.Matrix_ChangeCounter)
{endif}

' define valor inicial pra evitar erro, ta foda variar por data e horario
"  VEICULO  NOVO  " (S.$.MEP_MsgMatrix1)


'Hierdurch wird der Wechsel der Nummern-Matrix initiiert:
'				-1 (S.L.Matrix_Nr_Last)
			1 (S.L.Matrix_TerminusCreateString)
			(L.S.GetTime) (S.L.Matrix_TerminusActTimer)
			(L.$.Matrix_NewTerminus) (S.$.Matrix_Terminus)
			(L.L.Matrix_TerminusAct) (S.L.target_index_int)
		{endif}

'Omsi sagen, dass die Strings-Ausgaben aktualisiert werden sollen:
		1 (S.L.Refresh_Strings)
	
	{else}
		(L.S.GetTime) (S.L.Matrix_TerminusActTimer)
		1 (S.L.Matrix_TerminusCreateString)

	{endif}

'******************************+
'    Nr-Matrix
'******************************+

' Zeitdifferenz:
	(L.S.GetTime) (L.L.Matrix_NrActTimer) - s2

	l2 0 <
	{if}
		(L.S.GetTime) (S.L.Matrix_NrActTimer) 0 s2
		1 (S.L.Matrix_NrCreateString)
	{endif}

' Wenn sich die neue Linie von der alten unterscheidet, dann wechsele:
'desativa sapoha pra fazer atualizar a linha MESMO SE FOR IGUAL
'isso permite ativar mais rapido o /31 /21 etc
'tem q ver se não ferra o desempenho

'se destativar isso deixar so ate o s0  complex... os AIs bugam pq vao tar com o ibis sem a linha entrada!
'letreiro atualiza qd clica no 10 41 31 etc mas AIs ficam zuados
	(L.L.IBIS_Linie_Complex) s0 (L.L.IBIS_Linie_Complex) s0 (L.L.Matrix_Nr_Last) = ! 
	(L.L.elec_busbar_main) &&
	{if}
		l2 (C.L.Matrix_Waittime) (C.L.Matrix_Changetime_Nr) 1.5 * + <
		{if}
			l2 (C.L.Matrix_Waittime) >
			{if}
' Nur beim ersten Mal:
				(L.L.Matrix_NrCreateString)
				{if}
					l0 100 / trunc s1
					(L.L.IBIS_Linie_Suffix) s4
' l0: Originalzahl; l1: erste drei Ziffern; l4: letzte zwei Ziffern

' Falls gleich 0, dann gar nix:
					l1 0 =
					{if}
						""
					{else}
' Sonst die normale Nummer:
						l1 trunc $IntToStr
					{endif}

					(S.$.Matrix_NewNr)

' ===============================================================================
' Falls jetzt die hinteren beiden Ziffern (l2) etwas Interessantes enthalten:
' ===============================================================================


' SE TERMINAR EM 88 NAO FAZ NADA, DEIXA O NUMERO NORMAL, nao use 88 pra mais nd

' NUMEROS! vai do 00 ao 09 pra 0 a 9, a letras usam a dezena seguinte

					l4 00 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "0" $+
					{endif}
					l4 10 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "1" $+
					{endif}
					l4 20 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "2" $+
					{endif}
					l4 30 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "3" $+
					{endif}
					l4 40 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "4" $+
					{endif}
					l4 50 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "5" $+
					{endif}
					l4 60 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "6" $+
					{endif}
					l4 70 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "7" $+
					{endif}
					l4 80 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "8" $+
					{endif}
					l4 90 =
					{if}
					(L.$.Matrix_NewNr) 3 $SetLengthR "9" $+
					{endif}

' LETRAS!

					l4 11 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "A" $+
					{endif}
					l4 12 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "B" $+
					{endif}
					l4 13 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "C" $+
					{endif}
					l4 14 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "D" $+
					{endif}
					l4 15 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "E" $+
					{endif}
					l4 16 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "F" $+
					{endif}

					l4 17 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "G" $+
					{endif}
					l4 18 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "H" $+
					{endif}
					l4 19 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "I" $+
					{endif}
					l4 21 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "J" $+
					{endif}
					l4 22 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "K" $+
					{endif}
					l4 23 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "L" $+
					{endif}
					l4 24 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "M" $+
					{endif}

					l4 25 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "N" $+
					{endif}

					l4 26 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "O" $+
					{endif}
' 24 s.o. bei 5!
					l4 27 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "P" $+
					{endif}
					l4 28 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "Q" $+
					{endif}
					l4 29 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "R" $+
					{endif}
					l4 31 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "S" $+
					{endif}
					l4 32 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "T" $+
					{endif}
					l4 33 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "U" $+
					{endif}
					l4 34 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "V" $+
					{endif}
					l4 35 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "W" $+
					{endif}
					l4 36 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "X" $+
					{endif}
					l4 37 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "Y" $+
					{endif}
					l4 38 =
					{if}
						(L.$.Matrix_NewNr) 3 $SetLengthR "Z" $+
					{endif}
					l4 39 =
					{if}
						"RECOLHE" $+
					{endif}
					l4 41 =
					{if}
						"RESERV." $+
					{endif}
					l4 98 = (L.L.Matrix_ChangeCounter) &&
					{if}
						"yxy"
					{else}
					l4 98 =
					{if}
						"xyx"
					{endif}
					{endif}
					l4 99 = (L.L.Matrix_ChangeCounter) &&
					{if}
						"   "
					{else}
					l4 99 =
					{if}
						"zzz"
					{endif}
					{endif}

'D oder SD? Das ist hier die Frage...: era 7 deixei 4 pq os 3 ultimos são add no final!!! -10 -21 -31 etc
					4 $SetLengthR

					(S.$.Matrix_NewNr)




'Aqui adiciona o codigo da linha e salva a variavel com o codigo (acima ele ta sem o codigo, abaixo fica com ele)

' dps add o numero do codigo da variavel (S.L.IBIS_MEP_CodigoLinha), ta no script do IBIS

					(L.$.Matrix_NewNr) 4 $SetLengthR (L.$.IBIS_MEP_CodigoLinha) $+
					(S.$.Matrix_NewNr)
' agora alinha 7 a esquerda					
					7 $SetLengthR			

					0 (S.L.Matrix_NrCreateString)
					(T.L.ev_Matrix_Line_change)
					l0 (S.L.Matrix_NrAct)
					
				{endif}

'Zahl von aktualisierten Zeichen:

				l2 (C.L.Matrix_Waittime) - 0 max 3 * (C.L.Matrix_Changetime_Nr) / trunc 3 min s3

'				l3 1 >=
				1 1 =
				{if}
					(L.$.Matrix_NewNr) l3 $SetLengthL
'era R deixei L pra ficar a esquerda
					(L.$.Matrix_Nr) 7 l3 - $SetLengthL $+
					(S.$.Matrix_Nr)	
				{endif}

			{endif}
		{else}
			(L.L.Matrix_NrAct) (S.L.Matrix_Nr_Last)
			(L.$.Matrix_NewNr) (S.$.Matrix_Nr)
			1 (S.L.Matrix_NrCreateString)
			(L.S.GetTime) (S.L.Matrix_NrActTimer)
		{endif}		
'Omsi sagen, dass die Strings-Ausgaben aktualisiert werden sollen:
		1 (S.L.Refresh_Strings)
	{else}
		(L.S.GetTime) (S.L.Matrix_NrActTimer)
		1 (S.L.Matrix_NrCreateString)
	{endif}

'Aktualisierung der Code-Tafel:

	"Linienlisten\" (L.$.yard) "_ANX.jpg" $+ $+ (S.$.Matrix_Linelist)

{endif}

{end}
