-- librain.lua

--[[
 Librain plugin for the Metroliner III AC Passenger/Freighter by Paul Blair (toadlife) - toadlife@gmail.com
 version 1.0
 
 Thank you to:
 
 * Starvinpilot 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/)
 * s85skater ("Steve") for the glass objects from Steve's Metro Mod
 * 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,

	"librain/glass_0/slant_factor"		,  0.85,
	"librain/glass_0/thrust_point/x"	,  0.5,
	"librain/glass_0/thrust_point/y"	, -2,
	"librain/glass_0/thrust_factor"		,  0,
	"librain/glass_0/max_thrust"		, 0,
	"librain/glass_0/gravity_point/x"	, 0.5,
	"librain/glass_0/gravity_point/y"	, 0.8,
	"librain/glass_0/gravity_factor"	, 0.8,
	"librain/glass_0/wind_point/x"		,  0.5,
	"librain/glass_0/wind_point/y"		, -2,
	"librain/glass_0/wind_factor"		,  1.0,
	"librain/glass_0/wind_normal"		,  0.8,
	"librain/glass_0/max_tas"			, 100,
	"librain/glass_0/obj/filename"		, obj_path .. "windsheildglass.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.36,
	"librain/glass_0/wiper_0/pivot/y"    ,  0.05,
	"librain/glass_0/wiper_0/radius_inner", 0.18,
	"librain/glass_0/wiper_0/radius_outer", 0.43,
	"librain/glass_0/wiper_0/angle"      ,  0,
	"librain/glass_0/wiper_0/moving"     ,  1,
	"librain/glass_0/wiper_1/pivot/x"    ,  0.64,
	"librain/glass_0/wiper_1/pivot/y"    ,  0.05,
	"librain/glass_0/wiper_1/radius_inner", 0.18,
	"librain/glass_0/wiper_1/radius_outer", 0.43,
	"librain/glass_0/wiper_1/angle"     ,  0,
	"librain/glass_0/wiper_1/moving"     ,  1,
	"librain/glass_0/obj/load"			,  1,

	"librain/glass_1/slant_factor"		, 0.5,
	"librain/glass_1/thrust_point/x"	, 0.50,
	"librain/glass_1/thrust_point/y"	, -2,
	"librain/glass_1/thrust_factor"		, 0,
	"librain/glass_1/max_thrust"		, 0,
	"librain/glass_1/gravity_point/x"	, 0.5,
	"librain/glass_1/gravity_point/y"	, 0.5,
	"librain/glass_1/gravity_factor"	, 0.9,
	"librain/glass_1/wind_point/x"		, 0.50,
	"librain/glass_1/wind_point/y"		, -2,
	"librain/glass_1/wind_factor"		,  0.2,
	"librain/glass_1/wind_normal"		,  0,
	"librain/glass_1/max_tas"			, 100,
	"librain/glass_1/obj/filename"		, obj_path .. "passengerglass.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/glass_1/obj/load"			, 1,

	"librain/z_depth_obj_0/filename"	, obj_path .. "passengermask.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/z_depth_obj_1/filename"	, obj_path .. "cockpitmask.obj",
	"librain/z_depth_obj_1/pos_offset/x",  0,
	"librain/z_depth_obj_1/pos_offset/y",  0,
	"librain/z_depth_obj_1/pos_offset/z",  0,
	"librain/z_depth_obj_1/load"		,  1,
	


	"librain/num_glass_use"				,  2,
	"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
			-- Get the wiper_angle_deg dataref from the plane and translate it into an approriate radian for librain
			local wiper0angle = get(globalProperty("sim/flightmodel2/misc/wiper_angle_deg[0]")) * 0.75 * -.01
			local wiper1angle = get(globalProperty("sim/flightmodel2/misc/wiper_angle_deg[0]")) * 0.75 * .01
			set(globalProperty("librain/glass_0/wiper_0/angle"), wiper0angle)
			set(globalProperty("librain/glass_0/wiper_1/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_0/wiper_1/angle"), 0)
		end
		return end
	done = true
	-- 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 Metroliner III AC Passenger/Freighter by Paul Blair (toadlife) - toadlife@gmail.com")
	logInfo("librain initialization complete")
end
