This repository has been archived on 2021-09-26. You can view files and clone it, but cannot push or open issues or pull requests.
IDG-A32X/Models/Instruments/ND/ND.nas

249 lines
No EOL
12 KiB
Text

var nd_display = {};
setlistener("sim/signals/fdm-initialized", func() {
setprop("instrumentation/efis/nd/display-mode", "ARC");
setprop("instrumentation/efis/inputs/tfc", 1);
setprop("instrumentation/efis/inputs/wpt", 0);
setprop("instrumentation/efis/inputs/wxr", 1);
setprop("instrumentation/efis/inputs/sta", 0);
setprop("instrumentation/efis/inputs/arpt", 0);
setprop("instrumentation/efis/mfd/true-north", 0);
var toggle_listeners = {
# symbolic alias : relative property (as used in bindings), initial value, type
'toggle_range': {path: '/inputs/range-nm', value:40, type:'INT'},
'toggle_weather': {path: '/inputs/wxr', value:0, type:'BOOL'},
'toggle_airports': {path: '/inputs/arpt', value:0, type:'BOOL'},
'toggle_ndb': {path: '/inputs/NDB', value:0, type:'BOOL'},
'toggle_stations': {path: '/inputs/sta', value:0, type:'BOOL'},
'toggle_vor': {path: '/inputs/VORD', value:0, type:'BOOL'},
'toggle_cstr': {path: '/inputs/CSTR', value:0, type:'BOOL'},
'toggle_waypoints': {path: '/inputs/wpt', value:0, type:'BOOL'},
'toggle_position': {path: '/inputs/pos', value:0, type:'BOOL'},
'toggle_data': {path: '/inputs/data',value:0, type:'BOOL'},
'toggle_terrain': {path: '/inputs/terr',value:0, type:'BOOL'},
'toggle_traffic': {path: '/inputs/tfc',value:0, type:'BOOL'},
'toggle_centered': {path: '/inputs/nd-centered',value:0, type:'BOOL'},
'toggle_lh_vor_adf': {path: '/input/lh-vor-adf',value:0, type:'INT'},
'toggle_rh_vor_adf': {path: '/input/rh-vor-adf',value:0, type:'INT'},
'toggle_display_mode': {path: '/nd/canvas-display-mode', value:'NAV', type:'STRING'},
'toggle_display_type': {path: '/mfd/display-type', value:'LCD', type:'STRING'},
'toggle_true_north': {path: '/mfd/true-north', value:1, type:'BOOL'},
'toggle_track_heading': {path: '/trk-selected', value:0, type:'BOOL'},
'toggle_fplan': {path: '/nd/route-manager-active', value:0, type: 'BOOL'}, # flight plan active
'toggle_lnav': {path: '/nd/lnav', value:0, type: 'BOOL'}, # LNAV active
'toggle_vnav': {path: '/nd/vnav', value:0, type: 'BOOL'}, # VNAV active
'toggle_wpt_idx': {path: '/inputs/plan-wpt-index', value: -1, type: 'INT'},# WPT Index to be used in PLAN
'toggle_plan_loop': {path: '/nd/plan-mode-loop', value: 0, type: 'INT'}, # Not used
'toggle_app_mode': {path: '/nd/app-mode', value:'', type: 'STRING'}, # Approach mode string (ie. 'ILS APP')
'toggle_cur_td': {path: '/nd/current-td', value: 0, type: 'INT'}, # Top of Desc dist. along route
'toggle_cur_tc': {path: '/nd/current-tc', value: 0, type: 'INT'}, # Top of Climb dist. along route
'toggle_cur_sc': {path: '/nd/current-sc', value: 0, type: 'INT'}, # Start of Climb dist. along route
'toggle_cur_ed': {path: '/nd/current-ed', value: 0, type: 'INT'}, # End of Desc dist. along route
'toggle_cur_sd': {path: '/nd/current-sd', value: 0, type: 'INT'}, # Start of Desc dist. along route
'toggle_cur_ec': {path: '/nd/current-ec', value: 0, type: 'INT'}, # End of Climb dist. along route
'toggle_lvl_off_at': {path: '/nd/level-off-at', value: 0, type: 'INT'}, # Level-off point along route
'toggle_man_spd': {path: '/nd/managed-spd', value: 0, type: 'INT'}, # Managed Speed Mode
'toggle_athr': {path: '/nd/athr', value: 0, type: 'INT'}, # Auto-thrust engaged
'toggle_spd_point_100': {path: '/nd/spd-change-raw-100', value: 0, type: 'INT'}, # Speed limit change point FL100
'toggle_spd_point_140': {path: '/nd/spd-change-raw-140', value: 0, type: 'INT'}, # Speed limit change point FL140
'toggle_spd_point_250': {path: '/nd/spd-change-raw-250', value: 0, type: 'INT'}, # Speed limit change point FL250
'toggle_spd_point_260': {path: '/nd/spd-change-raw-260', value: 0, type: 'INT'}, # Speed limit change point FL260
'toggle_nav1_frq': {path: '/nd/nav1_frq', value: 0, type: 'INT'}, # Nav1 Freq. Listener
'toggle_nav2_frq': {path: '/nd/nav2_frq', value: 0, type: 'INT'}, # Nav2 Freq. Listener
'toggle_adf1_frq': {path: '/nd/adf1_frq', value: 0, type: 'INT'}, # ADF1 Freq. Listener
'toggle_adf2_frq': {path: '/nd/adf2_frq', value: 0, type: 'INT'}, # ADF2 Freq. Listener
'toggle_hold_init': {path: '/nd/hold_init', value: 0, type: 'INT'}, # HOLD pattern init Listener
'toggle_hold_update': {path: '/nd/hold_update', value: 0, type: 'INT'}, # HOLD pattern update Listener
'toggle_hold_wp': {path: '/nd/hold_wp', value: '', type: 'STRING'}, # HOLD pattern waypoint
'toggle_route_num': {path: '/nd/route_num', value: 0, type: 'INT'}, # Route waypoint count
'toggle_cur_wp': {path: '/nd/cur_wp', value: 0, type: 'INT'}, # Current Waypoint (TO Waypoint) index
'toggle_ap1': {path: '/nd/ap1', value: '', type: 'STRING'}, # AP1 engaged
'toggle_ap2': {path: '/nd/ap2', value: '', type: 'STRING'}, # AP2 engaged
'toggle_dep_rwy': {path: '/nd/dep_rwy', value: '', type: 'STRING'}, # Departure runway
'toggle_dest_rwy': {path: '/nd/dest_rwy', value: '', type: 'STRING'}, # Destination runway
};
var ND = canvas.NavDisplay;
var NDCpt = ND.new("instrumentation/efis", toggle_listeners, 'Airbus');
nd_display.main = canvas.new({
"name": "ND",
"size": [1024, 1024],
"view": [1024, 1024],
"mipmapping": 1
});
nd_display.main.addPlacement({"node": "ND.screen"});
var group = nd_display.main.createGroup();
NDCpt.newMFD(group);
NDCpt.update();
setprop("instrumentation/efis/inputs/plan-wpt-index", -1);
print("ND Canvas Initialized!");
}); # fdm-initialized listener callback
# Create Listeners to update the ND, change the property map values to fit
# the properties you use in your own aircraft
var property_map = {
des_apt: "/autopilot/route-manager/destination/airport",
dep_apt: "/autopilot/route-manager/departure/airport",
des_rwy: "/autopilot/route-manager/destination/runway",
dep_rwy: "/autopilot/route-manager/departure/runway",
fplan_active: 'autopilot/route-manager/active',
athr: '/flight-management/control/a-thrust',
cur_wp: "/autopilot/route-manager/current-wp",
vnav_node: "/autopilot/route-manager/vnav/",
spd_node: "/autopilot/route-manager/spd/",
holding: "/flight-management/hold",
holding_points: "/flight-management/hold/points",
adf1_frq: 'instrumentation/adf/frequencies/selected-khz',
adf2_frq: 'instrumentation/adf[1]/frequencies/selected-khz',
nav1_frq: 'instrumentation/nav/frequencies/selected-mhz',
nav2_frq: 'instrumentation/nav[1]/frequencies/selected-mhz',
lat_ctrl: 'flight-management/control/lat-ctrl',
ver_ctrl: "flight-management/control/ver-ctrl",
spd_ctrl: "flight-management/control/spd-ctrl",
};
setlistener("instrumentation/efis/nd/display-mode", func{
var canvas_mode = "instrumentation/efis/nd/canvas-display-mode";
var nd_centered = "instrumentation/efis/inputs/nd-centered";
var mode = getprop("instrumentation/efis/nd/display-mode");
var cvs_mode = 'NAV';
var centered = 1;
if(mode == 'ILS'){
cvs_mode = 'APP';
}
elsif(mode == 'VOR') {
cvs_mode = 'VOR';
}
elsif(mode == 'NAV'){
cvs_mode = 'MAP';
}
elsif(mode == 'ARC'){
cvs_mode = 'MAP';
centered = 0;
}
elsif(mode == 'PLAN'){
cvs_mode = 'PLAN';
}
setprop(canvas_mode, cvs_mode);
setprop(nd_centered, centered);
});
setlistener(property_map.fplan_active, func{
var actv = getprop(property_map.fplan_active);
setprop('instrumentation/efis/nd/route-manager-active', actv);
});
setlistener(property_map.athr, func{
var athr = getprop(property_map.athr);
setprop('instrumentation/efis/nd/athr', (athr == 'eng'));
});
setlistener(property_map.ver_ctrl, func{
var verctrl = getprop(property_map.ver_ctrl);
setprop('instrumentation/efis/nd/vnav', (verctrl == 'fmgc'));
});
setlistener(property_map.spd_ctrl, func{
var spdctrl = getprop(property_map.spd_ctrl);
setprop('instrumentation/efis/nd/managed-spd', (spdctrl == 'fmgc'));
});
setlistener(property_map.lat_ctrl, func{
var latctrl = getprop(property_map.lat_ctrl);
setprop('instrumentation/efis/nd/lnav', (latctrl == 'fmgc'));
});
setlistener("/instrumentation/mcdu/f-pln/disp/first", func{
var first = getprop("/instrumentation/mcdu/f-pln/disp/first");
if(typeof(first) == 'nil') first = -1;
if(getprop('autopilot/route-manager/route/num') == 0) first = -1;
setprop("instrumentation/efis/inputs/plan-wpt-index", first);
});
setlistener('/instrumentation/efis/nd/terrain-on-nd', func{
var terr_on_hd = getprop('/instrumentation/efis/nd/terrain-on-nd');
var alpha = 1;
if(terr_on_hd) alpha = 0.5;
nd_display.main.setColorBackground(0,0,0,alpha);
});
setlistener('instrumentation/nav/frequencies/selected-mhz', func{
var mhz = getprop('instrumentation/nav/frequencies/selected-mhz');
if(mhz == nil) mhz = 0;
setprop('/instrumentation/efis/nd/nav1_frq', mhz);
});
setlistener('instrumentation/nav[1]/frequencies/selected-mhz', func{
var mhz = getprop('instrumentation/nav[1]/frequencies/selected-mhz');
if(mhz == nil) mhz = 0;
setprop('/instrumentation/efis/nd/nav2_frq', mhz);
});
setlistener('instrumentation/adf/frequencies/selected-khz', func{
var khz = getprop('instrumentation/adf/frequencies/selected-khz');
if(khz == nil) khz = 0;
setprop('/instrumentation/efis/nd/adf1_frq', khz);
});
setlistener('instrumentation/adf[1]/frequencies/selected-khz', func{
var khz = getprop('instrumentation/adf[1]/frequencies/selected-khz');
if(khz == nil) khz = 0;
setprop('/instrumentation/efis/nd/adf2_frq', khz);
});
setlistener('flight-management/hold/init', func{
var init = getprop('flight-management/hold/init');
if(init == nil) init = 0;
setprop('/instrumentation/efis/nd/hold_init', init);
});
setlistener("/flight-management/hold/wp", func{
var wpid = getprop("/flight-management/hold/wp");
if(wpid == nil) wpid = '';
setprop('/instrumentation/efis/nd/hold_wp', wpid);
});
setlistener('autopilot/route-manager/route/num', func{
var num = getprop('autopilot/route-manager/route/num');
setprop('/instrumentation/efis/nd/route_num', num);
});
setlistener(property_map.cur_wp, func(){
var curwp = getprop('autopilot/route-manager/current-wp');
setprop('/instrumentation/efis/nd/cur_wp',curwp);
});
setlistener("/flight-management/control/ap1-master", func(){
var ap1 = getprop("/flight-management/control/ap1-master");
setprop('/instrumentation/efis/nd/ap1',ap1);
});
setlistener("/flight-management/control/ap2-master", func(){
var ap2 = getprop("/flight-management/control/ap2-master");
setprop('/instrumentation/efis/nd/ap2',ap2);
});
setlistener("/autopilot/route-manager/departure/runway", func(){
var rwy = getprop("/autopilot/route-manager/departure/runway");
setprop('/instrumentation/efis/nd/dep_rwy',rwy);
});
setlistener("/autopilot/route-manager/destination/runway", func(){
var rwy = getprop("/autopilot/route-manager/destination/runway");
setprop('/instrumentation/efis/nd/dest_rwy',rwy);
});
var showNd = func() {
# The optional second arguments enables creating a window decoration
var dlg = canvas.Window.new([400, 400], "dialog");
dlg.setCanvas( nd_display["main"] );
}