Direct To support for flightplan waypoints.
This commit is contained in:
parent
aea1bbf5f1
commit
626cdd042a
2 changed files with 34 additions and 21 deletions
Aircraft/Instruments-3d/FG1000/Nasal
|
@ -343,10 +343,17 @@ var DirectToController =
|
||||||
if ((! me._transmitter.IsFailed(response)) and (size(retval) > 0)) {
|
if ((! me._transmitter.IsFailed(response)) and (size(retval) > 0)) {
|
||||||
var destination = retval[0];
|
var destination = retval[0];
|
||||||
# set the course and distance to the destination if required
|
# set the course and distance to the destination if required
|
||||||
var (course, dist) = courseAndDistance(destination);
|
|
||||||
|
# Some elements don't have names
|
||||||
|
var name = destination.id;
|
||||||
|
if (defined("destination.name")) name = destination.name;
|
||||||
|
|
||||||
|
var point = { lat: destination.lat, lon: destination.lon };
|
||||||
|
|
||||||
|
var (course, dist) = courseAndDistance(point);
|
||||||
var d = {
|
var d = {
|
||||||
id: destination.id,
|
id: destination.id,
|
||||||
name: destination.name,
|
name: name,
|
||||||
lat: destination.lat,
|
lat: destination.lat,
|
||||||
lon: destination.lon,
|
lon: destination.lon,
|
||||||
course : course,
|
course : course,
|
||||||
|
|
|
@ -13,17 +13,11 @@ new : func (device)
|
||||||
obj._transmitter = emesary.GlobalTransmitter;
|
obj._transmitter = emesary.GlobalTransmitter;
|
||||||
obj._registered = 0;
|
obj._registered = 0;
|
||||||
obj._device = device;
|
obj._device = device;
|
||||||
|
obj._currentDTO = "";
|
||||||
|
|
||||||
# List of recently use waypoints
|
# List of recently use waypoints
|
||||||
obj._recentWaypoints = std.Vector.new();
|
obj._recentWaypoints = std.Vector.new();
|
||||||
|
|
||||||
# Current DirectTo ID.
|
|
||||||
var nearest = obj.getNearestAirports();
|
|
||||||
if (size(nearest) > 0) {
|
|
||||||
nearest = nearest[0];
|
|
||||||
obj._currentDTO = nearest.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -72,6 +66,19 @@ getNavDataById : func (id)
|
||||||
# Check for fix.
|
# Check for fix.
|
||||||
if (size(navdata) == 0) navdata = findFixesByID(id);
|
if (size(navdata) == 0) navdata = findFixesByID(id);
|
||||||
|
|
||||||
|
# Check for a pseudo-fix in the flightplan
|
||||||
|
if (size(navdata) == 0) {
|
||||||
|
var fp = flightplan();
|
||||||
|
if (fp != nil) {
|
||||||
|
for (var i = 0; i < fp.getPlanSize(); i = i +1) {
|
||||||
|
var wp = fp.getWP(i);
|
||||||
|
if (wp.wp_name == id) {
|
||||||
|
append(navdata, wp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((size(navdata) > 0) and (! me._recentWaypoints.contains(id))) {
|
if ((size(navdata) > 0) and (! me._recentWaypoints.contains(id))) {
|
||||||
me._recentWaypoints.insert(0, id);
|
me._recentWaypoints.insert(0, id);
|
||||||
}
|
}
|
||||||
|
@ -120,13 +127,6 @@ getUserWaypoints : func()
|
||||||
},
|
},
|
||||||
|
|
||||||
# Set up a DirectTo a given ID, with optional VNAV altitude offset.
|
# Set up a DirectTo a given ID, with optional VNAV altitude offset.
|
||||||
# There are multiple cases here:
|
|
||||||
# 1) If there's no flightplan, create one to the DTO location.
|
|
||||||
# 2) If there's a flightplan and the ID matches a waypoint on the flightplan,
|
|
||||||
# then skip to that waypoint on the flightplan.
|
|
||||||
# 3) If the ID matches an airway on the current leg of the flightplan, then
|
|
||||||
# create an additional leg to the top of the flightplan to that airway waypoint.
|
|
||||||
# (TODO)
|
|
||||||
setDirectTo : func(param)
|
setDirectTo : func(param)
|
||||||
{
|
{
|
||||||
var id = param.id;
|
var id = param.id;
|
||||||
|
@ -141,9 +141,9 @@ setDirectTo : func(param)
|
||||||
|
|
||||||
for (var i = 0; i < fp.getPlanSize(); i = i + 1) {
|
for (var i = 0; i < fp.getPlanSize(); i = i + 1) {
|
||||||
var wp = fp.getWP(i);
|
var wp = fp.getWP(i);
|
||||||
if ((wp.wp_name != nil) and (wp.wp_name == id)) {
|
if ((wp.wp_name != nil) and (wp.wp_name == id)) {
|
||||||
# OK, we're assuming that if the names actually match, then
|
# OK, we're assuming that if the names actually match, then
|
||||||
# they refer to the same ID. So jump to that index.
|
# they refer to the same ID. So direct to that index.
|
||||||
wp_idx = i;
|
wp_idx = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -151,8 +151,12 @@ setDirectTo : func(param)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wp_idx != -1) {
|
if (wp_idx != -1) {
|
||||||
# Found the waypoint in the plan, so skip to it.
|
# Found the waypoint in the plan, so use that as the DTO.
|
||||||
fp.current = idx;
|
var wp = fp.getWP(wp_idx);
|
||||||
|
setprop("/instrumentation/gps/scratch/ident", wp.wp_name);
|
||||||
|
setprop("/instrumentation/gps/scratch/altitude-ft", 0);
|
||||||
|
setprop("/instrumentation/gps/scratch/latitude-deg", wp.lat);
|
||||||
|
setprop("/instrumentation/gps/scratch/longitude-deg", wp.lon);
|
||||||
} else {
|
} else {
|
||||||
# No flightplan, or waypoint not found, so use the GPS DTO function.
|
# No flightplan, or waypoint not found, so use the GPS DTO function.
|
||||||
# Hokey property-based interface.
|
# Hokey property-based interface.
|
||||||
|
@ -160,8 +164,10 @@ setDirectTo : func(param)
|
||||||
setprop("/instrumentation/gps/scratch/altitude-ft", 0);
|
setprop("/instrumentation/gps/scratch/altitude-ft", 0);
|
||||||
setprop("/instrumentation/gps/scratch/latitude-deg", 0);
|
setprop("/instrumentation/gps/scratch/latitude-deg", 0);
|
||||||
setprop("/instrumentation/gps/scratch/longitude-deg", 0);
|
setprop("/instrumentation/gps/scratch/longitude-deg", 0);
|
||||||
setprop("/instrumentation/gps/command", "direct");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Switch the GPS to DTO mode.
|
||||||
|
setprop("/instrumentation/gps/command", "direct");
|
||||||
},
|
},
|
||||||
|
|
||||||
# Return the current DTO location to use
|
# Return the current DTO location to use
|
||||||
|
|
Loading…
Add table
Reference in a new issue