X_ATC_Chatter_Auto_Controller.lua

--[[
	X-ATC Chatter Auto Controller
	v1.0.2 FrankLFRS 2024
	
	The assistant checks a few parameters to set next logical controller
	
	For ToLiSS A32x Series
--]]


-- Flight steps

X_ATC_CHAT_CLR = 0
X_ATC_CHAT_DEP_GND = 1
X_ATC_CHAT_DEP_TWR = 2
X_ATC_CHAT_DEP = 3
X_ATC_CHAT_CTR = 4
X_ATC_CHAT_APP = 5
X_ATC_CHAT_DEST_TWR = 6
X_ATC_CHAT_DEST_GND = 7
X_ATC_CHAT_END = 8


-- Init first flight step

X_ATC_Chat_Event_Step = X_ATC_CHAT_CLR


-- Datarefs

DataRef("X_ATC_Chat_Is_Engine_Running", "sim/flightmodel/engine/ENGN_running") -- Engine on and using fuel (only reliable in 740 and later)
DataRef("X_ATC_Chat_SpoilerArmed", "ckpt/speedbrakeUp/anim") -- 0 = no, 1 = armed
DataRef("X_ATC_Chat_Gear_Deploy_Ratio", "sim/aircraft/parts/acf_gear_deploy") -- Landing gear deployment, 0.0->1.0
DataRef("X_ATC_Chat_Altitude_ft", "sim/cockpit2/gauges/indicators/altitude_ft_pilot") -- Indicated height, MSL, in feet, primary system, based on pilots barometric pressure input
DataRef("X_ATC_Chat_APPR_On", "AirbusFBW/APPRilluminated") -- 0 = off, 1 = on
DataRef("X_ATC_Chat_APU_Switch", "sim/cockpit/engine/APU_switch") -- APU starter switch 0 = off, 1 = on, 2 = start


-- Next Controller

function X_ATC_Chat_Next_Controller()
	command_once("SRS/X-ATC-Chatter/Select_Next_Logical_Controller")
	X_ATC_Chat_Event_Step = (X_ATC_Chat_Event_Step+1)%X_ATC_CHAT_END
end


-- Auto Next Controller (every 10s)

function X_ATC_Chat_Auto_Controller_Do_Sometimes()
	if(X_ATC_Chat_Event_Step == X_ATC_CHAT_CLR and X_ATC_Chat_Is_Engine_Running == 1) then
		X_ATC_Chat_Next_Controller()
	elseif(X_ATC_Chat_Event_Step == X_ATC_CHAT_DEP_GND and X_ATC_Chat_SpoilerArmed == 1) then
		X_ATC_Chat_Next_Controller()
	elseif(X_ATC_Chat_Event_Step == X_ATC_CHAT_DEP_TWR and X_ATC_Chat_Gear_Deploy_Ratio < 0.9) then
		X_ATC_Chat_Next_Controller()
	elseif(X_ATC_Chat_Event_Step == X_ATC_CHAT_DEP and X_ATC_Chat_Altitude_ft > 19000) then
		X_ATC_Chat_Next_Controller()
	elseif(X_ATC_Chat_Event_Step == X_ATC_CHAT_CTR and X_ATC_Chat_Altitude_ft < 18000) then
		X_ATC_Chat_Next_Controller()
	elseif(X_ATC_Chat_Event_Step == X_ATC_CHAT_APP and X_ATC_Chat_APPR_On == 1) then
		X_ATC_Chat_Next_Controller()
	elseif(X_ATC_Chat_Event_Step == X_ATC_CHAT_DEST_TWR and X_ATC_Chat_APU_Switch > 0) then
		X_ATC_Chat_Next_Controller()
	end
end


-- Beginning of the periodic checking

if(PLANE_ICAO == "A319" or PLANE_ICAO == "A20N" or PLANE_ICAO =="A321") then
	do_sometimes("X_ATC_Chat_Auto_Controller_Do_Sometimes()")
end