Add default FlightPlan delegate for the route-manager.
This commit is contained in:
parent
d98dc36c93
commit
898b3769d3
1 changed files with 92 additions and 0 deletions
92
Nasal/route_manager.nas
Normal file
92
Nasal/route_manager.nas
Normal file
|
@ -0,0 +1,92 @@
|
|||
# route_manager.nas - default FlightPlan delegate corresponding to the build
|
||||
# in route-manager dialog. Intended to provide a sensible default behaviour,
|
||||
# but be disabled by an aircraft-specific FMS / GPS system.
|
||||
|
||||
var RouteManagerDelegate = {
|
||||
new: func(fp) {
|
||||
# if this property is set, don't build a delegate at all
|
||||
if (getprop('/autopilot/route-manager/disable-fms'))
|
||||
return nil;
|
||||
|
||||
var m = { parents: [RouteManagerDelegate] };
|
||||
m.flightplan = fp;
|
||||
return m;
|
||||
},
|
||||
|
||||
departureChanged: func
|
||||
{
|
||||
debug.dump('saw departure changed');
|
||||
me.flightplan.clearWPType('sid');
|
||||
if (me.flightplan.departure == nil)
|
||||
return;
|
||||
|
||||
if (me.flightplan.departure_runway == nil) {
|
||||
# no runway, only an airport, use that
|
||||
var wp = createWPFrom(me.flightplan.departure);
|
||||
wp.wp_role = 'sid';
|
||||
me.flightplan.insertWP(wp, 0);
|
||||
return;
|
||||
}
|
||||
# first, insert the runway itself
|
||||
var wp = createWPFrom(me.flightplan.departure_runway);
|
||||
wp.wp_role = 'sid';
|
||||
me.flightplan.insertWP(wp, 0);
|
||||
if (me.flightplan.sid == nil)
|
||||
return;
|
||||
|
||||
# and we have a SID
|
||||
var sid = me.flightplan.sid;
|
||||
debug.dump('routing via SID ' ~ sid.id);
|
||||
me.flightplan.insertWaypoints(sid.route(me.flightplan.departure_runway), 1);
|
||||
},
|
||||
|
||||
arrivalChanged: func
|
||||
{
|
||||
debug.dump('saw arrival changed');
|
||||
me.flightplan.clearWPType('star');
|
||||
me.flightplan.clearWPType('approach');
|
||||
if (me.flightplan.destination == nil)
|
||||
return;
|
||||
|
||||
if (me.flightplan.destination_runway == nil) {
|
||||
# no runway, only an airport, use that
|
||||
var wp = createWPFrom(me.flightplan.destination);
|
||||
wp.wp_role = 'approach';
|
||||
me.flightplan.appendWP(wp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (me.flightplan.star != nil) {
|
||||
debug.dump('routing via STAR ' ~ me.flightplan.star.id);
|
||||
var wps = me.flightplan.star.route(me.flightplan.destination_runway);
|
||||
me.flightplan.insertWaypoints(wps, -1);
|
||||
}
|
||||
|
||||
if (me.flightplan.approach != nil) {
|
||||
debug.dump('routing via approach ' ~ me.flightplan.approach.id);
|
||||
var wps = me.flightplan.approach.route();
|
||||
me.flightplan.insertWaypoints(wps, -1);
|
||||
} else {
|
||||
debug.dump('routing direct to runway ' ~ me.flightplan.destination_runway.id);
|
||||
# no approach, just use the runway waypoint
|
||||
var wp = createWPFrom(me.flightplan.destination_runway);
|
||||
wp.wp_role = 'approach';
|
||||
me.flightplan.appendWP(wp);
|
||||
}
|
||||
},
|
||||
|
||||
waypointsChanged: func
|
||||
{
|
||||
debug.dump('saw waypoints changed');
|
||||
},
|
||||
|
||||
currentWaypointChanged: func
|
||||
{
|
||||
debug.dump('saw current WP changed, now ' ~ me.flightplan.current);
|
||||
}
|
||||
};
|
||||
|
||||
# debug.dump('register routemanager delegate factory');
|
||||
|
||||
registerFlightPlanDelegate(RouteManagerDelegate.new);
|
||||
|
Loading…
Reference in a new issue