1
0
Fork 0
fgdata/Nasal/autopilot.nas

81 lines
3.1 KiB
Text
Raw Normal View History

##
## These are just GUI helper routines. The autopilot itself is not a
## Nasal module.
##
tagSettings =
{
"hdg-wing" : ["/autopilot/locks/heading", "wing-leveler"],
"hdg-bug" : ["/autopilot/locks/heading", "dg-heading-hold"],
"hdg-true" : ["/autopilot/locks/heading", "true-heading-hold"],
"hdg-nav" : ["/autopilot/locks/heading", "nav1-hold"],
"vel-throttle" : ["/autopilot/locks/speed", "speed-with-throttle"],
"vel-pitch" : ["/autopilot/locks/speed", "speed-with-pitch-trim"],
"alt-vert" : ["/autopilot/locks/altitude", "vertical-speed-hold"],
"alt-pitch" : ["/autopilot/locks/altitude", "pitch-hold"],
"alt-aoa" : ["/autopilot/locks/altitude", "aoa-hold"],
"alt-alt" : ["/autopilot/locks/altitude", "altitude-hold"],
"alt-agl" : ["/autopilot/locks/altitude", "agl-hold"],
"alt-gs" : ["/autopilot/locks/altitude", "gs1-hold"]
};
radioGroups = [["hdg-wing", "hdg-bug", "hdg-true", "hdg-nav"],
["vel-throttle", "vel-pitch"],
["alt-vert", "alt-pitch", "alt-aoa", "alt-alt",
"alt-agl", "alt-gs"]];
# Initialize to get the types of the gui properties correct
INIT = func {
guinode = props.globals.getNode("/autopilot/gui", 1);
foreach(tag; keys(tagSettings)) {
guinode.getNode(tag, 1).setBoolValue(0);
}
}
settimer(INIT, 0);
update = func {
# Suck out the values from the dialog
fgcommand("dialog-apply", props.Node.new());
# Sanitize the radio buttons such that only one is selected. We are
# passed a tag indicating the one that was pressed.
if(size(arg) > 0) {
tag = arg[0];
foreach(group; radioGroups) {
for(i=0; i<size(group); i = i+1) {
if(tag == group[i]) {
if(getprop("/autopilot/gui", tag)) {
# The user just turned it on, turn the rest off...
for(j=0; j<size(group); j=j+1) {
if(j != i) {
setprop("/autopilot/gui", group[j], 0);
}
}
} else {
# The user tried to turn off an active radio
# button. Turn it back on.
setprop("/autopilot/gui", tag, 1);
}
}
}
}
}
# Set the actual output properties for the autopilot system
foreach(tag; keys(tagSettings)) {
setting = tagSettings[tag];
if(getprop("/autopilot/gui", tag)) {
setprop(setting[0], setting[1]);
}
}
if(!getprop("/autopilot/gui/hdg-active")) {
setprop("/autopilot/locks/heading", ""); }
if(!getprop("/autopilot/gui/alt-active")) {
setprop("/autopilot/locks/altitude", ""); }
if(!getprop("/autopilot/gui/vel-active")) {
setprop("/autopilot/locks/speed", ""); }
# Push any changes back to the dialog
fgcommand("dialog-update", props.Node.new());
}