-- librain.lua

--[[
 Librain plugin for the Let L-410 Turbolet Passenger/Freighter by Paul Blair (toadlife) - toadlife@gmail.com
 Version 1.0
 
 Thank you to:
 
 * ksgy for the plane
 * Lionel for the SASL/librain plugin tutorial (https://forums.x-plane.org/index.php?/forums/topic/186573-your-first-sasl-plugin-configuring-librain-plugin-for-dr401/)
 * Saso Kiselkov for the librain plugin
 * My son Christian for the (multiple) Blender lessons

]]--

-- check if librain.plugin is present, otherwise bail out
-- in both case send message to log file
if findPluginBySignature("skiselkov.librain") == NO_PLUGIN_ID then
	logInfo("librain.plugin by Saso Kiselkov not found, disabling rain effects")
	return
end
logInfo("librain.plugin by Saso Kiselkov found")


-- prefix for objects used by librain
local obj_path	= getAircraftPath() .. "/objects/librain/"

-- pairs of dataref/value
local drf	= {
	"librain/verbose"			, 0,
	"librain/debug_draw"		, 0,
	"librain/wipers_visible"	, 0,


-- port windscreen
	"librain/glass_0/gravity_factor"	, 1,
	"librain/glass_0/gravity_point/x"	, 0.1,
	"librain/glass_0/gravity_point/y"	, 2,
	"librain/glass_0/max_tas"			, 100,
	"librain/glass_0/max_thrust"		, 0,
	"librain/glass_0/slant_factor"		,  0.8,
	"librain/glass_0/thrust_factor"		,  0,
	"librain/glass_0/thrust_point/x"	,  0.4,
	"librain/glass_0/thrust_point/y"	, -2,
	"librain/glass_0/wind_factor"		,  1.0,
	"librain/glass_0/wind_normal"		,  0.8,
	"librain/glass_0/wind_point/x"		,  0.4,
	"librain/glass_0/wind_point/y"		, -2,
	"librain/glass_0/obj/filename"		, obj_path .. "port_windscreen.obj",
	"librain/glass_0/obj/pos_offset/x"	,  0,
	"librain/glass_0/obj/pos_offset/y"	,  0,
	"librain/glass_0/obj/pos_offset/z"	, 0,
	"librain/glass_0/wiper_0/pivot/x"    ,  0.050000,
	"librain/glass_0/wiper_0/pivot/y"    ,  0.2,
	"librain/glass_0/wiper_0/radius_inner", 0.28,
	"librain/glass_0/wiper_0/radius_outer", 0.67,
	"librain/glass_0/wiper_0/angle"      ,  0,
	"librain/glass_0/wiper_0/moving"     ,  1,
	"librain/glass_0/obj/load"			,  1,
	
-- starboard windscreen
	"librain/glass_1/gravity_factor"	, 1,
	"librain/glass_1/gravity_point/x"	, 0.9,
	"librain/glass_1/gravity_point/y"	, 2.0,
	"librain/glass_1/max_tas"			, 100,
	"librain/glass_1/max_thrust"		, 0,
	"librain/glass_1/slant_factor"		,  0.8,
	"librain/glass_1/thrust_factor"		,  0,
	"librain/glass_1/thrust_point/x"	,  0.8,
	"librain/glass_1/thrust_point/y"	, -2,
	"librain/glass_1/wind_factor"		,  1.0,
	"librain/glass_1/wind_normal"		,  0.8,
	"librain/glass_1/wind_point/x"		,  0.8,
	"librain/glass_1/wind_point/y"		, -2,
	"librain/glass_1/obj/filename"		, obj_path .. "starboard_windscreen.obj",
	"librain/glass_1/obj/pos_offset/x"	,  0,
	"librain/glass_1/obj/pos_offset/y"	,  0,
	"librain/glass_1/obj/pos_offset/z"	, 0,
	"librain/glass_1/wiper_0/pivot/x"    ,  0.95,
	"librain/glass_1/wiper_0/pivot/y"    ,  0.2,
	"librain/glass_1/wiper_0/radius_inner", 0.28,
	"librain/glass_1/wiper_0/radius_outer", 0.67,
	"librain/glass_1/wiper_0/angle"      ,  0,
	"librain/glass_1/wiper_0/moving"     ,  1,
	"librain/glass_1/obj/load"			,  1,

-- cockpit side glass

	"librain/glass_2/slant_factor"		, 0.7,
	"librain/glass_2/thrust_point/x"	, 1.5,
	"librain/glass_2/thrust_point/y"	, 0.2,
	"librain/glass_2/thrust_factor"		, 0,
	"librain/glass_2/max_thrust"		, 0,
	"librain/glass_2/gravity_point/x"	, 0.2,
	"librain/glass_2/gravity_point/y"	, 1.5,
	"librain/glass_2/gravity_factor"	, 1,
	"librain/glass_2/wind_point/x"		, 1.5,
	"librain/glass_2/wind_point/y"		, 0.2,
	"librain/glass_2/wind_factor"		,  0.8,
	"librain/glass_2/wind_normal"		,  0.1,
	"librain/glass_2/max_tas"			, 100,
	"librain/glass_2/obj/filename"		, obj_path .. "cockpit_side_windows.obj",
	"librain/glass_2/obj/load"			, 1,
	
-- passenger glass


	"librain/glass_3/slant_factor"		, 0.5,
	"librain/glass_3/thrust_point/x"	, 1,
	"librain/glass_3/thrust_point/y"	, 0.5,
	"librain/glass_3/thrust_factor"		, 0,
	"librain/glass_3/max_thrust"		, 0,
	"librain/glass_3/gravity_point/x"	, 0.5,
	"librain/glass_3/gravity_point/y"	, 1,
	"librain/glass_3/gravity_factor"	, 1,
	"librain/glass_3/wind_point/x"		, 1,
	"librain/glass_3/wind_point/y"		, 0.5,
	"librain/glass_3/wind_factor"		,  0.8,
	"librain/glass_3/wind_normal"		,  0.1,
	"librain/glass_3/max_tas"			, 100,
	"librain/glass_3/obj/filename"		, obj_path .. "passenger_windows.obj",
	"librain/glass_3/obj/load"			, 1,
	

	"librain/z_depth_obj_0/filename"	, obj_path .. "mask.obj",
	"librain/z_depth_obj_0/pos_offset/x",  0,
	"librain/z_depth_obj_0/pos_offset/y",  0,
	"librain/z_depth_obj_0/pos_offset/z", 0,
	"librain/z_depth_obj_0/load"		,  1,

	"librain/num_glass_use"				,  4,
	"librain/initialize"				,  1,
}

	
local done = false
function update()
	-- do the initialization on first frame only
	if done then 
		-- Initialization is done, so let's check the wipers
		-- Check to see if the wipers are on
		if (get(globalProperty("sim/cockpit2/switches/wiper_speed"))) > 0 then
			-- wipers are on
			wipers_on = true
			-- Test to see which way the wiper is moving and then translate the angle into an approriate radian for librain
			wiper0angle = math.rad((get(globalProperty("sim/flightmodel2/misc/wiper_angle_deg[0]")) * 1.35) + 23)
			wiper1angle = wiper0angle * -1
			set(globalProperty("librain/glass_0/wiper_0/radius_outer"), 0.60 + (wiper0angle * 0.18))
			set(globalProperty("librain/glass_1/wiper_0/radius_outer"), 0.60 + (wiper0angle * 0.18))
			set(globalProperty("librain/glass_0/wiper_0/angle"), wiper0angle)
			set(globalProperty("librain/glass_1/wiper_0/angle"), wiper1angle)
		else
			-- wipers are off
			-- Reset the angle of the wipers to 0
			set(globalProperty("librain/glass_0/wiper_0/angle"), 0)
			set(globalProperty("librain/glass_1/wiper_0/angle"), 0)
		end
		return end
	done = true
	-- librain will crash the game if it's already initialized
	set(globalProperty("librain/initialize"), 0)
	-- populate datarefs, last one being initialize
	for i = 1, #drf, 2 do
		set(globalProperty(drf[i]), drf[i+1])
	end
	logInfo("Librain plugin for the ksgy Let L-410 Turbolet Passenger/Freighter (1.0) by Paul Blair (toadlife) - toadlife@gmail.com")
	logInfo("librain initialization complete")
end

function aircraft_unload()
	set(globalProperty("librain/initialize"), 0)
end

function flight_crash()
	set(globalProperty("librain/initialize"), 0)
end

