-- librain.lua

--[[
 Librain plugin for the Laminar Research 747-400 by Paul Blair (toadlife) - toadlife@gmail.com
 Version 1.0
 
 Thank you to:
 
 * 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"	, 10,
	"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.7,
	"librain/glass_0/thrust_factor"		,  0,
	"librain/glass_0/thrust_point/x"	,  -10,
	"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"		,  -10,
	"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.015000,
	"librain/glass_0/wiper_0/pivot/y"    ,  0.230000,
	"librain/glass_0/wiper_0/radius_inner", 0.300000,
	"librain/glass_0/wiper_0/radius_outer", 0.810000,
	"librain/glass_0/wiper_0/angle"      ,  0.07,
	"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"	, -10,
	"librain/glass_1/gravity_point/y"	, -2,
	"librain/glass_1/max_tas"			, 100,
	"librain/glass_1/max_thrust"		, 0,
	"librain/glass_1/slant_factor"		,  0.7,
	"librain/glass_1/thrust_factor"		,  0,
	"librain/glass_1/thrust_point/x"	,  10,
	"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"		,  10,
	"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"    ,  1.035000,
	"librain/glass_1/wiper_0/pivot/y"    ,  0.230000,
	"librain/glass_1/wiper_0/radius_inner", 0.300000,
	"librain/glass_1/wiper_0/radius_outer", 0.810000,
	"librain/glass_1/wiper_0/angle"      ,  -0.07,
	"librain/glass_1/wiper_0/moving"     ,  1,
	"librain/glass_1/obj/load"			,  1,
	
-- cockpit sides

	"librain/glass_2/gravity_factor"	, 1,
	"librain/glass_2/gravity_point/x"	, 0,
	"librain/glass_2/gravity_point/y"	, 2,
	"librain/glass_2/max_thrust"		, 0,
	"librain/glass_2/slant_factor"		,  0.5,
	"librain/glass_2/thrust_factor"		,  0,
	"librain/glass_2/thrust_point/x"	,  10,
	"librain/glass_2/thrust_point/y"	, 0.5,
	"librain/glass_2/wind_factor"		,  1.0,
	"librain/glass_2/wind_normal"		,  0.2,
	"librain/glass_2/wind_point/x"		,  10,
	"librain/glass_2/wind_point/y"		, 0.5,
	"librain/glass_2/max_tas"			, 100,
	"librain/glass_2/obj/filename"		, obj_path .. "cockpit_side_glass.obj",
	"librain/glass_2/obj/pos_offset/x"	,  0,
	"librain/glass_2/obj/pos_offset/y"	,  0,
	"librain/glass_2/obj/pos_offset/z"	, 0,
	"librain/glass_2/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"				,  3,
	"librain/initialize"				,  1,
}

	
local done = false
function update()
-- Check to see if the plane has crashed and deinitialize librain if it has. Not doing so can lead to X-plane crashing
if ((get(globalProperty("sim/flightmodel2/misc/has_crashed"))) == 1) then
set(globalProperty("librain/initialize"), 0)
end
	-- 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
			-- Get the wiper_angle_deg dataref from the plane and translate it into an approriate radian for librain
			local wiper0angle = math.rad(get(globalProperty("sim/flightmodel2/misc/wiper_angle_deg[0]")) - 18			)
			local wiper1angle = wiper0angle * -1
			--local wiper0angle = (get(globalProperty("sim/flightmodel2/misc/wiper_angle_deg[0]")) * 2.5) * 0.01
			--local wiper1angle = (get(globalProperty("sim/flightmodel2/misc/wiper_angle_deg[0]")) * 2.5) * -0.01
			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.2)
			set(globalProperty("librain/glass_1/wiper_0/angle"), -0.2)
		end
		return end
	done = true
	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 Laminar Research 747-400 (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

