ToLiSS_Auto_Lights.lua

--[[
	ToLiSS Auto Lights
	v1.0.9 FrankLFRS 2024
	
	The assistant checks a few parameters to set lights for you (Rwy turn off, land and nose)
	
	For ToLiSS A32x Series
--]]


-- Set runway turn off lights: 0 = OFF / 1 = ON

function ToLiSS_Lights_Rwy_Turn_Off(Switch_Position)
	if(Switch_Position == 1) then
		command_once("toliss_airbus/lightcommands/TurnoffLightOn")
	else
		command_once("toliss_airbus/lightcommands/TurnoffLightOff")
	end
end


-- Set landing lights: 0 = RETRACT / 1 = OFF / 2 = ON

function ToLiSS_Lights_Land(Switch_Position)
	command_once("toliss_airbus/lightcommands/LLandLightDown")
	command_once("toliss_airbus/lightcommands/LLandLightDown")
	command_once("toliss_airbus/lightcommands/RLandLightDown")
	command_once("toliss_airbus/lightcommands/RLandLightDown")
	for i = Switch_Position, 1, -1 do
		command_once("toliss_airbus/lightcommands/LLandLightUp")
		command_once("toliss_airbus/lightcommands/RLandLightUp")
	end
end


-- Set nose lights: 0 = OFF / 1 = TAXI / 2 = ON

function ToLiSS_Lights_Nose(Switch_Position)
	command_once("toliss_airbus/lightcommands/NoseLightDown")
	command_once("toliss_airbus/lightcommands/NoseLightDown")
	for i = Switch_Position, 1, -1 do
		command_once("toliss_airbus/lightcommands/NoseLightUp")
	end
end


-- Set all lights: Runway turn off, Land, Nose

function ToLiSS_Lights(Rwy_Turn_Off_Switch_Position, Land_Switch_Position, Nose_Switch_Position)
	ToLiSS_Lights_Rwy_Turn_Off(Rwy_Turn_Off_Switch_Position)
	ToLiSS_Lights_Land(Land_Switch_Position)
	ToLiSS_Lights_Nose(Nose_Switch_Position)
end


--[[ Create commands to manually set lights

create_command("FlyWithLua/ToLiSS/Lights/taxi", "Set Lights For Taxi", "ToLiSS_Lights(1,0,1)", "", "")
create_command("FlyWithLua/ToLiSS/Lights/to_land", "Set Lights For Takeoff or Landing", "ToLiSS_Lights(1,2,2)", "", "")
create_command("FlyWithLua/ToLiSS/Lights/fl100", "Set Lights Under FL100", "ToLiSS_Lights(0,2,0)", "", "")
create_command("FlyWithLua/ToLiSS/Lights/off", "Set All lights Off", "ToLiSS_Lights(0,0,0)", "", "")
--]]


-- Flight steps

TOLISS_STEP_AT_GATE = 0
TOLISS_STEP_TAXI = 1
TOLISS_STEP_TAKEOFF = 2
TOLISS_STEP_DEPARTURE = 3
TOLISS_STEP_EN_ROUTE = 4
TOLISS_STEP_ARRIVAL = 5
TOLISS_STEP_FINAL = 6
TOLISS_STEP_LAND = 7
TOLISS_STEP_VACATE = 8
TOLISS_STEP_END = 9


-- Init first flight step

ToLiSS_Event_Step = TOLISS_STEP_AT_GATE


-- Datarefs

DataRef("ToLiSS_Is_Engine_Running", "sim/flightmodel/engine/ENGN_running") -- Engine on and using fuel (only reliable in 740 and later)
DataRef("ToLiSS_Gear_Deploy_Ratio", "sim/aircraft/parts/acf_gear_deploy") -- Landing gear deployment, 0.0->1.0
DataRef("ToLiSS_Altitude_ft", "sim/cockpit2/gauges/indicators/altitude_ft_pilot") -- Indicated height, MSL, in feet, primary system, based on pilots barometric pressure input
DataRef("ToLiSS_Is_On_Ground", "sim/flightmodel2/gear/on_ground") -- Is this wheel on the ground
DataRef("ToLiSS_APU_Switch", "sim/cockpit/engine/APU_switch") -- APU starter switch 0 = off, 1 = on, 2 = start
DataRef("ToLiSS_Chrono_Time_ND_1", "AirbusFBW/ChronoTimeND1") -- Captain ND chrono value
DataRef("ToLiSS_Chrono_Time_ND_2", "AirbusFBW/ChronoTimeND2") -- Copilot ND chrono value
DataRef("ToLiSS_ParkBrake", "AirbusFBW/ParkBrake") -- ParkBrake status 0 = off, 1 = on
DataRef("ToLiSS_Throttle_Input", "AirbusFBW/throttle_input") -- Throttles position, idle->toga, 0.0->1.0


--[[ Debug tool
function ToLiSS_LogDebug()
	logMsg("PLANE_ICAO: "..PLANE_ICAO)
	logMsg("ToLiSS_Is_Engine_Running: "..ToLiSS_Is_Engine_Running)
	logMsg("ToLiSS_Gear_Deploy_Ratio: "..ToLiSS_Gear_Deploy_Ratio)
	logMsg("ToLiSS_Altitude_ft: "..ToLiSS_Altitude_ft)
	logMsg("ToLiSS_Is_On_Ground: "..ToLiSS_Is_On_Ground)
	logMsg("ToLiSS_APU_Switch: "..ToLiSS_APU_Switch)
	logMsg("ToLiSS_Chrono_Time_ND_1: "..ToLiSS_Chrono_Time_ND_1)
	logMsg("ToLiSS_Chrono_Time_ND_2: "..ToLiSS_Chrono_Time_ND_2)
	logMsg("ToLiSS_ParkBrake: "..ToLiSS_ParkBrake)
	logMsg("ToLiSS_Throttle_Input: "..ToLiSS_Throttle_Input)
	logMsg("ToLiSS_Event_Step: "..ToLiSS_Event_Step)
end

create_command("FlyWithLua/ToLiSS/Lights/Debug", "ToLiSS Autolights Debugger", "ToLiSS_LogDebug()", "", "")
--]]


-- Next step event

function ToLiSS_Event_Next()
	ToLiSS_Event_Step = (ToLiSS_Event_Step+1)%TOLISS_STEP_END
end


-- Autolights (every 10s)

function ToLiSS_Auto_Lights_Do_Sometimes()
	if(ToLiSS_Event_Step == TOLISS_STEP_TAKEOFF and ToLiSS_Gear_Deploy_Ratio < 0.9) then
		ToLiSS_Lights(0, 2, 0)
		ToLiSS_Event_Next()
	elseif(ToLiSS_Event_Step == TOLISS_STEP_DEPARTURE and ToLiSS_Altitude_ft > 10500) then
		ToLiSS_Lights(0, 0, 0)
		ToLiSS_Event_Next()
	elseif(ToLiSS_Event_Step == TOLISS_STEP_EN_ROUTE and ToLiSS_Altitude_ft < 10200) then
		ToLiSS_Lights(0, 2, 0)
		ToLiSS_Event_Next()
	elseif(ToLiSS_Event_Step == TOLISS_STEP_ARRIVAL and ToLiSS_Gear_Deploy_Ratio > 0.9) then
		ToLiSS_Lights(1, 2, 2)
		ToLiSS_Event_Next()
	elseif(ToLiSS_Event_Step == TOLISS_STEP_FINAL and ToLiSS_Is_On_Ground == 1) then
		ToLiSS_Event_Next()
	elseif(ToLiSS_Event_Step == TOLISS_STEP_VACATE and ToLiSS_Is_Engine_Running == 0 and ToLiSS_ParkBrake == 1) then
		ToLiSS_Lights(0, 0, 0)
		ToLiSS_Event_Next()
	end
end


-- Autolights (every 1s)

function ToLiSS_Auto_Lights_Do_Often()
	if(ToLiSS_Event_Step == TOLISS_STEP_AT_GATE and ToLiSS_Is_Engine_Running == 1 and ToLiSS_Throttle_Input > 0.1 and ToLiSS_ParkBrake == 0) then
		ToLiSS_Lights(1, 0, 1)
		ToLiSS_Event_Next()
	elseif(ToLiSS_Event_Step == TOLISS_STEP_TAXI and (ToLiSS_Chrono_Time_ND_1+ToLiSS_Chrono_Time_ND_2) > 0) then
		ToLiSS_Lights(1, 2, 2)
		ToLiSS_Event_Next()
	elseif(ToLiSS_Event_Step == TOLISS_STEP_LAND and ToLiSS_APU_Switch > 0) then
		ToLiSS_Lights(1, 0, 1)
		ToLiSS_Event_Next()
	end
end


-- Beginning of the periodic checking

if(PLANE_ICAO == "A319" or PLANE_ICAO == "A20N" or PLANE_ICAO =="A321") then
	do_sometimes("ToLiSS_Auto_Lights_Do_Sometimes()")
	do_often("ToLiSS_Auto_Lights_Do_Often()")
end