You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

486 lines
15 KiB

#
# Red Griffin ATC - Speaking Air Traffic Controller for FlightGear
#
# Written and developer by Antonello Biancalana (Red Griffin, IK0TOJ)
#
# Copyright (C) 2019-2021 Antonello Biancalana
#
# settings.nas
#
# Global variables for Red Griffin ATC (rgatc.nas)
#
# Version 2.3.0 - 7 May 2021
#
# Red Griffin ATC is an Open Source project and it is licensed
# under the Gnu Public License v3 (GPLv3)
#
var rgatcPropNode = "/rgatc";
var default_setting_open_dialog_startup = "Off";
var default_setting_dialog_position = "Bottom Left";
var default_setting_atc_text_position = "Top Center";
var default_setting_atc_text_transparency = "Medium";
var default_setting_callsign = property_MultiplayCallsign.getValue();
var default_setting_callsign_mode = "Complete";
var default_setting_include_manufacturer = "Yes";
var default_setting_pilot_request_mode = "Voice and text";
var default_setting_pilot_response_mode = "Voice and text";
var default_setting_atc_message_mode = "Voice and text";
var default_setting_qnh = "hPa and inHg";
var default_setting_atc_radio = "Auto";
var default_setting_aircraft_type = "Auto";
var default_setting_squawking = "On";
var default_setting_slope_angle = 3.0;
var default_setting_too_low_warning = "On";
var default_setting_terrain_warning = "On";
var default_setting_multiplayer_chat_echo = "Off";
var settingsFileName = getprop("/sim/fg-home") ~ "/Export/RedGriffinATC-config.xml";
var settings = nil;
var initSettings = func()
{
if(default_setting_callsign == "" or default_setting_callsign == nil)
default_setting_callsign = "RG-ATC";
loadSettings();
if(settings == nil or property_Setting_DialogPosition.getValue() == "" or property_Setting_DialogPosition.getValue() == nil)
resetSettings();
}
var resetSettings = func()
{
property_Setting_OpenDialogStartup.setValue(default_setting_open_dialog_startup);
property_Setting_DialogPosition.setValue(default_setting_dialog_position);
property_Setting_AtcTextPosition.setValue(default_setting_atc_text_position);
property_Setting_AtcTextTransparency.setValue(default_setting_atc_text_transparency);
property_Setting_Callsign.setValue(default_setting_callsign);
property_Setting_CallsignMode.setValue(default_setting_callsign_mode);
property_Setting_IncludeManufacturer.setValue(default_setting_include_manufacturer);
property_Setting_PilotRequestMode.setValue(default_setting_pilot_request_mode);
property_Setting_PilotResponseMode.setValue(default_setting_pilot_response_mode);
property_Setting_AtcMessageMode.setValue(default_setting_atc_message_mode);
property_Setting_QnhUnitMeasure.setValue(default_setting_qnh);
property_Setting_AtcRadioMode.setValue(default_setting_atc_radio);
property_Setting_AircraftType.setValue(default_setting_aircraft_type);
property_Setting_SquawkingMode.setValue(default_setting_squawking);
property_Setting_SlopeAngle.setValue(default_setting_slope_angle);
property_Setting_TooLowWarningMode.setValue(default_setting_too_low_warning);
property_Setting_TerrainWarningMode.setValue(default_setting_terrain_warning);
property_Setting_MultiplayerChatEcho.setValue(default_setting_multiplayer_chat_echo);
applySettings();
}
var applySettings = func()
{
openDialogStartup = property_Setting_OpenDialogStartup.getValue();
dialogPosition = property_Setting_DialogPosition.getValue();
atcTextPosition = property_Setting_AtcTextPosition.getValue();
atcTextTransparency = property_Setting_AtcTextTransparency.getValue();
callsign = property_Setting_Callsign.getValue();
callsignMode = property_Setting_CallsignMode.getValue();
includeManufacturer = property_Setting_IncludeManufacturer.getValue();
pilotRequestMode = property_Setting_PilotRequestMode.getValue();
pilotResponseMode = property_Setting_PilotResponseMode.getValue();
atcMessageMode = property_Setting_AtcMessageMode.getValue();
qnhUnitMeasure = property_Setting_QnhUnitMeasure.getValue();
atcRadioMode = property_Setting_AtcRadioMode.getValue();
aircraftType = getAircraftType();
squawkingMode = property_Setting_SquawkingMode.getValue();
slopeAngle = property_Setting_SlopeAngle.getValue();
tooLowWarningMode = property_Setting_TooLowWarningMode.getValue();
terrainWarningMode = property_Setting_TerrainWarningMode.getValue();
multiplayerChatEcho = property_Setting_MultiplayerChatEcho.getValue();
if(openDialogStartup == nil or openDialogStartup == "")
{
openDialogStartup = default_setting_open_dialog_startup;
property_Setting_OpenDialogStartup.setValue(default_setting_open_dialog_startup);
}
if(dialogPosition == nil or dialogPosition == "")
{
dialogPosition = default_setting_dialog_position;
property_Setting_DialogPosition.setValue(default_setting_dialog_position);
}
if(atcTextPosition == nil or atcTextPosition == "")
{
atcTextPosition = default_setting_atc_text_position;
property_Setting_AtcTextPosition.setValue(default_setting_atc_text_position);
}
if(atcTextTransparency == nil or atcTextTransparency == "")
{
atcTextTransparency = default_setting_atc_text_transparency;
property_Setting_AtcTextTransparency.setValue(default_setting_atc_text_transparency);
}
if(callsign == nil or callsign == "")
{
callsign = default_setting_callsign;
property_Setting_Callsign.setValue(default_setting_callsign);
}
if(callsignMode == nil or callsignMode == "")
{
callsignMode = default_setting_callsign_mode;
property_Setting_CallsignMode.setValue(default_setting_callsign_mode);
}
if(includeManufacturer == nil or includeManufacturer == "")
{
includeManufacturer = default_setting_include_manufacturer;
property_Setting_IncludeManufacturer.setValue(default_setting_include_manufacturer);
}
if(pilotRequestMode == nil or pilotRequestMode == "")
{
pilotRequestMode = default_setting_pilot_request_mode;
property_Setting_PilotRequestMode.setValue(default_setting_pilot_request_mode);
}
if(pilotResponseMode == nil or pilotResponseMode == "")
{
pilotResponseMode = default_setting_pilot_response_mode;
property_Setting_PilotResponseMode.setValue(default_setting_pilot_response_mode);
}
if(atcMessageMode == nil or atcMessageMode == "")
{
atcMessageMode = default_setting_atc_message_mode;
property_Setting_AtcMessageMode.setValue(default_setting_atc_message_mode);
}
if(qnhUnitMeasure == nil or qnhUnitMeasure == "")
{
qnhUnitMeasure = default_setting_qnh;
property_Setting_QnhUnitMeasure.setValue(default_setting_qnh);
}
if(atcRadioMode == nil or atcRadioMode == "")
{
atcRadioMode = default_setting_atc_radio;
property_Setting_AtcRadioMode.setValue(default_setting_atc_radio);
}
if(aircraftType == nil or aircraftType == "")
{
property_Setting_AircraftType.setValue(default_setting_aircraft_type);
aircraftType = getAircraftType();
}
if(squawkingMode == nil or squawkingMode == "")
{
squawkingMode = default_setting_squawking;
property_Setting_SquawkingMode.setValue(default_setting_squawking);
}
if(slopeAngle == nil or slopeAngle == "")
{
slopeAngle = default_setting_slope_angle;
property_Setting_SlopeAngle.setValue(default_setting_slope_angle);
}
if(num(slopeAngle) < 2 or num(slopeAngle) > 8)
{
slopeAngle = default_setting_slope_angle;
property_Setting_SlopeAngle.setValue(default_setting_slope_angle);
}
if(slopeAngle == nil or slopeAngle == "" or num(slopeAngle) == nil)
{
slopeAngle = default_setting_slope_angle;
property_Setting_SlopeAngle.setValue(default_setting_slope_angle);
}
if(tooLowWarningMode == nil or tooLowWarningMode == "")
{
tooLowWarningMode = default_setting_too_low_warning;
property_Setting_TooLowWarningMode.setValue(default_setting_too_low_warning);
}
if(terrainWarningMode == nil or terrainWarningMode == "")
{
terrainWarningMode = default_setting_terrain_warning;
property_Setting_TerrainWarningMode.setValue(default_setting_terrain_warning);
}
if(multiplayerChatEcho == nil or multiplayerChatEcho == "")
{
multiplayerChatEcho = default_setting_multiplayer_chat_echo;
property_Setting_MultiplayerChatEcho.setValue(default_setting_multiplayer_chat_echo);
}
property_Setting_Callsign.setValue(string.uc(callsign));
property_MultiplayCallsign.setValue(string.uc(callsign));
property_UserCallsign.setValue(string.uc(callsign));
(atcCallsignText, atcCallsignVoice) = getCallSignForAtc(1);
approach_slope_angle = num(slopeAngle);
setAtcTextPosition();
setDialogPosition();
setAircraftType();
saveSettings();
if(aircraftType == aircraft_type_unknown)
gui.showDialog("set-aircraft-type-dialog");
}
var saveSettings = func()
{
settings = props.globals.getNode(rgatcPropNode);
io.write_properties(settingsFileName, settings);
}
var loadSettings = func()
{
settings = io.read_properties(settingsFileName, rgatcPropNode);
if(settings != nil)
applySettings();
return settings;
}
var setAircraftType = func()
{
var atype = getAircraftType();
if(atype == aircraft_type_small_single_engine)
{
min_cruise_altitude = 3500;
pattern_speed = 100;
approach_speed = 90;
final_speed = 70;
flight_level_rate = 1000;
approach_point_distance = -10;
pattern_point_distance = -3;
approach_turn_distance = 0.8;
altitude_check_interval = 90;
}
else if(atype == aircraft_type_small_multi_engine)
{
min_cruise_altitude = 3500;
pattern_speed = 120;
approach_speed = 100;
final_speed = 85;
flight_level_rate = 1000;
approach_point_distance = -10;
pattern_point_distance = -3;
approach_turn_distance = 1.0;
altitude_check_interval = 90;
}
else if(atype == aircraft_type_executive_turboprop_jet)
{
min_cruise_altitude = 5500;
pattern_speed = 160;
approach_speed = 140;
final_speed = 120;
flight_level_rate = 1200;
approach_point_distance = -12;
pattern_point_distance = -5;
approach_turn_distance = 1.8;
altitude_check_interval = 75;
}
else if(atype == aircraft_type_business_jet)
{
min_cruise_altitude = 5500;
pattern_speed = 170;
approach_speed = 150;
final_speed = 130;
flight_level_rate = 1500;
approach_point_distance = -15;
pattern_point_distance = -5;
approach_turn_distance = 1.8;
altitude_check_interval = 45;
}
else if(atype == aircraft_type_airline_jet)
{
min_cruise_altitude = 7500;
pattern_speed = 180;
approach_speed = 160;
final_speed = 140;
flight_level_rate = 1500;
approach_point_distance = -15;
pattern_point_distance = -6;
approach_turn_distance = 2.3;
altitude_check_interval = 45;
}
else if(atype == aircraft_type_large_military_jet)
{
min_cruise_altitude = 8500;
pattern_speed = 210;
approach_speed = 190;
final_speed = 150;
flight_level_rate = 1500;
approach_point_distance = -15;
pattern_point_distance = -7;
approach_turn_distance = 2.3;
altitude_check_interval = 45;
}
else if(atype == aircraft_type_special_military)
{
min_cruise_altitude = 8500;
pattern_speed = 210;
approach_speed = 190;
final_speed = 150;
flight_level_rate = 2000;
approach_point_distance = -15;
pattern_point_distance = -8;
approach_turn_distance = 2.3;
altitude_check_interval = 45;
}
else
{
min_cruise_altitude = 3500;
pattern_speed = 100;
approach_speed = 90;
final_speed = 70;
flight_level_rate = 1000;
approach_point_distance = -10;
pattern_point_distance = -3;
approach_turn_distance = 0.8;
altitude_check_interval = 90;
}
setRGTitle();
}
var getAircraftType = func()
{
var aType = property_Setting_AircraftType.getValue();
if(aType == "Auto")
{
if(isTagDefined("fighter") == 1 or isTagDefined("interceptor") == 1 or isTagDefined("combat") == 1)
{
if(isTagDefined("bomber") == 1 or isTagDefined("tanker") == 1)
aType = aircraft_type_large_military_jet;
else
aType = aircraft_type_special_military;
}
else if(isTagDefined("piston") == 1 or isTagDefined("propeller") == 1)
{
if(isTagDefined("single-engine") == 1 or isTagDefined("1-engine") == 1)
aType = aircraft_type_small_single_engine;
else if(isTagDefined("twin-engine") == 1 or isTagDefined("2-engine") == 1 or
isTagDefined("4-engine") == 1 or isTagDefined("four-engine") == 1 )
aType = aircraft_type_small_multi_engine;
else if(isTagDefined("turboprop") == 1)
aType = aircraft_type_executive_turboprop_jet;
else
aType = aircraft_type_small_single_engine;
}
else if(isTagDefined("jet") == 1)
{
if(isTagDefined("turboprop") == 1)
aType = aircraft_type_executive_turboprop_jet;
else if(isTagDefined("bizjet") == 1 or isTagDefined("business") == 1)
aType = aircraft_type_business_jet;
else if(isTagDefined("cargo") == 1 or isTagDefined("tanker") == 1)
aType = aircraft_type_large_military_jet;
else if(isTagDefined("transport") == 1 or isTagDefined("passenger") == 1)
aType = aircraft_type_airline_jet;
else
aType = aircraft_type_business_jet;
}
else if(isTagDefined("supersonic") == 1 or isTagDefined("turbojet") == 1)
aType = aircraft_type_large_military_jet;
else if(isTagDefined("turboprop") == 1)
aType = aircraft_type_executive_turboprop_jet;
else if(isTagDefined("bizjet") == 1 or isTagDefined("business") == 1)
aType = aircraft_type_business_jet;
else
aType = aircraft_type_unknown;
}
return aType;
}
var isTagDefined = func(tag)
{
var tagdef = 0;
var done = 0;
var i = 0;
var ndx = "";
var property = "";
while(tagdef == 0 and done == 0)
{
if(i > 0)
ndx = sprintf("[%d]", i);
else
ndx = "";
property = getprop(sprintf("/sim/tags/tag%s", ndx));
if(property != nil)
{
if(property == tag)
tagdef = 1;
}
else
done = 1;
i += 1;
}
return tagdef;
}