'##############
'Wiper Script
'Скрипт стеклоочистителей
'##############

'Controls Wiper

'(c) 20.03.2009 Marcel Kuhnt

'Script Version: 1.0
'Omsi release: 1.0

'Needs:
'- rain
'- dirt

'Revision History:
'- Marcel Kuhnt		20.03.2009	Last Change	
'- Marcel Kuhnt		13.06.2009	Added Switch-Vars	Добавлены переменные переключателей
'- Marcel Kuhnt		13.06.2009	Added Wiper/Washer Function Добавлены функции стелоочистителей/омывателя
'- Marcel Kuhnt		21.06.2009	Added AI-Activation Для ИИ-автобусов
'- Rьdiger Hьlsmann	14.05.2010	Added wiperpos_2xspeed for sinusdial movement during half a period
'-								Добавлен wiperpos_2xspeed для движения в 2 раза меньший период
'- Яковлев Вячеслав 17.11.2011	Убран интервальный режим дворников
'- Яковлев Вячеслав 20.11.2011	Работа дворников полностью разделена, добавлено включение через переключатель
'-								отлажена работа дворников

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

{macro:wiper_init}
	0 (S.L.wiperrun) (S.L.wiperrun_L) (S.L.wiperrun_R)
{end}

{macro:wiper_frame}

'-------------------------------------------
'AI-Einfluss auf den Scheibenwischer: Для ИИ-автобусов
'Nur wenn Motor an sein soll: В случае, если двигатель:
	(L.L.AI) (L.L.AI_Engine) 1 = &&
	{if}
'Wenn der Intervallwischer nicht ausreicht, dann Dauermodus: Если интервальный режим не нужен, то включается непрерывный
'Л-5256: Если идут сильные осадки, то включаются оба дворника		
		(C.L.wiper_intervall) (L.L.PrecipRate) * (C.L.rain_wiper_eff) >
		{if}
			1 (S.L.wiper_einaus_sw_L) (S.L.wiper_einaus_sw_R) (S.L.cp_dvornik_left) (S.L.cp_dvornik_right)
		{else}
'Sonst (falls es regnet) den Intervallmodus: Иначе (если идет дождь), то включается интервальный
'Л-5256: Если идут несильные осадки, то включается левый дворник
			(L.L.PrecipRate) 0 >
			{if}
				1 (S.L.wiper_einaus_sw_L) (S.L.cp_dvornik_left)
				0 (S.L.wiper_einaus_sw_R) (S.L.cp_dvornik_right)
			{else}
'Л-5256: Иначе дворники выключены
				0 (S.L.wiper_einaus_sw_L) (S.L.wiper_einaus_sw_R) (S.L.cp_dvornik_left) (S.L.cp_dvornik_right)
			{endif}
		{endif}
	{else}
		0 (S.L.wiperrunning)
	{endif}

'	Условия включения дворников
	(L.L.elec_busbar_main)
	{if}

'		Для левого дворника			
		(L.L.wiperrunning_L) 1 =
		{if}
			(L.L.wiperrun_L) (L.S.Timegap) (L.L.wiper_speed_L) * + (S.L.wiperrun_L)
		{endif}
	
		(L.L.wiperrun_L) 2 pi * >
		{if}
			(L.L.wiper_einaus_sw_L) (L.L.wiper_wascher_sw) || (S.L.wiperrunning_L)
			0 (S.L.wiperrun_L) (S.L.wiperrunning_L)
		{endif}
	
		(L.L.wiperrunning_L) ! (L.L.wiper_einaus_sw_L) (L.L.wiper_wascher_sw) || &&
		{if}
			1 (S.L.wiperrunning_L)
			(T.L.wiper_start)
			(L.L.Rain_Window_Wiped_Wetness_L) 0 =
			{if}
				(T.L.wiper_start_dry)
			{endif}
		{endif}

'		Для правого дворника			
		(L.L.wiperrunning_R) 1 =
		{if}
			(L.L.wiperrun_R) (L.S.Timegap) (L.L.wiper_speed_R) * + (S.L.wiperrun_R)
		{endif}
	
		(L.L.wiperrun_R) 2 pi * >
		{if}
			(L.L.wiper_einaus_sw_R) (L.L.wiper_wascher_sw) || (S.L.wiperrunning_R)
			0 (S.L.wiperrun_R) (S.L.wiperrunning_R)
		{endif}
	
		(L.L.wiperrunning_R) ! (L.L.wiper_einaus_sw_R) (L.L.wiper_wascher_sw) || &&
		{if}
			1 (S.L.wiperrunning_R)
			(T.L.wiper_start)
			(L.L.Rain_Window_Wiped_Wetness_R) 0 =
			{if}
				(T.L.wiper_start_dry)
			{endif}
		{endif}

'		Включение стеклоомывателя		
		(L.L.wiper_wascher_sw)
		{if}
			(L.L.wiper_wash) !
			{if}
				(T.L.wiper_wash_start)
			{endif}
			1 (S.L.wiper_wash)
			(L.L.wiper_wash_texpos) 3 (L.S.Timegap) * - (S.L.wiper_wash_texpos)
		{else}
			0 (S.L.wiper_wash)
		{endif}

'		Wischer Intervall Интервальный режим
'		(L.L.wiper_intervall_sw) (L.L.wiper_intervall_on) ! && (L.L.wiper_intervall_time) (C.L.wiper_intervall) > ||
'		{if}
'			(L.L.wiperrunning) !
'			{if}
'				(T.L.wiper_start)
'				(L.L.Rain_Window_Wiped_Wetness) 0 =
'				{if}
'					(T.L.wiper_start_dry)
'				{endif}
'			{endif}
'			1 (S.L.wiper_intervall_on) (S.L.wiperrunning)
'			(L.S.GetTime) (S.L.wiper_intervall_starttime)
'		{endif}

	{else}
		0 (S.L.wiperrunning) (L.L.wiperrunning_L) (L.L.wiperrunning_R)
	{endif}


'	(L.L.wiperrun) 1.5 pi * + sin 1 + 2 / (S.L.wiperpos) (S.L.Rain_Wiper_Pos) (S.L.Dirt_Wiper_Pos)

	(L.L.wiperrun_L) 1.5 pi * + sin 1 + 2 / (S.L.wiperpos_L) (S.L.Rain_Wiper_Pos_L) (S.L.Dirt_Wiper_Pos)
	(L.L.wiperrun_R) 1.5 pi * + sin 1 + 2 / (S.L.wiperpos_R) (S.L.Rain_Wiper_Pos_R) (S.L.Dirt_Wiper_Pos)  	

'	(L.L.wiperrun) 2 * 1.5 pi * + sin 1 + 2 / (S.L.wiperpos_2xspeed)

'	Если включены оба переключателя дворников, то скорость увеличивается

	(L.L.wiper_einaus_sw_L) (L.L.wiper_einaus_sw_R) &&
	{if}
		2.9 (S.L.wiper_speed_L)
		3 (S.L.wiper_speed_R)
	{else}
		2.5 (S.L.wiper_speed_L)
		2.6 (S.L.wiper_speed_R)
	{endif}




	
'	(L.L.wiper_intervall_sw) !
'	{if}
'		0 (S.L.wiper_intervall_on)
'	{endif}

'	(L.L.wiper_intervall_on)
'	{if}
'		(L.S.getTime) (L.L.wiper_intervall_starttime) - (S.L.wiper_intervall_time)
'	{else}
'		0 (S.L.wiper_intervall_time)
'	{endif}







'Wiper function (wetness remove): Функции дворников- очистка стекла	

	(L.L.Rain_Window_Wiped_Wetness_L)	
'   Calc Diff.: Расчет разницы
	(L.L.Rain_Wiper_Pos_L) (L.L.Rain_Wiper_Pos_Prev_L) - abs
'   Multiply with wiper effectivity Умножить на эффективность щетки
	(C.L.rain_wiper_eff) *
'   Subtract and set Вычислить и задать
	 -
	0 max
	(S.L.Rain_Window_Wiped_Wetness_L)

	(L.L.Rain_Wiper_Pos_L) (S.L.Rain_Wiper_Pos_Prev_L)
	
		
	(L.L.Rain_Window_Wiped_Wetness_R)	
	(L.L.Rain_Wiper_Pos_R) (L.L.Rain_Wiper_Pos_Prev_R) - abs
	(C.L.rain_wiper_eff) *
	 -
	0 max
	(S.L.Rain_Window_Wiped_Wetness_R)

	(L.L.Rain_Wiper_Pos_R) (S.L.Rain_Wiper_Pos_Prev_R)


'Wiper function (dirt remove):	Удаление грязи

	(L.L.Rain_Window_Wiped_Wetness_L) 
	(L.L.Rain_Window_Wiped_Wetness_R) 
	(L.L.wiper_wascher_sw) 
	(L.L.wiperrunning) && 
	(L.L.wiperrunning_L) &&
	(L.L.wiperrunning_R) && ||
	{if}
	
		(L.L.Dirt_Wiped)	
'  	Calc Diff.:
		(L.L.Dirt_Wiper_Pos) (L.L.Dirt_wiper_Pos_Prev) - abs
'   	Multiply with wiper effectivity
		(C.L.Dirt_wiper_eff) *
'  	Subtract and set
		 -
		0 max
		(S.L.Dirt_Wiped)
	
		(L.L.Dirt_Wiper_Pos) (S.L.Dirt_Wiper_Pos_Prev)
	{endif}


'Washer wetness Стеклоомыватель

	(L.L.wiper_wash)
	{if}
		(L.S.Timegap) 0.5 * s0

		(L.L.Rain_Window_Front_Wetness) l0
		+ 1 min 0 max
		(S.L.Rain_Window_Front_Wetness)
	
		(L.S.Timegap) s0

		(L.L.Rain_Window_Wiped_Wetness_L) l0
		+ 1 min 0 max
		(S.L.Rain_Window_Wiped_Wetness_L)
		
		(L.L.Rain_Window_Wiped_Wetness_R) l0
		+ 1 min 0 max
		(S.L.Rain_Window_Wiped_Wetness_R)
	{endif}
	
{end}
