1
0
Fork 0
fgdata/Aircraft/Instruments-3d/zkv500/AirportScreens.nas
2008-06-28 19:38:32 +00:00

127 lines
3.5 KiB
Text

var screenAirportMain = {
pos: nil,
apt_coord: nil,
right : func {
},
apt_to_waypoint : func {
gps_wp.getNode("wp/longitude-deg",1).setValue(me.pos.lat());
gps_wp.getNode("wp/latitude-deg",1).setValue(me.pos.lon());
gps_wp.getNode("wp/altitude-ft",1).setValue(me.pos.alt()*alt_conv[1][0]);
gps_wp.getNode("wp/ID",1).setValue("STARTPOS");
gps_wp.getNode("wp/name",1).setValue("start position");
gps_wp.getNode("wp[1]/longitude-deg",1).setValue(me.apt_coord.lat());
gps_wp.getNode("wp[1]/latitude-deg",1).setValue(me.apt_coord.lon());
gps_wp.getNode("wp[1]/altitude-ft",1).setValue(me.apt_coord.alt()*alt_conv[1][0]);
gps_wp.getNode("wp[1]/ID",1).setValue(apt.id);
gps_wp.getNode("wp[1]/name",1).setValue(apt.name);
mode = 2;
page = 1;
displayed_screen = 1; #screenNavigationMain
},
enter : func {
me.apt_to_waypoint();
},
escape : func {
},
start : func {
me.apt_to_waypoint();
},
lines : func (searched = nil) {
if (searched != nil)
apt = searched;
else
apt = airportinfo();
glide_slope_tunnel.complement_runways(apt);
var rwy = glide_slope_tunnel.best_runway(apt);
me.pos = geo.Coord.new(geo.aircraft_position());
me.apt_coord = geo.Coord.new().set_latlon(rwy.lat, rwy.lon);
var ac_to_apt = [me.pos.distance_to(me.apt_coord), me.pos.course_to(me.apt_coord)];
var ete = ac_to_apt[0] / getprop("instrumentation/gps/indicated-ground-speed-kt") * 3600 * 1852;
display([
sprintf("%s APT: %s", searched != nil ? "SEARCHED" : "NEAREST", apt.id),
sprintf("ELEV: %d %s", apt.elevation * alt_conv[1][alt_unit],alt_unit_short_name[alt_unit]),
sprintf("DIST: %d %s",ac_to_apt[0] * dist_conv[2][dist_unit],dist_unit_short_name[dist_unit]),
sprintf("BRG: %d° RWY: %02d",ac_to_apt[1], int(rwy.heading) / 10),
sprintf("ETE: %s",seconds_to_string(ete))
]);
}
};
var screenAirportInfos = {
page : 0,
rwylist: [],
right : func {
me.page = 0;
displayed_screen = 4;# screenAirportMain
},
left : func {
np = int(size(me.rwylist) / 4) + (math.mod(size(me.rwylist),4) ? 1 : 0);
me.page = cycle(np, me.page, arg[0]);
},
enter : func {
},
escape : func {
},
start : func {
},
lines : func {
me.rwylist = [];
foreach (var r; keys(apt.runways))
append(me.rwylist, [r, apt.runways[r].length, apt.runways[r].width]);
line[0].setValue(sprintf("%s", apt.name)); #TODO check length to truncate if too long
rwyindex = me.page * 4;
for (var l = 1; l < 5; l += 1) {
rwyindex += 1;
if (rwyindex < size(me.rwylist))
line[l].setValue(sprintf("R:%s L:%dm W:%dm",
me.rwylist[rwyindex][0],
me.rwylist[rwyindex][1],
me.rwylist[rwyindex][2]));
else
line[l].setValue("");
}
}
};
var screenSearchAirport = {
oaci : ["-","-","-","-"],
pointer: 0,
value: 0,
searched: nil,
right : func {
me.value = cycle(size(screenEdit.alphanum), me.value, arg[0]);
me.oaci[me.pointer] = screenEdit.alphanum[me.value];
},
enter : func {
if (me.pointer < 3) {
me.pointer += 1;
me.value = 0;
}
else
me.searched = airportinfo(me.oaci[0]~me.oaci[1]~me.oaci[2]~me.oaci[3]);
},
escape : func {
me.oaci = ["-","-","-","-"];
me.pointer = 0;
me.searched = nil;
},
start : func {
},
lines : func {
if (me.searched == nil)
display([
"SEARCH AIRPORT:",
sprintf("%s%s%s%s",me.oaci[0],me.oaci[1],me.oaci[2],me.oaci[3]),
"",
"",
""
]);
else {
screenAirportMain.lines(me.searched);
me.right();
}
}
};