A3XX: Add DU Test

This commit is contained in:
Joshua Davidson 2017-11-20 17:03:07 -05:00
parent 2862819eec
commit 074fe62767
17 changed files with 1039 additions and 687 deletions

View file

@ -904,6 +904,8 @@
<std>0</std>
<oldqnh>29.92</oldqnh>
</altimeter>
<cpt-du-xfr>0</cpt-du-xfr>
<fo-du-xfr>0</fo-du-xfr>
<pfd>
<ILS1>0</ILS1>
<ILS2>0</ILS2>

View file

@ -169,6 +169,15 @@ var systemsReset = func {
libraries.variousReset();
}
var skipDUTest = func {
setprop("/instrumentation/du/du1-test-time", getprop("/instrumentation/du/du1-test-time") - 35);
setprop("/instrumentation/du/du2-test-time", getprop("/instrumentation/du/du2-test-time") - 35);
setprop("/instrumentation/du/du3-test-time", getprop("/instrumentation/du/du3-test-time") - 35);
setprop("/instrumentation/du/du4-test-time", getprop("/instrumentation/du/du4-test-time") - 35);
setprop("/instrumentation/du/du5-test-time", getprop("/instrumentation/du/du5-test-time") - 35);
setprop("/instrumentation/du/du6-test-time", getprop("/instrumentation/du/du6-test-time") - 35);
}
################
# Panel States #
################
@ -290,6 +299,7 @@ var beforestart_b = func {
setprop("/controls/adirs/mcducbtn", 1);
setprop("/controls/lighting/beacon", 1);
setprop("/controls/lighting/nav-lights-switch", 1);
skipDUTest();
setprop("/controls/gear/brake-left", 0);
setprop("/controls/gear/brake-right", 0);
setprop("/systems/acconfig/autoconfig-running", 0);
@ -366,6 +376,7 @@ var taxi_b = func {
setprop("/controls/adirs/mcducbtn", 1);
setprop("/controls/lighting/beacon", 1);
setprop("/controls/lighting/nav-lights-switch", 1);
skipDUTest();
settimer(taxi_c, 2);
}
var taxi_c = func {

View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024pt"
height="1024pt"
viewBox="0 0 1024 1024"
version="1.1"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="du-test.svg">
<metadata
id="metadata375">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs373" />
<sodipodi:namedview
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1"
objecttolerance="20"
gridtolerance="20"
guidetolerance="20"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1030"
id="namedview371"
showgrid="true"
inkscape:zoom="0.25"
inkscape:cx="1402.5446"
inkscape:cy="508.4561"
inkscape:window-x="1592"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
showguides="true"
inkscape:snap-global="false"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid5153" />
</sodipodi:namedview>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:32px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="511.80469"
y="494.27536"
id="text4335"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4337"
x="511.80469"
y="494.27536"
style="font-size:50px;text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1">SELF TEST IN PROGRESS</tspan><tspan
sodipodi:role="line"
x="511.80469"
y="556.77533"
id="tspan4339"
style="font-size:50px;text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1">(MAX 40 SECONDS)</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -10,6 +10,7 @@ var lowerECAM_eng = nil;
var lowerECAM_fctl = nil;
var lowerECAM_wheel = nil;
var lowerECAM_door = nil;
var lowerECAM_test = nil;
var lowerECAM_display = nil;
var page = "eng";
var oat = getprop("/environment/temperature-degc");
@ -27,7 +28,7 @@ var gearlvr = 0;
var askidsw = 0;
var brakemode = 0;
var accum = 0;
var elapsedtime = 0;
setprop("/systems/electrical/extra/apu-load", 0);
setprop("/systems/electrical/extra/apu-volts", 0);
setprop("/systems/electrical/extra/apu-hz", 0);
@ -62,6 +63,8 @@ setprop("/controls/flight/spoiler-r2-failed", 0);
setprop("/controls/flight/spoiler-r3-failed", 0);
setprop("/controls/flight/spoiler-r4-failed", 0);
setprop("/controls/flight/spoiler-r5-failed", 0);
setprop("/instrumentation/du/du4-test", 0);
setprop("/instrumentation/du/du4-test-time", 0);
var canvas_lowerECAM_base = {
init: func(canvas_group, file) {
@ -69,7 +72,7 @@ var canvas_lowerECAM_base = {
return "LiberationFonts/LiberationSans-Regular.ttf";
};
canvas.parsesvg(canvas_group, file, {'font-mapper': font_mapper});
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
var svg_keys = me.getKeys();
foreach(var key; svg_keys) {
@ -84,51 +87,72 @@ var canvas_lowerECAM_base = {
return [];
},
update: func() {
elapsedtime = getprop("/sim/time/elapsed-sec");
if (getprop("/systems/electrical/bus/ac1") >= 110 and getprop("/systems/electrical/bus/ac2") >= 110) {
if (getprop("/instrumentation/du/du4-test") != 1) {
setprop("/instrumentation/du/du4-test", 1);
setprop("/instrumentation/du/du4-test-time", getprop("/sim/time/elapsed-sec"));
}
} else if (getprop("/systems/electrical/ac1-src") == "XX" or getprop("/systems/electrical/ac2-src") == "XX") {
setprop("/instrumentation/du/du4-test", 0);
}
if (getprop("/systems/electrical/bus/ac1") >= 110 and getprop("/systems/electrical/ac1-src") != "RAT" and getprop("/systems/electrical/bus/ac2") >= 110 and getprop("/systems/electrical/ac2-src") != "RAT" and getprop("/controls/lighting/DU/du4") > 0) {
page = getprop("/ECAM/Lower/page");
if (page == "apu") {
lowerECAM_apu.page.show();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.hide();
lowerECAM_apu.update();
} else if (page == "eng") {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.show();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.hide();
lowerECAM_eng.update();
} else if (page == "fctl") {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.show();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.hide();
lowerECAM_fctl.update();
} else if (page == "wheel") {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.show();
lowerECAM_door.page.hide();
lowerECAM_wheel.update();
} else if (page == "door") {
if (getprop("/instrumentation/du/du4-test-time") + 40 >= elapsedtime) {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.show();
lowerECAM_door.update();
lowerECAM_door.page.hide();
lowerECAM_test.page.show();
} else {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.hide();
lowerECAM_test.page.hide();
page = getprop("/ECAM/Lower/page");
if (page == "apu") {
lowerECAM_apu.page.show();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.hide();
lowerECAM_apu.update();
} else if (page == "eng") {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.show();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.hide();
lowerECAM_eng.update();
} else if (page == "fctl") {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.show();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.hide();
lowerECAM_fctl.update();
} else if (page == "wheel") {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.show();
lowerECAM_door.page.hide();
lowerECAM_wheel.update();
} else if (page == "door") {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.show();
lowerECAM_door.update();
} else {
lowerECAM_apu.page.hide();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.hide();
lowerECAM_wheel.page.hide();
lowerECAM_door.page.hide();
}
}
} else {
lowerECAM_test.page.hide();
lowerECAM_apu.page.hide();
lowerECAM_eng.page.hide();
lowerECAM_fctl.page.hide();
@ -1290,6 +1314,26 @@ var canvas_lowerECAM_wheel = {
},
};
var canvas_lowerECAM_test = {
init: func(canvas_group, file) {
var font_mapper = func(family, weight) {
return "LiberationFonts/LiberationSans-Regular.ttf";
};
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
me.page = canvas_group;
return me;
},
new: func(canvas_group, file) {
var m = {parents: [canvas_lowerECAM_test]};
m.init(canvas_group, file);
return m;
},
};
setlistener("sim/signals/fdm-initialized", func {
lowerECAM_display = canvas.new({
"name": "lowerECAM",
@ -1303,12 +1347,14 @@ setlistener("sim/signals/fdm-initialized", func {
var groupFctl = lowerECAM_display.createGroup();
var groupWheel = lowerECAM_display.createGroup();
var groupDoor = lowerECAM_display.createGroup();
var group_test = lowerECAM_display.createGroup();
lowerECAM_apu = canvas_lowerECAM_apu.new(groupApu, "Aircraft/IDG-A32X/Models/Instruments/Lower-ECAM/res/apu.svg");
lowerECAM_eng = canvas_lowerECAM_eng.new(groupEng, "Aircraft/IDG-A32X/Models/Instruments/Lower-ECAM/res/eng-eis2.svg");
lowerECAM_fctl = canvas_lowerECAM_fctl.new(groupFctl, "Aircraft/IDG-A32X/Models/Instruments/Lower-ECAM/res/fctl.svg");
lowerECAM_wheel = canvas_lowerECAM_wheel.new(groupWheel, "Aircraft/IDG-A32X/Models/Instruments/Lower-ECAM/res/wheel.svg");
lowerECAM_door = canvas_lowerECAM_door.new(groupDoor, "Aircraft/IDG-A32X/Models/Instruments/Lower-ECAM/res/door.svg");
lowerECAM_test = canvas_lowerECAM_test.new(group_test, "Aircraft/IDG-A32X/Models/Instruments/Common/res/du-test.svg");
lowerECAM_update.start();
});

View file

@ -1,13 +1,13 @@
# A3XX ND Implementation
var get_local_path = func(file){
var aircraft_dir = split('/', getprop("/sim/aircraft-dir"))[-1];
var aircraft_dir = split("/", getprop("/sim/aircraft-dir"))[-1];
return "Aircraft/" ~ aircraft_dir ~ "/Models/Instruments/ND/canvas/"~ file;
};
var version = getprop('sim/version/flightgear');
var v = split('.', version);
version = num(v[0]~'.'~v[1]);
var version = getprop("sim/version/flightgear");
var v = split(".", version);
version = num(v[0]~"."~v[1]);
var SymbolLayer = canvas.SymbolLayer;
var SingleSymbolLayer = canvas.SingleSymbolLayer;
@ -25,10 +25,10 @@ var SymbolCache32x32 = canvas.SymbolCache32x32;
var SymbolCache = canvas.SymbolCache;
var Text = canvas.Text;
io.include('ND_config.nas');
io.include('framework/canvas.nas');
io.include('framework/navdisplay.nas');
io.include('framework/MapDrivers.nas');
io.include('loaders.nas');
io.include('helpers.nas');
io.include('style.nas');
io.include("ND_config.nas");
io.include("framework/canvas.nas");
io.include("framework/navdisplay.nas");
io.include("framework/MapDrivers.nas");
io.include("loaders.nas");
io.include("helpers.nas");
io.include("style.nas");

View file

@ -13,7 +13,7 @@ var A3XXRouteDriver = {
me.flightplan = flightplan();
},
getNumberOfFlightPlans: func(){1},
getFlightPlanType: func(fpNum){'current'},
getFlightPlanType: func(fpNum){"current"},
getFlightPlan: func(fpNum){me.flightplan},
getPlanSize: func(fpNum){me.flightplan.getPlanSize()},
getWP: func(fpNum, idx){me.flightplan.getWP(idx)},
@ -55,16 +55,16 @@ var MultiA3XXRouteDriver = {
me._flightplans = subv_l ~ subv_r;
}
}
me.triggerSignal('fp-added');
me.triggerSignal("fp-added");
},
removeFlightPlanOfType: func(type){
var new_vec = [];
foreach(var fp; me._flightplans){
if(fp['type'] != type)
if(fp["type"] != type)
append(new_vec, fp);
}
me._flightplans = new_vec;
me.triggerSignal('fp-removed');
me.triggerSignal("fp-removed");
},
getNumberOfFlightPlans: func(){
size(me._flightplans);
@ -96,10 +96,10 @@ var MultiA3XXRouteDriver = {
setprop(me.signalPath(signal));
},
signalPath: func(signal){
'autopilot/route-manager/signals/rd-'~ signal;
"autopilot/route-manager/signals/rd-"~ signal;
},
getListeners: func(){[
me.getSignal('fp-added'),
me.getSignal('fp-removed')
me.getSignal("fp-added"),
me.getSignal("fp-removed")
]}
};

View file

@ -5,45 +5,52 @@
# Copyright (c) Joshua Davidson (it0uchpods) #
##############################################
io.include('A3XX_ND.nas');
io.include("A3XX_ND.nas");
io.include('A3XX_ND_drivers.nas');
canvas.NDStyles['Airbus'].options.defaults.route_driver = A3XXRouteDriver.new();
io.include("A3XX_ND_drivers.nas");
canvas.NDStyles["Airbus"].options.defaults.route_driver = A3XXRouteDriver.new();
var nd_nd = nil;
var nd_nd2 = nil;
var ND_1 = nil;
var ND_2 = nil;
var ND_1_test = nil;
var ND_2_test = nil;
var elapsedtime = 0;
setprop("/instrumentation/du/du2-test", 0);
setprop("/instrumentation/du/du2-test-time", 0);
setprop("/instrumentation/du/du5-test", 0);
setprop("/instrumentation/du/du5-test-time", 0);
var nd_display = {};
var ND = canvas.NavDisplay;
var myCockpit_switches = {
'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_dme': {path: '/inputs/DME', 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: '/nd/display-type', value:'LCD', type:'STRING'},
'toggle_true_north': {path: '/nd/true-north', value:0, type:'BOOL'},
'toggle_track_heading': {path: '/trk-selected', value:0, type:'BOOL'},
'toggle_wpt_idx': {path: '/inputs/plan-wpt-index', value: -1, type: 'INT'},
'toggle_plan_loop': {path: '/nd/plan-mode-loop', value: 0, type: 'INT'},
'toggle_weather_live': {path: '/nd/wxr-live-enabled', value: 0, type: 'BOOL'},
'toggle_chrono': {path: '/inputs/CHRONO', value: 0, type: 'INT'},
'toggle_xtrk_error': {path: '/nd/xtrk-error', value: 0, type: 'BOOL'},
'toggle_trk_line': {path: '/nd/trk-line', value: 0, type: 'BOOL'},
"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_dme": {path: "/inputs/DME", 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: "/nd/display-type", value:"LCD", type:"STRING"},
"toggle_true_north": {path: "/nd/true-north", value:0, type:"BOOL"},
"toggle_track_heading": {path: "/trk-selected", value:0, type:"BOOL"},
"toggle_wpt_idx": {path: "/inputs/plan-wpt-index", value: -1, type: "INT"},
"toggle_plan_loop": {path: "/nd/plan-mode-loop", value: 0, type: "INT"},
"toggle_weather_live": {path: "/nd/wxr-live-enabled", value: 0, type: "BOOL"},
"toggle_chrono": {path: "/inputs/CHRONO", value: 0, type: "INT"},
"toggle_xtrk_error": {path: "/nd/xtrk-error", value: 0, type: "BOOL"},
"toggle_trk_line": {path: "/nd/trk-line", value: 0, type: "BOOL"},
};
var canvas_nd_base = {
@ -53,7 +60,7 @@ var canvas_nd_base = {
};
if (file != nil) {
canvas.parsesvg(canvas_group, file, {'font-mapper': font_mapper});
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
var svg_keys = me.getKeys();
foreach(var key; svg_keys) {
@ -68,28 +75,63 @@ var canvas_nd_base = {
return [];
},
update: func() {
if (getprop("/systems/electrical/bus/ac1") >= 110 and getprop("/systems/electrical/ac1-src") != "RAT" and getprop("/systems/electrical/bus/ac2") >= 110 and getprop("/systems/electrical/ac2-src") != "RAT" and getprop("/controls/lighting/DU/du2") > 0) {
nd_nd.page.show();
nd_nd.NDCpt.update();
elapsedtime = getprop("/sim/time/elapsed-sec");
if (getprop("/systems/electrical/bus/ac1") >= 110 and getprop("/systems/electrical/bus/ac2") >= 110) {
if (getprop("/instrumentation/du/du2-test") != 1) {
setprop("/instrumentation/du/du2-test", 1);
setprop("/instrumentation/du/du2-test-time", getprop("/sim/time/elapsed-sec"));
}
if (getprop("/instrumentation/du/du5-test") != 1) {
setprop("/instrumentation/du/du5-test", 1);
setprop("/instrumentation/du/du5-test-time", getprop("/sim/time/elapsed-sec"));
}
} else {
nd_nd.page.hide();
setprop("/instrumentation/du/du2-test", 0);
setprop("/instrumentation/du/du5-test", 0);
}
if (getprop("/systems/electrical/bus/ac1") >= 110 and getprop("/systems/electrical/ac1-src") != "RAT" and getprop("/systems/electrical/bus/ac2") >= 110 and getprop("/systems/electrical/ac2-src") != "RAT" and getprop("/controls/lighting/DU/du2") > 0) {
if (getprop("/instrumentation/du/du2-test-time") + 38.5 >= elapsedtime and getprop("/modes/cpt-du-xfr") != 1) {
ND_1.page.hide();
ND_1_test.page.show();
} else if (getprop("/instrumentation/du/du1-test-time") + 39.5 >= elapsedtime and getprop("/modes/cpt-du-xfr") == 1) {
ND_1.page.hide();
ND_1_test.page.show();
} else {
ND_1_test.page.hide();
ND_1.page.show();
ND_1.NDCpt.update();
}
} else {
ND_1_test.page.hide();
ND_1.page.hide();
}
if (getprop("/systems/electrical/bus/ac1") >= 110 and getprop("/systems/electrical/ac1-src") != "RAT" and getprop("/systems/electrical/bus/ac2") >= 110 and getprop("/systems/electrical/ac2-src") != "RAT" and getprop("/controls/lighting/DU/du5") > 0) {
nd_nd2.page.show();
nd_nd2.NDFo.update();
if (getprop("/instrumentation/du/du5-test-time") + 38.5 >= elapsedtime and getprop("/modes/fo-du-xfr") != 1) {
ND_2.page.hide();
ND_2_test.page.show();
} else if (getprop("/instrumentation/du/du6-test-time") + 39.5 >= elapsedtime and getprop("/modes/fo-du-xfr") == 1) {
ND_2.page.hide();
ND_2_test.page.show();
} else {
ND_2_test.page.hide();
ND_2.page.show();
ND_2.NDFo.update();
}
} else {
nd_nd2.page.hide();
ND_2_test.page.hide();
ND_2.page.hide();
}
},
};
var canvas_nd_nd = {
var canvas_ND_1 = {
new: func(canvas_group) {
var m = {parents: [canvas_nd_nd, canvas_nd_base]};
var m = {parents: [canvas_ND_1, canvas_nd_base]};
m.init(canvas_group);
# here we make the ND:
me.NDCpt = ND.new("instrumentation/efis", myCockpit_switches, 'Airbus');
me.NDCpt = ND.new("instrumentation/efis", myCockpit_switches, "Airbus");
me.NDCpt.newMFD(canvas_group);
me.NDCpt.update();
@ -103,13 +145,13 @@ var canvas_nd_nd = {
},
};
var canvas_nd_nd_r = {
var canvas_ND_2 = {
new: func(canvas_group) {
var m = {parents: [canvas_nd_nd_r, canvas_nd_base]};
var m = {parents: [canvas_ND_2, canvas_nd_base]};
m.init(canvas_group);
# here we make the ND:
me.NDFo = ND.new("instrumentation/efis[1]", myCockpit_switches, 'Airbus');
me.NDFo = ND.new("instrumentation/efis[1]", myCockpit_switches, "Airbus");
me.NDFo.newMFD(canvas_group);
me.NDFo.update();
@ -123,6 +165,46 @@ var canvas_nd_nd_r = {
},
};
var canvas_ND_1_test = {
init: func(canvas_group, file) {
var font_mapper = func(family, weight) {
return "LiberationFonts/LiberationSans-Regular.ttf";
};
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
me.page = canvas_group;
return me;
},
new: func(canvas_group, file) {
var m = {parents: [canvas_ND_1_test]};
m.init(canvas_group, file);
return m;
},
};
var canvas_ND_2_test = {
init: func(canvas_group, file) {
var font_mapper = func(family, weight) {
return "LiberationFonts/LiberationSans-Regular.ttf";
};
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
me.page = canvas_group;
return me;
},
new: func(canvas_group, file) {
var m = {parents: [canvas_ND_2_test]};
m.init(canvas_group, file);
return m;
},
};
setlistener("sim/signals/fdm-initialized", func {
setprop("instrumentation/efis[0]/inputs/plan-wpt-index", -1);
setprop("instrumentation/efis[1]/inputs/plan-wpt-index", -1);
@ -143,11 +225,15 @@ setlistener("sim/signals/fdm-initialized", func {
nd_display.main.addPlacement({"node": "ND.screen"});
nd_display.right.addPlacement({"node": "ND_R.screen"});
var group_nd = nd_display.main.createGroup();
var group_nd1 = nd_display.main.createGroup();
var group_nd1_test = nd_display.main.createGroup();
var group_nd2 = nd_display.right.createGroup();
var group_nd2_test = nd_display.right.createGroup();
nd_nd = canvas_nd_nd.new(group_nd);
nd_nd2 = canvas_nd_nd_r.new(group_nd2);
ND_1 = canvas_ND_1.new(group_nd1);
ND_1_test = canvas_ND_1_test.new(group_nd1_test, "Aircraft/IDG-A32X/Models/Instruments/Common/res/du-test.svg");
ND_2 = canvas_ND_2.new(group_nd2);
ND_2_test = canvas_ND_2_test.new(group_nd2_test, "Aircraft/IDG-A32X/Models/Instruments/Common/res/du-test.svg");
nd_update.start();
});
@ -204,7 +290,7 @@ setlistener("/flight-management/control/capture-leg", func(n) {
}, 0, 0);
var showNd = func(nd = nil) {
if(nd == nil) nd = 'main';
if(nd == nil) nd = "main";
var dlg = canvas.Window.new([512, 512], "dialog");
dlg.setCanvas(nd_display[nd]);
}

View file

@ -4,18 +4,18 @@ canvas.NDConfig = {
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: '/it-autoflight/output/athr',
fplan_active: "autopilot/route-manager/active",
athr: "/it-autoflight/output/athr",
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',
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",
}
};

View file

@ -13,7 +13,7 @@ canvas.RouteDriver = {
me.flightplan = flightplan();
},
getNumberOfFlightPlans: func(){1},
getFlightPlanType: func(fpNum){'active'},
getFlightPlanType: func(fpNum){"active"},
getFlightPlan: func(fpNum){me.flightplan},
getPlanSize: func(fpNum){me.flightplan.getPlanSize()},
getWP: func(fpNum, idx){me.flightplan.getWP(idx)},
@ -24,7 +24,7 @@ canvas.RouteDriver = {
getHoldPatterns: func(fpNum){[]},
shouldUpdate: func 1,
shouldDisplayWP: func(fpNum, idx) 1,
getCurrentWPIdx: func(fpNum) getprop('autopilot/route-manager/current-wp'),
getCurrentWPIdx: func(fpNum) getprop("autopilot/route-manager/current-wp"),
getTimeConstraint: func (fpNum, wp_idx) {nil}
};
@ -60,16 +60,16 @@ canvas.MultiRouteDriver = {
me._flightplans = subv_l ~ subv_r;
}
}
me.triggerSignal('fp-added');
me.triggerSignal("fp-added");
},
removeFlightPlanOfType: func(type){
var new_vec = [];
foreach(var fp; me._flightplans){
if(fp['type'] != type)
if(fp["type"] != type)
append(new_vec, fp);
}
me._flightplans = new_vec;
me.triggerSignal('fp-removed');
me.triggerSignal("fp-removed");
},
getNumberOfFlightPlans: func(){
size(me._flightplans);
@ -101,11 +101,11 @@ canvas.MultiRouteDriver = {
setprop(me.signalPath(signal));
},
signalPath: func(signal){
'autopilot/route-manager/signals/rd-'~ signal;
"autopilot/route-manager/signals/rd-"~ signal;
},
getListeners: func(){[
me.getSignal('fp-added'),
me.getSignal('fp-removed')
me.getSignal("fp-added"),
me.getSignal("fp-removed")
]},
getCurrentWPIdx: func(fpNum) {
var fp = me.getFlightPlan(fpNum);

View file

@ -10,7 +10,7 @@ canvas.Group.getChildrenOfType = func(type, array = nil){
if(children == nil)
children = [];
var my_children = me.getChildren();
if(typeof(type) != 'vector')
if(typeof(type) != "vector")
type = [type];
foreach(var c; my_children){
foreach(var t; type){
@ -32,14 +32,14 @@ canvas.Group.setColor = func(){
var color = arg;
var types = [Path, Text];
var arg_c = size(color);
if(arg_c > 1 and typeof(color[-1]) == 'vector'){
if(arg_c > 1 and typeof(color[-1]) == "vector"){
types = color[-1];
color = subvec(color, 0, arg_c - 1);
}
var children = me.getChildrenOfType(types);
if(typeof(color) == 'vector'){
if(typeof(color) == "vector"){
var first = color[0];
if(typeof(first) == 'vector')
if(typeof(first) == "vector")
color = first;
}
foreach(var c; children)
@ -97,8 +97,8 @@ canvas.Symbol.formattedString = func(frmt, model_props){
if(contains(me.model, prop)){
var val = me.model[prop];
var tp = typeof(val);
if(tp != 'scalar'){
val = '';
if(tp != "scalar"){
val = "";
#printlog("warn", "formattedString: invalid type for "~prop~" (" ~ tp ~ ")");
} else {
append(args, val);
@ -124,7 +124,7 @@ canvas.Symbol.getStyle = func(name, default = nil){
st = me.layer.style;
if(st == nil) return default;
var val = opt_member(st, name);
if(typeof(val) == 'func'){
if(typeof(val) == "func"){
val = (call(val,[],me));
}
if(val == nil) return default;
@ -133,14 +133,14 @@ canvas.Symbol.getStyle = func(name, default = nil){
canvas.Symbol.getLabelFromModel = func(default_val = nil){
if(me.model == nil) return default_val;
if(default_val == nil and contains(me.model, 'id'))
if(default_val == nil and contains(me.model, "id"))
default_val = me.model.id;
var label_content = me.getOption('label_content');
var label_content = me.getOption("label_content");
if(label_content == nil) return default_val;
if(typeof(label_content) == 'scalar')
if(typeof(label_content) == "scalar")
label_content = [label_content];
var format_s = me.getOption('label_format');
var label = '';
var format_s = me.getOption("label_format");
var label = "";
if(format_s == nil){
format_s = "%s";
}
@ -148,9 +148,9 @@ canvas.Symbol.getLabelFromModel = func(default_val = nil){
};
canvas.Symbol.callback = func(name, args...){
name = name ~'_callback';
name = name ~"_callback";
var f = me.getOption(name);
if(typeof(f) == 'func'){
if(typeof(f) == "func"){
return call(f, args, me);
}
};
@ -167,7 +167,7 @@ canvas.DotSym.update = func() {
} else
me.element.show();
me.draw();
if(me.getOption('disable_position', 0)) return; # << CHECK FOR OPTION 'disable_position'
if(me.getOption("disable_position", 0)) return; # << CHECK FOR OPTION "disable_position"
var pos = me.controller.getpos(me.model);
if (size(pos) == 2)
pos~=[nil]; # fall through
@ -183,27 +183,27 @@ canvas.DotSym.update = func() {
# SVGSymbol
canvas.SVGSymbol.init = func() {
me.callback('init_before');
var opt_path = me.getStyle('svg_path');
me.callback("init_before");
var opt_path = me.getStyle("svg_path");
if(opt_path != nil)
me.svg_path = opt_path;
if (!me.cacheable) {
if(me.svg_path != nil and me.svg_path != '')
if(me.svg_path != nil and me.svg_path != "")
canvas.parsesvg(me.element, me.svg_path);
# hack:
if (var scale = me.layer.style['scale_factor'])
if (var scale = me.layer.style["scale_factor"])
me.element.setScale(scale);
if ((var transl = me.layer.style['translate']) != nil)
if ((var transl = me.layer.style["translate"]) != nil)
me.element.setTranslation(transl);
} else {
__die("cacheable not implemented yet!");
}
me.callback('init_after');
me.callback("init_after");
me.draw();
};
canvas.SVGSymbol.draw = func{
me.callback('draw');
me.callback("draw");
};
# SymbolLayer
@ -223,13 +223,13 @@ canvas.SymbolLayer._new = func(m, style, controller, options) {
if (controller.parents[0].parents[0] != SymbolLayer.Controller)
__die("MultiSymbolLayer: OOP error");
if(options != nil){ # << CHECK FOR CONFIGURABLE LISTENERS
var listeners = opt_member(controller, 'listeners');
var listen = opt_member(options, 'listen');
var listeners = opt_member(controller, "listeners");
var listen = opt_member(options, "listen");
if (listen != nil and listeners != nil){
var listen_tp = typeof(listen);
if(listen_tp != 'vector' and listen_tp != 'scalar')
if(listen_tp != "vector" and listen_tp != "scalar")
__die("Options 'listen' cannot be a "~ listen_tp);
if(typeof(listen) == 'scalar')
if(typeof(listen) == "scalar")
listen = [listen];
foreach(var node_name; listen){
var node = opt_member(options, node_name);
@ -247,9 +247,9 @@ canvas.SymbolLayer._new = func(m, style, controller, options) {
canvas.LineSymbol.new = func(group, layer, model, controller=nil) {
if (me == nil) __die("Need me reference for LineSymbol.new()");
if (typeof(model) != 'vector') {
if(typeof(model) == 'hash'){
if(!contains(model, 'path'))
if (typeof(model) != "vector") {
if(typeof(model) == "hash"){
if(!contains(model, "path"))
canvas.__die("LineSymbol.new(): model hash requires path");
}
else canvas.__die("LineSymbol.new(): need a vector of points or a hash");
@ -272,7 +272,7 @@ canvas.LineSymbol.new = func(group, layer, model, controller=nil) {
};
# Non-static:
canvas.LineSymbol.draw = func() {
me.callback('draw_before');
me.callback("draw_before");
if (!me.needs_update) return;
#printlog(_MP_dbg_lvl, "redrawing a LineSymbol "~me.layer.type);
me.element.reset();
@ -280,7 +280,7 @@ canvas.LineSymbol.draw = func() {
var coords = [];
var cmd = canvas.Path.VG_MOVE_TO;
var path = me.model;
if(typeof(path) == 'hash'){
if(typeof(path) == "hash"){
path = me.model.path;
if(path == nil)
canvas.__die("LineSymbol model requires a 'path' member (vector)");
@ -297,7 +297,7 @@ canvas.LineSymbol.draw = func() {
}
}
me.element.setDataGeo(cmds, coords);
me.element.update(); # this doesn't help with flickering, it seems
me.callback('draw_after');
me.element.update(); # this doesn"t help with flickering, it seems
me.callback("draw_after");
};

View file

@ -16,8 +16,8 @@ canvas.NavDisplay.set_switch = func(s, v) {
};
canvas.NavDisplay.get_nav_path = func (type, idx) {
var name = (type == 'dme' ? type : 'nav');
var path = 'instrumentation/%s[%d]/';
var name = (type == "dme" ? type : "nav");
var path = "instrumentation/%s[%d]/";
var indexes = me.radio_cfg[type];
if (indexes != nil) {
idx = indexes[idx];
@ -34,32 +34,32 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
me.nd = canvas_group;
me.canvas_handle = parent;
me.df_options = nil;
if(contains(me.nd_style, 'options'))
if(contains(me.nd_style, "options"))
me.df_options = me.nd_style.options;
nd_options = default_hash(nd_options, me.df_options);
me.options = nd_options;
me.route_driver = nil;
if(contains(me.options, 'route_driver')){
if(contains(me.options, "route_driver")){
me.route_driver = me.options.route_driver;
}
elsif(contains(me.options, 'defaults')){
if(contains(me.options.defaults, 'route_driver'))
elsif(contains(me.options, "defaults")){
if(contains(me.options.defaults, "route_driver"))
me.route_driver = me.options.defaults.route_driver;
}
me.radio_cfg = me.options['radio'];
me.radio_cfg = me.options["radio"];
if (me.radio_cfg == nil) me.radio_cfg = {};
# load the specified SVG file into the me.nd group and populate all sub groups
canvas.parsesvg(me.nd, me.nd_style.svg_filename, {'font-mapper': me.nd_style.font_mapper});
canvas.parsesvg(me.nd, me.nd_style.svg_filename, {"font-mapper": me.nd_style.font_mapper});
me.symbols = {}; # storage for SVG elements, to avoid namespace pollution (all SVG elements end up here)
foreach(var feature; me.nd_style.features ) {
me.symbols[feature.id] = me.nd.getElementById(feature.id).updateCenter();
if(contains(feature.impl,'init')) feature.impl.init(me.nd, feature); # call The element's init code (i.e. updateCenter)
if(contains(feature.impl,"init")) feature.impl.init(me.nd, feature); # call The element"s init code (i.e. updateCenter)
}
### this is the "old" method that's less flexible, we want to use the style hash instead (see above)
### this is the "old" method that"s less flexible, we want to use the style hash instead (see above)
# because things are much better configurable that way
# now look up all required SVG elements and initialize member fields using the same name to have a convenient handle
foreach(var element; ["dmeLDist","dmeRDist","dmeL","dmeR","vorL","vorR","vorLId","vorRId",
@ -78,7 +78,7 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
me.map = me.nd.createChild("map","map")
.set("clip", "rect(124, 1024, 1024, 0)")
.set("screen-range", 700)
.set('z-index',-1);
.set("z-index",-1);
me.update_sub(); # init some map properties based on switches
@ -108,7 +108,7 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
}
# a hash with controller callbacks, will be passed onto draw routines to customize behavior/appearance
# the point being that draw routines don't know anything about their frontends (instrument or GUI dialog)
# the point being that draw routines don"t know anything about their frontends (instrument or GUI dialog)
# so we need some simple way to communicate between frontend<->backend until we have real controllers
# for now, a single controller hash is shared by most layers - unsupported callbacks are simply ignored by the draw files
#
@ -148,32 +148,32 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
###
# set up various layers, controlled via callbacks in the controller hash
# revisit this code once Philosopher's "Smart MVC Symbols/Layers" work is committed and integrated
# revisit this code once Philosopher"s "Smart MVC Symbols/Layers" work is committed and integrated
# helper / closure generator
var make_event_handler = func(predicate, layer) func predicate(me, layer);
me.layers={}; # storage container for all ND specific layers
# look up all required layers as specified per the NDStyle hash and do the initial setup for event handling
var default_opts = me.options != nil and contains(me.options, 'defaults') ? me.options.defaults : nil;
var default_opts = me.options != nil and contains(me.options, "defaults") ? me.options.defaults : nil;
foreach(var layer; me.nd_style.layers) {
if(layer['disabled']) continue; # skip this layer
if(layer["disabled"]) continue; # skip this layer
#print("newMFD(): Setting up ND layer:", layer.name);
var the_layer = nil;
if(!layer['isMapStructure']) # set up an old INEFFICIENT and SLOW layer
if(!layer["isMapStructure"]) # set up an old INEFFICIENT and SLOW layer
the_layer = me.layers[layer.name] = canvas.MAP_LAYERS[layer.name].new( me.map, layer.name, controller );
else {
printlog(_MP_dbg_lvl, "Setting up MapStructure-based layer for ND, name:", layer.name);
var opt = me.options != nil and me.options[layer.name] != nil ? me.options[layer.name] :nil;
if(opt == nil and contains(layer, 'options'))
if(opt == nil and contains(layer, "options"))
opt = layer.options;
if(opt != nil and default_opts != nil)
opt = default_hash(opt, default_opts);
#elsif(default_opts != nil)
# opt = default_opts;
var style = nil;
if(contains(layer, 'style'))
if(contains(layer, "style"))
style = layer.style;
#print("Options is: ", opt!=nil?"enabled":"disabled");
#debug.dump(opt);
@ -183,15 +183,15 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
opts: opt,
visible:0,
style: style,
priority: layer['z-index']
priority: layer["z-index"]
);
#me.map.addLayer(canvas.SymbolLayer, layer.name, layer['z-index'], style, opt, 0);
#me.map.addLayer(canvas.SymbolLayer, layer.name, layer["z-index"], style, opt, 0);
the_layer = me.layers[layer.name] = me.map.getLayer(layer.name);
if(opt != nil and contains(opt, 'range_dependant')){
if(opt != nil and contains(opt, "range_dependant")){
if(opt.range_dependant)
append(me.range_dependant_layers, the_layer);
}
if(contains(layer, 'always_update'))
if(contains(layer, "always_update"))
me.always_update_layers[layer.name] = layer.always_update;
if (1) (func {
var l = layer;
@ -206,11 +206,11 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
# now register all layer specific notification listeners and their corresponding update predicate/callback
# pass the ND instance and the layer handle to the predicate when it is called
# so that it can directly access the ND instance and its own layer (without having to know the layer's name)
# so that it can directly access the ND instance and its own layer (without having to know the layer"s name)
var event_handler = make_event_handler(layer.predicate, the_layer);
foreach(var event; layer.update_on) {
# this handles timers
if (typeof(event)=='hash' and contains(event, 'rate_hz')) {
if (typeof(event)=="hash" and contains(event, "rate_hz")) {
#print("FIXME: navdisplay.mfd timer handling is broken ATM");
var job=me.addtimer(1/event.rate_hz, event_handler);
job.start();
@ -239,14 +239,14 @@ canvas.NavDisplay.update_sub = func(){
var userLon = me.aircraft_source.get_lon();
var userGndSpd = me.aircraft_source.get_gnd_spd();
var userVSpd = me.aircraft_source.get_vspd();
var dispLCD = me.get_switch('toggle_display_type') == "LCD";
var dispLCD = me.get_switch("toggle_display_type") == "LCD";
# Heading update
var userHdgMag = me.aircraft_source.get_hdg_mag();
var userHdgTru = me.aircraft_source.get_hdg_tru();
var userTrkMag = me.aircraft_source.get_trk_mag();
var userTrkTru = me.aircraft_source.get_trk_tru();
if(me.get_switch('toggle_true_north')) {
if(me.get_switch("toggle_true_north")) {
var userHdg=userHdgTru;
me.userHdg=userHdgTru;
var userTrk=userTrkTru;
@ -268,8 +268,8 @@ canvas.NavDisplay.update_sub = func(){
me.userTrk=userHdg;
}
if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT")
or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD"))
if((me.in_mode("toggle_display_mode", ["MAP"]) and me.get_switch("toggle_display_type") == "CRT")
or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD"))
{
userHdgTrk = userTrk;
me.userHdgTrk = userTrk;
@ -291,7 +291,7 @@ canvas.NavDisplay.update_sub = func(){
};
# reposition the map, change heading & range:
var pln_wpt_idx = getprop(me.efis_path ~ "/inputs/plan-wpt-index");
if(me.in_mode('toggle_display_mode', ['PLAN']) and pln_wpt_idx >= 0) {
if(me.in_mode("toggle_display_mode", ["PLAN"]) and pln_wpt_idx >= 0) {
if(me.route_driver != nil){
var wp = me.route_driver.getPlanModeWP(pln_wpt_idx);
if(wp != nil){
@ -309,14 +309,14 @@ canvas.NavDisplay.update_sub = func(){
pos.lat = userLat;
pos.lon = userLon;
}
if(me.in_mode('toggle_display_mode', ['PLAN'])) {
if(me.in_mode("toggle_display_mode", ["PLAN"])) {
pos.hdg = 0;
pos.range = me.rangeNm()*2
} else {
pos.range = me.rangeNm(); # avoid this here, use a listener instead
pos.hdg = userHdgTrkTru;
}
if(me.options != nil and (var pos_callback = me.options['position_callback']) != nil)
if(me.options != nil and (var pos_callback = me.options["position_callback"]) != nil)
pos_callback(me, pos);
call(me.map.setPos, [pos.lat, pos.lon], me.map, pos);
if(pos.range != oldRange){
@ -329,12 +329,12 @@ canvas.NavDisplay.update_sub = func(){
canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft specific, cannot easily be reused by other aircraft
{
var _time = systime();
# Disables WXR Live if it's not enabled. The toggle_weather_live should be common to all
# Disables WXR Live if it"s not enabled. The toggle_weather_live should be common to all
# ND instances.
var wxr_live_enabled = getprop(wxr_live_tree~'/enabled');
if(wxr_live_enabled == nil or wxr_live_enabled == '')
var wxr_live_enabled = getprop(wxr_live_tree~"/enabled");
if(wxr_live_enabled == nil or wxr_live_enabled == "")
wxr_live_enabled = 0;
me.set_switch('toggle_weather_live', wxr_live_enabled);
me.set_switch("toggle_weather_live", wxr_live_enabled);
call(me.update_sub, nil, nil, caller(0)[0]); # call this in the same namespace to "steal" its variables
# MapStructure update!
@ -351,14 +351,14 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
# TODO: should be refactored!
var translation_callback = nil;
if(me.options != nil)
translation_callback = me.options['translation_callback'];
if(typeof(translation_callback) == 'func'){
translation_callback = me.options["translation_callback"];
if(typeof(translation_callback) == "func"){
var trsl = translation_callback(me);
me.map.setTranslation(trsl.x, trsl.y);
} else {
if(me.in_mode('toggle_display_mode', ['PLAN']))
if(me.in_mode("toggle_display_mode", ["PLAN"]))
me.map.setTranslation(512,512);
elsif(me.get_switch('toggle_centered'))
elsif(me.get_switch("toggle_centered"))
me.map.setTranslation(512,565);
else
me.map.setTranslation(512,824);
@ -368,7 +368,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
var dme1_path = "/instrumentation/dme[2]";
var dme2_path = "/instrumentation/dme[3]";
if(me.get_switch('toggle_rh_vor_adf') == 1) {
if(me.get_switch("toggle_rh_vor_adf") == 1) {
me.symbols.vorR.setText("VOR R");
me.symbols.vorR.setColor(0.195,0.96,0.097);
me.symbols.dmeR.setText("DME");
@ -382,7 +382,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
me.symbols.dmeRDist.setText(sprintf("%3.1f",getprop(dme2_path~ "indicated-distance-nm")));
else me.symbols.dmeRDist.setText(" ---");
me.symbols.dmeRDist.setColor(0.195,0.96,0.097);
} elsif(me.get_switch('toggle_rh_vor_adf') == -1) {
} elsif(me.get_switch("toggle_rh_vor_adf") == -1) {
me.symbols.vorR.setText("ADF R");
me.symbols.vorR.setColor(0,0.6,0.85);
me.symbols.dmeR.setText("");
@ -406,8 +406,8 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
if (hdg_bug_active == nil)
hdg_bug_active = 1;
if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT")
or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD"))
if((me.in_mode("toggle_display_mode", ["MAP"]) and me.get_switch("toggle_display_type") == "CRT")
or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD"))
{
me.symbols.trkInd.setRotation(0);
me.symbols.curHdgPtr.setRotation((userHdg-userTrk)*D2R);
@ -419,7 +419,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
me.symbols.curHdgPtr.setRotation(0);
me.symbols.curHdgPtr2.setRotation(0);
}
if(!me.in_mode('toggle_display_mode', ['PLAN']))
if(!me.in_mode("toggle_display_mode", ["PLAN"]))
{
var hdgBugRot = (vhdg_bug-userHdgTrk)*D2R;
me.symbols.selHdgLine.setRotation(hdgBugRot);
@ -428,9 +428,9 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
me.symbols.selHdgLine2.setRotation(hdgBugRot);
}
var staPtrVis = !me.in_mode('toggle_display_mode', ['PLAN']);
if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT")
or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD"))
var staPtrVis = !me.in_mode("toggle_display_mode", ["PLAN"]);
if((me.in_mode("toggle_display_mode", ["MAP"]) and me.get_switch("toggle_display_type") == "CRT")
or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD"))
{
var vorheading = userTrkTru;
var adfheading = userTrkMag;
@ -440,35 +440,35 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
var vorheading = userHdgTru;
var adfheading = userHdgMag;
}
if (getprop("/instrumentation/nav[2]/heading-deg") != nil and me.get_switch('toggle_true_north') == 0) {
if (getprop("/instrumentation/nav[2]/heading-deg") != nil and me.get_switch("toggle_true_north") == 0) {
var nav0hdg = getprop("/instrumentation/nav[2]/heading-deg") - getprop("/orientation/heading-magnetic-deg");
} else if (getprop("/instrumentation/nav[2]/heading-deg") != nil and me.get_switch('toggle_true_north') == 1) {
} else if (getprop("/instrumentation/nav[2]/heading-deg") != nil and me.get_switch("toggle_true_north") == 1) {
var nav0hdg = getprop("/instrumentation/nav[2]/heading-deg") - getprop("/orientation/heading-deg");
} else {
var nav0hdg = 0;
}
if (getprop("/instrumentation/nav[3]/heading-deg") != nil and me.get_switch('toggle_true_north') == 0) {
if (getprop("/instrumentation/nav[3]/heading-deg") != nil and me.get_switch("toggle_true_north") == 0) {
var nav1hdg = getprop("/instrumentation/nav[3]/heading-deg") - getprop("/orientation/heading-magnetic-deg");
} else if (getprop("/instrumentation/nav[3]/heading-deg") != nil and me.get_switch('toggle_true_north') == 1) {
} else if (getprop("/instrumentation/nav[3]/heading-deg") != nil and me.get_switch("toggle_true_north") == 1) {
var nav1hdg = getprop("/instrumentation/nav[3]/heading-deg") - getprop("/orientation/heading-deg");
} else {
var nav1hdg = 0;
}
var adf0hdg=getprop("instrumentation/adf/indicated-bearing-deg");
var adf1hdg=getprop("instrumentation/adf[1]/indicated-bearing-deg");
if(!me.get_switch('toggle_centered'))
if(!me.get_switch("toggle_centered"))
{
if(me.in_mode('toggle_display_mode', ['PLAN']))
if(me.in_mode("toggle_display_mode", ["PLAN"]))
me.symbols.trkInd.hide();
else
me.symbols.trkInd.show();
if((getprop("instrumentation/nav[2]/in-range") and me.get_switch('toggle_lh_vor_adf') == 1)) {
if((getprop("instrumentation/nav[2]/in-range") and me.get_switch("toggle_lh_vor_adf") == 1)) {
me.symbols.staArrowL.setVisible(staPtrVis);
me.symbols.staToL.setColor(0.195,0.96,0.097);
me.symbols.staFromL.setColor(0.195,0.96,0.097);
me.symbols.staArrowL.setRotation(nav0hdg*D2R);
}
elsif(getprop("instrumentation/adf/in-range") and (me.get_switch('toggle_lh_vor_adf') == -1)) {
elsif(getprop("instrumentation/adf/in-range") and (me.get_switch("toggle_lh_vor_adf") == -1)) {
me.symbols.staArrowL.setVisible(staPtrVis);
me.symbols.staToL.setColor(0,0.6,0.85);
me.symbols.staFromL.setColor(0,0.6,0.85);
@ -476,12 +476,12 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
} else {
me.symbols.staArrowL.hide();
}
if((getprop("instrumentation/nav[3]/in-range") and me.get_switch('toggle_rh_vor_adf') == 1)) {
if((getprop("instrumentation/nav[3]/in-range") and me.get_switch("toggle_rh_vor_adf") == 1)) {
me.symbols.staArrowR.setVisible(staPtrVis);
me.symbols.staToR.setColor(0.195,0.96,0.097);
me.symbols.staFromR.setColor(0.195,0.96,0.097);
me.symbols.staArrowR.setRotation(nav1hdg*D2R);
} elsif(getprop("instrumentation/adf[1]/in-range") and (me.get_switch('toggle_rh_vor_adf') == -1)) {
} elsif(getprop("instrumentation/adf[1]/in-range") and (me.get_switch("toggle_rh_vor_adf") == -1)) {
me.symbols.staArrowR.setVisible(staPtrVis);
me.symbols.staToR.setColor(0,0.6,0.85);
me.symbols.staFromR.setColor(0,0.6,0.85);
@ -498,7 +498,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
me.symbols.selHdgLine2.hide();
me.symbols.curHdgPtr.setVisible(staPtrVis);
me.symbols.HdgBugCRT.setVisible(staPtrVis and !dispLCD);
if(me.get_switch('toggle_track_heading'))
if(me.get_switch("toggle_track_heading"))
{
me.symbols.HdgBugLCD.hide();
me.symbols.TrkBugLCD.setVisible(staPtrVis and dispLCD);
@ -511,12 +511,12 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
me.symbols.selHdgLine.setVisible(staPtrVis and hdg_bug_active);
} else {
me.symbols.trkInd.hide();
if((getprop("instrumentation/nav[2]/in-range") and me.get_switch('toggle_lh_vor_adf') == 1)) {
if((getprop("instrumentation/nav[2]/in-range") and me.get_switch("toggle_lh_vor_adf") == 1)) {
me.symbols.staArrowL2.setVisible(staPtrVis);
me.symbols.staFromL2.setColor(0.195,0.96,0.097);
me.symbols.staToL2.setColor(0.195,0.96,0.097);
me.symbols.staArrowL2.setRotation(nav0hdg*D2R);
} elsif(getprop("instrumentation/adf/in-range") and (me.get_switch('toggle_lh_vor_adf') == -1)) {
} elsif(getprop("instrumentation/adf/in-range") and (me.get_switch("toggle_lh_vor_adf") == -1)) {
me.symbols.staArrowL2.setVisible(staPtrVis);
me.symbols.staFromL2.setColor(0,0.6,0.85);
me.symbols.staToL2.setColor(0,0.6,0.85);
@ -524,12 +524,12 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
} else {
me.symbols.staArrowL2.hide();
}
if((getprop("instrumentation/nav[3]/in-range") and me.get_switch('toggle_rh_vor_adf') == 1)) {
if((getprop("instrumentation/nav[3]/in-range") and me.get_switch("toggle_rh_vor_adf") == 1)) {
me.symbols.staArrowR2.setVisible(staPtrVis);
me.symbols.staFromR2.setColor(0.195,0.96,0.097);
me.symbols.staToR2.setColor(0.195,0.96,0.097);
me.symbols.staArrowR2.setRotation(nav1hdg*D2R);
} elsif(getprop("instrumentation/adf[1]/in-range") and (me.get_switch('toggle_rh_vor_adf') == -1)) {
} elsif(getprop("instrumentation/adf[1]/in-range") and (me.get_switch("toggle_rh_vor_adf") == -1)) {
me.symbols.staArrowR2.setVisible(staPtrVis);
me.symbols.staFromR2.setColor(0,0.6,0.85);
me.symbols.staToR2.setColor(0,0.6,0.85);
@ -546,7 +546,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
me.symbols.selHdgLine.hide();
me.symbols.curHdgPtr2.setVisible(staPtrVis);
me.symbols.HdgBugCRT2.setVisible(staPtrVis and !dispLCD);
if(me.get_switch('toggle_track_heading'))
if(me.get_switch("toggle_track_heading"))
{
me.symbols.HdgBugLCD2.hide();
me.symbols.TrkBugLCD2.setVisible(staPtrVis and dispLCD);
@ -560,16 +560,16 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
}
## run all predicates in the NDStyle hash and evaluate their true/false behavior callbacks
## this is in line with the original design, but normally we don't need to getprop/poll here,
## this is in line with the original design, but normally we don"t need to getprop/poll here,
## using listeners or timers would be more canvas-friendly whenever possible
## because running setprop() on any group/canvas element at framerate means that the canvas
## will be updated at frame rate too - wasteful ... (check the performance monitor!)
foreach(var feature; me.nd_style.features ) {
# for stuff that always needs to be updated
if (contains(feature.impl, 'common')) feature.impl.common(me);
if (contains(feature.impl, "common")) feature.impl.common(me);
# conditional stuff
if(!contains(feature.impl, 'predicate')) continue; # no conditional stuff
if(!contains(feature.impl, "predicate")) continue; # no conditional stuff
if ( var result=feature.impl.predicate(me) )
feature.impl.is_true(me, result); # pass the result to the predicate
else
@ -578,10 +578,10 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
## update the status flags shown on the ND (wxr, wpt, arpt, sta)
# this could/should be using listeners instead ...
me.symbols['status.wxr'].setVisible( me.get_switch('toggle_weather') and me.in_mode('toggle_display_mode', ['MAP']));
me.symbols['status.wpt'].setVisible( me.get_switch('toggle_waypoints') and me.in_mode('toggle_display_mode', ['MAP']));
me.symbols['status.arpt'].setVisible( me.get_switch('toggle_airports') and me.in_mode('toggle_display_mode', ['MAP']));
me.symbols['status.sta'].setVisible( me.get_switch('toggle_stations') and me.in_mode('toggle_display_mode', ['MAP']));
me.symbols["status.wxr"].setVisible( me.get_switch("toggle_weather") and me.in_mode("toggle_display_mode", ["MAP"]));
me.symbols["status.wpt"].setVisible( me.get_switch("toggle_waypoints") and me.in_mode("toggle_display_mode", ["MAP"]));
me.symbols["status.arpt"].setVisible( me.get_switch("toggle_airports") and me.in_mode("toggle_display_mode", ["MAP"]));
me.symbols["status.sta"].setVisible( me.get_switch("toggle_stations") and me.in_mode("toggle_display_mode", ["MAP"]));
# Okay, _how_ do we hook this up with FGPlot?
printlog(_MP_dbg_lvl, "Total ND update took "~((systime()-_time)*100)~"ms");
setprop("/instrumentation/navdisplay["~ canvas.NavDisplay.id ~"]/update-ms", systime() - _time);

View file

@ -3,21 +3,21 @@ var SymbolPainter = {
getOpts: func(opts){
if(opts == nil) opts = {};
var defOpts = {id:nil,color:nil,scale:1,create_group:0,update_center:0};
if(contains(opts, 'id'))
if(contains(opts, "id"))
defOpts.id = opts.id;
if(contains(opts, 'color'))
if(contains(opts, "color"))
defOpts.color = opts.color;
if(contains(opts, 'scale'))
if(contains(opts, "scale"))
defOpts.scale = opts.scale;
if(contains(opts, 'create_group'))
if(contains(opts, "create_group"))
defOpts.create_group = opts.create_group;
if(contains(opts, 'update_center'))
if(contains(opts, "update_center"))
defOpts.update_center = opts.update_center;
return defOpts;
},
getAircraftDir: func(){
if(me.aircraft_dir == nil)
me.aircraft_dir = split('/', getprop("/sim/aircraft-dir"))[-1];
me.aircraft_dir = split("/", getprop("/sim/aircraft-dir"))[-1];
return me.aircraft_dir;
},
svgPath: func(file){
@ -60,16 +60,16 @@ var SymbolPainter = {
else
grp = grp.createChild("group");
}
var svg_path = me.svgPath('airbus_vor.svg');
var svg_path = me.svgPath("airbus_vor.svg");
canvas.parsesvg(grp, svg_path);
var scale = opts.scale;
if(scale == nil) scale = 0.8;
grp.setScale(scale,scale);
if(opts.update_center)
grp.setTranslation(-24 * scale,-24 * scale);
if(!contains(grp, 'setColor')){
if(!contains(grp, "setColor")){
grp.setColor = func {
var layer1 = grp.getElementById('layer1');
var layer1 = grp.getElementById("layer1");
if(layer1 == nil) return;
var children = layer1.getChildren();
foreach(var c; children){
@ -117,7 +117,7 @@ var SymbolPainter = {
else
grp = grp.createChild("group");
}
var svg_path = me.svgPath('airbus_airport.svg');
var svg_path = me.svgPath("airbus_airport.svg");
canvas.parsesvg(grp, svg_path);
var scale = opts.scale;
if(scale == nil) scale = 0.8;
@ -127,11 +127,11 @@ var SymbolPainter = {
return grp;
},
draw: func(type, grp, opts = nil){
if(type == 'VOR' or type == 'vor')
if(type == "VOR" or type == "vor")
return me.drawVOR(grp, opts);
elsif(type == 'NDB' or type == 'ndb')
elsif(type == "NDB" or type == "ndb")
return me.drawNDB(grp, opts);
elsif(type == 'ARPT' or type == 'arpt')
elsif(type == "ARPT" or type == "arpt")
return me.drawAirport(grp, opts);
else
return me.drawFIX(grp, opts);

View file

@ -1,6 +1,6 @@
var version = getprop('sim/version/flightgear');
var v = split('.', version);
version = num(v[0]~'.'~v[1]);
var version = getprop("sim/version/flightgear");
var v = split(".", version);
version = num(v[0]~"."~v[1]);
setlistener("/nasal/canvas/loaded", func() {
@ -40,14 +40,14 @@ setlistener("/nasal/canvas/loaded", func() {
};
var load_deps = func(name) {
print('Loading MapStructure Layer: '~ name);
print("Loading MapStructure Layer: "~ name);
load(aircraft_root~"/Models/Instruments/ND/map/"~name~".lcontroller", name);
load(aircraft_root~"/Models/Instruments/ND/map/"~name~".symbol", name);
if(version < 3.2)
load(aircraft_root~"/Models/Instruments/ND/map/"~name~".scontroller", name);
}
#foreach( var name; ['APS','ALT-profile','SPD-profile','RTE','WPT','DECEL','NDB'] )
#foreach( var name; ["APS","ALT-profile","SPD-profile","RTE","WPT","DECEL","NDB"] )
#load_deps( name );
var dep_names = [
# With these extensions, in this order:

File diff suppressed because it is too large Load diff

View file

@ -7,32 +7,11 @@
var PFD_1 = nil;
var PFD_2 = nil;
var PFD_1_test = nil;
var PFD_2_test = nil;
var PFD1_display = nil;
var PFD2_display = nil;
setprop("/instrumentation/pfd/vs-needle", 0);
setprop("/instrumentation/pfd/vs-digit-trans", 0);
setprop("/it-autoflight/input/spd-managed", 0);
setprop("/FMGC/internal/target-ias-pfd", 0);
setprop("/it-autoflight/output/ap1", 0);
setprop("/it-autoflight/output/ap2", 0);
setprop("/it-autoflight/output/fd1", 0);
setprop("/it-autoflight/output/fd2", 0);
setprop("/it-autoflight/output/athr", 0);
setprop("/instrumentation/pfd/alt-diff", 0);
setprop("/instrumentation/pfd/heading-deg", 0);
setprop("/instrumentation/pfd/horizon-pitch", 0);
setprop("/instrumentation/pfd/horizon-ground", 0);
setprop("/instrumentation/pfd/hdg-diff", 0);
setprop("/instrumentation/pfd/heading-scale", 0);
setprop("/instrumentation/pfd/track-deg", 0);
setprop("/instrumentation/pfd/track-hdg-diff", 0);
setprop("/it-autoflight/internal/vert-speed-fpm-pfd", 0);
setprop("/position/gear-agl-ft", 0);
setprop("/controls/flight/aileron-input-fast", 0);
setprop("/controls/flight/elevator-input-fast", 0);
setprop("/instrumentation/adirs/ir[0]/aligned", 0);
setprop("/instrumentation/adirs/ir[1]/aligned", 0);
setprop("/instrumentation/adirs/ir[2]/aligned", 0);
var elapsedtime = 0;
var ASI = 0;
var ASItrgt = 0;
var ASItrgtdiff = 0;
@ -60,6 +39,34 @@ var wow2 = getprop("/gear/gear[2]/wow");
var pitch = 0;
var roll = 0;
var spdTrend_c = 0;
setprop("/instrumentation/pfd/vs-needle", 0);
setprop("/instrumentation/pfd/vs-digit-trans", 0);
setprop("/it-autoflight/input/spd-managed", 0);
setprop("/FMGC/internal/target-ias-pfd", 0);
setprop("/it-autoflight/output/ap1", 0);
setprop("/it-autoflight/output/ap2", 0);
setprop("/it-autoflight/output/fd1", 0);
setprop("/it-autoflight/output/fd2", 0);
setprop("/it-autoflight/output/athr", 0);
setprop("/instrumentation/pfd/alt-diff", 0);
setprop("/instrumentation/pfd/heading-deg", 0);
setprop("/instrumentation/pfd/horizon-pitch", 0);
setprop("/instrumentation/pfd/horizon-ground", 0);
setprop("/instrumentation/pfd/hdg-diff", 0);
setprop("/instrumentation/pfd/heading-scale", 0);
setprop("/instrumentation/pfd/track-deg", 0);
setprop("/instrumentation/pfd/track-hdg-diff", 0);
setprop("/instrumentation/du/du1-test", 0);
setprop("/instrumentation/du/du1-test-time", 0);
setprop("/instrumentation/du/du6-test", 0);
setprop("/instrumentation/du/du6-test-time", 0);
setprop("/it-autoflight/internal/vert-speed-fpm-pfd", 0);
setprop("/position/gear-agl-ft", 0);
setprop("/controls/flight/aileron-input-fast", 0);
setprop("/controls/flight/elevator-input-fast", 0);
setprop("/instrumentation/adirs/ir[0]/aligned", 0);
setprop("/instrumentation/adirs/ir[1]/aligned", 0);
setprop("/instrumentation/adirs/ir[2]/aligned", 0);
var canvas_PFD_base = {
init: func(canvas_group, file) {
@ -67,7 +74,7 @@ var canvas_PFD_base = {
return "LiberationFonts/LiberationSans-Regular.ttf";
};
canvas.parsesvg(canvas_group, file, {'font-mapper': font_mapper});
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
var svg_keys = me.getKeys();
foreach(var key; svg_keys) {
@ -94,8 +101,6 @@ var canvas_PFD_base = {
}
}
me.page = canvas_group;
me.AI_horizon_trans = me["AI_horizon"].createTransform();
me.AI_horizon_rot = me["AI_horizon"].createTransform();
@ -107,6 +112,8 @@ var canvas_PFD_base = {
me.AI_horizon_hdg_trans = me["AI_heading"].createTransform();
me.AI_horizon_hdg_rot = me["AI_heading"].createTransform();
me.page = canvas_group;
return me;
},
getKeys: func() {
@ -118,17 +125,54 @@ var canvas_PFD_base = {
"GS_pointer","CRS_pointer","HDG_target","HDG_scale","HDG_one","HDG_two","HDG_three","HDG_four","HDG_five","HDG_six","HDG_seven","HDG_digit_L","HDG_digit_R","HDG_error","HDG_group","HDG_frame","TRK_pointer"];
},
update: func() {
if ((getprop("/systems/electrical/bus/ac1") >= 110 or getprop("/systems/electrical/bus/ac2") >= 110) and getprop("/controls/lighting/DU/du1") > 0) {
PFD_1.page.show();
PFD_1.update();
elapsedtime = getprop("/sim/time/elapsed-sec");
if (getprop("/systems/electrical/bus/ac1") >= 110 or getprop("/systems/electrical/bus/ac2") >= 110) {
if (getprop("/instrumentation/du/du1-test") != 1) {
setprop("/instrumentation/du/du1-test", 1);
setprop("/instrumentation/du/du1-test-time", getprop("/sim/time/elapsed-sec"));
}
} else {
PFD_1.page.hide();
setprop("/instrumentation/du/du1-test", 0);
}
if (getprop("/systems/electrical/bus/ac1") >= 110 and getprop("/systems/electrical/bus/ac2") >= 110) {
if (getprop("/instrumentation/du/du6-test") != 1) {
setprop("/instrumentation/du/du6-test", 1);
setprop("/instrumentation/du/du6-test-time", getprop("/sim/time/elapsed-sec"));
}
} else {
setprop("/instrumentation/du/du6-test", 0);
}
if (getprop("/systems/electrical/bus/ac1") >= 110 and getprop("/systems/electrical/ac1-src") != "RAT" and getprop("/systems/electrical/bus/ac2") >= 110 and getprop("/systems/electrical/ac2-src") != "RAT" and getprop("/controls/lighting/DU/du6") > 0) {
PFD_2.page.show();
PFD_2.update();
if ((getprop("/systems/electrical/bus/ac1") >= 110 or getprop("/systems/electrical/bus/ac2") >= 110) and getprop("/controls/lighting/DU/du1") > 0) {
if (getprop("/instrumentation/du/du1-test-time") + 39.5 >= elapsedtime and getprop("/modes/cpt-du-xfr") != 1) {
PFD_1.page.hide();
PFD_1_test.page.show();
} else if (getprop("/instrumentation/du/du2-test-time") + 38.5 >= elapsedtime and getprop("/modes/cpt-du-xfr") == 1) {
PFD_1.page.hide();
PFD_1_test.page.show();
} else {
PFD_1_test.page.hide();
PFD_1.page.show();
PFD_1.update();
}
} else {
PFD_1_test.page.hide();
PFD_1.page.hide();
}
if (getprop("/systems/electrical/bus/ac1") >= 110 and getprop("/systems/electrical/ac1-src") != "RAT" and getprop("/systems/electrical/bus/ac2") >= 110 and getprop("/systems/electrical/ac2-src") != "RAT" and getprop("/controls/lighting/DU/du6") > 0) {
if (getprop("/instrumentation/du/du6-test-time") + 39.5 >= elapsedtime and getprop("/modes/fo-du-xfr") != 1) {
PFD_2.page.hide();
PFD_2_test.page.show();
} else if (getprop("/instrumentation/du/du5-test-time") + 38.5 >= elapsedtime and getprop("/modes/fo-du-xfr") == 1) {
PFD_2.page.hide();
PFD_2_test.page.show();
} else {
PFD_2_test.page.hide();
PFD_2.page.show();
PFD_2.update();
}
} else {
PFD_2_test.page.hide();
PFD_2.page.hide();
}
},
@ -359,7 +403,7 @@ var canvas_PFD_base = {
}
# Airspeed
# Subtract 30, since the scale starts at 30, but don't allow less than 0, or more than 420 situations
# Subtract 30, since the scale starts at 30, but don"t allow less than 0, or more than 420 situations
if (getprop("/instrumentation/airspeed-indicator/indicated-speed-kt") <= 30) {
ASI = 0;
} else if (getprop("/instrumentation/airspeed-indicator/indicated-speed-kt") >= 420) {
@ -844,6 +888,46 @@ var canvas_PFD_2 = {
},
};
var canvas_PFD_1_test = {
init: func(canvas_group, file) {
var font_mapper = func(family, weight) {
return "LiberationFonts/LiberationSans-Regular.ttf";
};
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
me.page = canvas_group;
return me;
},
new: func(canvas_group, file) {
var m = {parents: [canvas_PFD_1_test]};
m.init(canvas_group, file);
return m;
},
};
var canvas_PFD_2_test = {
init: func(canvas_group, file) {
var font_mapper = func(family, weight) {
return "LiberationFonts/LiberationSans-Regular.ttf";
};
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
me.page = canvas_group;
return me;
},
new: func(canvas_group, file) {
var m = {parents: [canvas_PFD_2_test]};
m.init(canvas_group, file);
return m;
},
};
setprop("/testing", 0); # REMOVE WHEN PFD FINISHED
setlistener("sim/signals/fdm-initialized", func {
@ -862,10 +946,14 @@ setlistener("sim/signals/fdm-initialized", func {
PFD1_display.addPlacement({"node": "pfd1.screen"});
PFD2_display.addPlacement({"node": "pfd2.screen"});
var group_pfd1 = PFD1_display.createGroup();
var group_pfd1_test = PFD1_display.createGroup();
var group_pfd2 = PFD2_display.createGroup();
var group_pfd2_test = PFD2_display.createGroup();
PFD_1 = canvas_PFD_1.new(group_pfd1, "Aircraft/IDG-A32X/Models/Instruments/PFD/res/pfd.svg");
PFD_1_test = canvas_PFD_1_test.new(group_pfd1_test, "Aircraft/IDG-A32X/Models/Instruments/Common/res/du-test.svg");
PFD_2 = canvas_PFD_2.new(group_pfd2, "Aircraft/IDG-A32X/Models/Instruments/PFD/res/pfd.svg");
PFD_2_test = canvas_PFD_2_test.new(group_pfd2_test, "Aircraft/IDG-A32X/Models/Instruments/Common/res/du-test.svg");
PFD_update.start();
});

View file

@ -7,7 +7,9 @@
var upperECAM_cfm_eis2 = nil;
var upperECAM_iae_eis2 = nil;
var upperECAM_test = nil;
var upperECAM_display = nil;
var elapsedtime = 0;
setprop("/engines/engine[0]/fuel-flow_actual", 0);
setprop("/engines/engine[1]/fuel-flow_actual", 0);
setprop("/ECAM/Upper/EPR[0]", 0);
@ -22,6 +24,8 @@ setprop("/ECAM/Upper/N1[1]", 0);
setprop("/ECAM/Upper/N1thr[0]", 0);
setprop("/ECAM/Upper/N1thr[1]", 0);
setprop("/ECAM/Upper/N1ylim", 0);
setprop("/instrumentation/du/du3-test", 0);
setprop("/instrumentation/du/du3-test-time", 0);
var canvas_upperECAM_base = {
init: func(canvas_group, file) {
@ -29,7 +33,7 @@ var canvas_upperECAM_base = {
return "LiberationFonts/LiberationSans-Regular.ttf";
};
canvas.parsesvg(canvas_group, file, {'font-mapper': font_mapper});
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
var svg_keys = me.getKeys();
foreach(var key; svg_keys) {
@ -44,17 +48,35 @@ var canvas_upperECAM_base = {
return [];
},
update: func() {
if (getprop("/systems/electrical/bus/ac1") >= 110 or getprop("/systems/electrical/bus/ac2") >= 110 and getprop("/controls/lighting/DU/du3") > 0) {
if (getprop("/options/eng") == "CFM") {
upperECAM_cfm_eis2.page.show();
upperECAM_iae_eis2.page.hide();
upperECAM_cfm_eis2.update();
} else if (getprop("/options/eng") == "IAE") {
upperECAM_cfm_eis2.page.hide();
upperECAM_iae_eis2.page.show();
upperECAM_iae_eis2.update();
elapsedtime = getprop("/sim/time/elapsed-sec");
if (getprop("/systems/electrical/bus/ac1") >= 110 or getprop("/systems/electrical/bus/ac2") >= 110) {
if (getprop("/instrumentation/du/du3-test") != 1) {
setprop("/instrumentation/du/du3-test", 1);
setprop("/instrumentation/du/du3-test-time", getprop("/sim/time/elapsed-sec"));
}
} else {
setprop("/instrumentation/du/du3-test", 0);
}
if (getprop("/systems/electrical/bus/ac1") >= 110 or getprop("/systems/electrical/bus/ac2") >= 110 and getprop("/controls/lighting/DU/du3") > 0) {
if (getprop("/instrumentation/du/du3-test-time") + 39 >= elapsedtime) {
upperECAM_cfm_eis2.page.hide();
upperECAM_iae_eis2.page.hide();
upperECAM_test.page.show();
} else {
upperECAM_test.page.hide();
if (getprop("/options/eng") == "CFM") {
upperECAM_cfm_eis2.page.show();
upperECAM_iae_eis2.page.hide();
upperECAM_cfm_eis2.update();
} else if (getprop("/options/eng") == "IAE") {
upperECAM_cfm_eis2.page.hide();
upperECAM_iae_eis2.page.show();
upperECAM_iae_eis2.update();
}
}
} else {
upperECAM_test.page.hide();
upperECAM_cfm_eis2.page.hide();
upperECAM_iae_eis2.page.hide();
}
@ -713,6 +735,26 @@ var canvas_upperECAM_iae_eis2 = {
},
};
var canvas_upperECAM_test = {
init: func(canvas_group, file) {
var font_mapper = func(family, weight) {
return "LiberationFonts/LiberationSans-Regular.ttf";
};
canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper});
me.page = canvas_group;
return me;
},
new: func(canvas_group, file) {
var m = {parents: [canvas_upperECAM_test]};
m.init(canvas_group, file);
return m;
},
};
setlistener("sim/signals/fdm-initialized", func {
upperECAM_display = canvas.new({
"name": "upperECAM",
@ -723,9 +765,11 @@ setlistener("sim/signals/fdm-initialized", func {
upperECAM_display.addPlacement({"node": "uecam.screen"});
var group_cfm_eis2 = upperECAM_display.createGroup();
var group_iae_eis2 = upperECAM_display.createGroup();
var group_test = upperECAM_display.createGroup();
upperECAM_cfm_eis2 = canvas_upperECAM_cfm_eis2.new(group_cfm_eis2, "Aircraft/IDG-A32X/Models/Instruments/Upper-ECAM/res/cfm-eis2.svg");
upperECAM_iae_eis2 = canvas_upperECAM_iae_eis2.new(group_iae_eis2, "Aircraft/IDG-A32X/Models/Instruments/Upper-ECAM/res/iae-eis2.svg");
upperECAM_test = canvas_upperECAM_test.new(group_test, "Aircraft/IDG-A32X/Models/Instruments/Common/res/du-test.svg");
upperECAM_update.start();
});

View file

@ -1 +1 @@
4020
4022