-- librain.lua

--[[
 Librain plugin for the HoldMyBeer SR-22 by Paul Blair (toadlife) - toadlife@gmail.com
 Version 1.0
 
 Thank you to:
 * The HoldMyBeer team 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,
	
-- windscreen

	"librain/glass_0/gravity_factor"	, 1,
	"librain/glass_0/gravity_point/x"	, 0.5,
	"librain/glass_0/gravity_point/y"	, 1,	
	"librain/glass_0/max_tas"			, 100,
	"librain/glass_0/max_thrust"		, 100,
	"librain/glass_0/slant_factor"		,  0.7,
	"librain/glass_0/thrust_factor"		,  0.6,
	"librain/glass_0/thrust_point/x"	,  0.5,
	"librain/glass_0/thrust_point/y"	, 0,
	"librain/glass_0/wind_factor"		,  1.0,
	"librain/glass_0/wind_normal"		,  0.8,
	"librain/glass_0/wind_point/x"		,  0.5,
	"librain/glass_0/wind_point/y"		, -1,
	"librain/glass_0/obj/filename"		, obj_path .. "windscreen_front.obj",
	"librain/glass_0/obj/pos_offset/x"	,  0,
	"librain/glass_0/obj/pos_offset/y"	,  0.0,
	"librain/glass_0/obj/pos_offset/z"	, -1.676300,
	"librain/glass_0/obj/load"			,  1,
	
-- windscreen sides

	"librain/glass_1/gravity_factor"	, 1,
	"librain/glass_1/gravity_point/x"	, 0.5,
	"librain/glass_1/gravity_point/y"	, 2.0,
	"librain/glass_1/max_thrust"		, 100,
	"librain/glass_1/slant_factor"		,  0.6,
	"librain/glass_1/thrust_factor"		,  0.3,
	"librain/glass_1/thrust_point/x"	,  1,
	"librain/glass_1/thrust_point/y"	, 0.5,
	"librain/glass_1/wind_factor"		,  1.0,
	"librain/glass_1/wind_normal"		,  0.2,
	"librain/glass_1/wind_point/x"		,  1.5,
	"librain/glass_1/wind_point/y"		, 0.0,
	"librain/glass_1/max_tas"			, 100,
	"librain/glass_1/obj/filename"		, obj_path .. "windscreen_sides.obj",
	"librain/glass_1/obj/pos_offset/x"	,  0,
	"librain/glass_1/obj/pos_offset/y"	,  0.0,
	"librain/glass_1/obj/pos_offset/z"	, -1.676300,
	"librain/glass_1/obj/load"			,  1,

	
-- side windows

	"librain/glass_2/gravity_factor"	, 1,
	"librain/glass_2/gravity_point/x"	, 0.5,
	"librain/glass_2/gravity_point/y"	, 2.0,
	"librain/glass_2/max_thrust"		, 100,
	"librain/glass_2/slant_factor"		,  0.6,
	"librain/glass_2/thrust_factor"		,  0.1,
	"librain/glass_2/thrust_point/x"	,  1,
	"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"		,  1.5,
	"librain/glass_2/wind_point/y"		, 0.0,
	"librain/glass_2/max_tas"			, 100,
	"librain/glass_2/obj/filename"		, obj_path .. "side_windows.obj",
	"librain/glass_2/obj/pos_offset/x"	,  0,
	"librain/glass_2/obj/pos_offset/y"	,  0.0,
	"librain/glass_2/obj/pos_offset/z"	, -1.676300,
	"librain/glass_2/obj/load"			,  1,
	
-- back window

	"librain/glass_3/gravity_factor"	, 0.1,
	"librain/glass_3/gravity_point/x"	, 0.5,
	"librain/glass_3/gravity_point/y"	, 0.0,
	"librain/glass_3/max_thrust"		, 100,
	"librain/glass_3/slant_factor"		,  1,
	"librain/glass_3/thrust_factor"		,  0.0,
	"librain/glass_3/thrust_point/x"	,  1,
	"librain/glass_3/thrust_point/y"	, 0.5,
	"librain/glass_3/wind_factor"		,  1.0,
	"librain/glass_3/wind_normal"		,  0.2,
	"librain/glass_3/wind_point/x"		,  0.5,
	"librain/glass_3/wind_point/y"		, 0.0,
	"librain/glass_3/max_tas"			, 100,
	"librain/glass_3/obj/filename"		, obj_path .. "back_window.obj",
	"librain/glass_3/obj/pos_offset/x"	,  0,
	"librain/glass_3/obj/pos_offset/y"	,  0.0,
	"librain/glass_3/obj/pos_offset/z"	, -1.676300,
	"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.0,
	"librain/z_depth_obj_0/pos_offset/z", -1.676300,
	"librain/z_depth_obj_0/load"		,  1,

	"librain/z_depth_obj_1/filename"	, obj_path .. "tablet_left_mask.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", -1.676300,
	"librain/z_depth_obj_1/load"		,  1,

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

	
local done = false
local tablet_on_left = 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
		-- Check to see if tablet is on the right. If it is, load the z_depth object for it
		-- No dataref (that I can find) exists to check tablet position! :(
		--if ((get(globalProperty("sim/cockpit2/switches/door_open[0]"))) == 1) and not tablet_on_left then
		--	set(globalProperty("librain/z_depth_obj_1/load"), 1)
		--	tablet_on_left = true
		--elseif ((get(globalProperty("sim/cockpit2/switches/door_open[0]"))) == 0) and tablet_on_left then
		--	set(globalProperty("librain/z_depth_obj_1/load"), 0)
		--	tablet_on_left = false
		--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 HoldMyBeer SR-22 (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

