1
0
Fork 0
This commit is contained in:
legoboyvdlp R 2020-01-05 20:21:28 +00:00
parent ed5b92cef4
commit 848a6a7b7f
14 changed files with 1888 additions and 1141 deletions

View file

@ -428,7 +428,7 @@
<z-offset-max-m type="float">300.0</z-offset-max-m>
</current-view>
<minimum-fg-version>2019.2.0</minimum-fg-version>
<minimum-fg-version>2019.1.2</minimum-fg-version>
</sim>
<consumables>
@ -1870,14 +1870,11 @@
<file>Aircraft/A320-family/Nasal/FMGC/FCU.nas</file>
</fcu>
<fmgc>
<file>Aircraft/A320-family/Nasal/FMGC/flightplan.nas</file>
<file>Aircraft/A320-family/Nasal/FMGC/FMGC.nas</file>
<file>Aircraft/A320-family/Nasal/FMGC/FMGC-b.nas</file>
<file>Aircraft/A320-family/Nasal/FMGC/FMGC-c.nas</file>
</fmgc>
<mcdu>
<file>Aircraft/A320-family/Nasal/MCDU/LATREV.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/DEPARTURE.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/MCDU.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/INITA.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/INITB.nas</file>
@ -1888,7 +1885,6 @@
<file>Aircraft/A320-family/Nasal/MCDU/RADNAV.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/DATA.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/STATUS.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/F-PLN.nas</file>
</mcdu>
<canvas_pfd>
<file>Aircraft/A320-family/Models/Instruments/PFD/PFD.nas</file>

View file

@ -8,6 +8,7 @@ var MCDU1_display = nil;
var MCDU2_display = nil;
var myLatRev = [nil, nil];
var myDeparture = [nil, nil];
var myFpln = [nil, nil];
var default = "BoeingCDU-Large.ttf";
var symbol = "helvetica_medium.txf";
var normal = 70;
@ -111,7 +112,6 @@ var engOutAcc = props.globals.getNode("/FMGC/internal/eng-out-reduc", 1);
var engOutAccSet = props.globals.getNode("/MCDUC/reducacc-set", 1);
var transAlt = props.globals.getNode("/FMGC/internal/trans-alt", 1);
var managedSpeed = props.globals.getNode("/it-autoflight/input/spd-managed", 1);
var TMPYActive = [props.globals.getNode("/FMGC/internal/tmpy-active[0]"), props.globals.getNode("/FMGC/internal/tmpy-active[1]")];
# Fetch nodes into vectors
var pageProp = [props.globals.getNode("/MCDU[0]/page", 1), props.globals.getNode("/MCDU[1]/page", 1)];
@ -166,11 +166,15 @@ var canvas_MCDU_base = {
return me;
},
getKeys: func() {
return ["Simple","Simple_Center","Scratchpad","Simple_Title","Simple_PageNum","ArrowLeft","ArrowRight","Simple_L1","Simple_L2","Simple_L3","Simple_L4","Simple_L5","Simple_L6","Simple_L1S","Simple_L2S","Simple_L3S","Simple_L4S","Simple_L5S","Simple_L6S",
"Simple_L1_Arrow","Simple_L2_Arrow","Simple_L3_Arrow","Simple_L4_Arrow","Simple_L5_Arrow","Simple_L6_Arrow","Simple_R1","Simple_R2","Simple_R3","Simple_R4","Simple_R5","Simple_R6","Simple_R1S","Simple_R2S","Simple_R3S","Simple_R4S","Simple_R5S",
"Simple_R6S","Simple_R1_Arrow","Simple_R2_Arrow","Simple_R3_Arrow","Simple_R4_Arrow","Simple_R5_Arrow","Simple_R6_Arrow","Simple_C1","Simple_C2","Simple_C3","Simple_C4","Simple_C5","Simple_C6","Simple_C1S","Simple_C2S","Simple_C3S","Simple_C4S",
"Simple_C5S","Simple_C6S","INITA","INITA_CoRoute","INITA_FltNbr","INITA_CostIndex","INITA_CruiseFLTemp","INITA_FromTo","INITA_InitRequest","INITA_AlignIRS","INITB","INITB_ZFWCG","INITB_ZFW","INITB_ZFW_S","INITB_Block","PERFTO","PERFTO_V1","PERFTO_VR",
"PERFTO_V2","PERFTO_FE","PERFTO_SE","PERFTO_OE","FPLN","FPLN_From","FPLN_TMPY_group","FPLN_Callsign","FPLN_L1","FPLN_L2","FPLN_L3","FPLN_L4","FPLN_L5","FPLN_L6","FPLN_L1S","FPLN_L2S","FPLN_L3S","FPLN_L4S","FPLN_L5S","FPLN_L6S","FPLN_6_group","departureTMPY"];
return ["Simple","Simple_Center","Scratchpad","Simple_Title","Simple_PageNum","ArrowLeft","ArrowRight","Simple_L1","Simple_L2","Simple_L3","Simple_L4"
,"Simple_L5","Simple_L6","Simple_L1S","Simple_L2S","Simple_L3S","Simple_L4S","Simple_L5S","Simple_L6S", "Simple_L1_Arrow","Simple_L2_Arrow",
"Simple_L3_Arrow","Simple_L4_Arrow","Simple_L5_Arrow","Simple_L6_Arrow","Simple_R1","Simple_R2","Simple_R3","Simple_R4","Simple_R5","Simple_R6",
"Simple_R1S","Simple_R2S","Simple_R3S","Simple_R4S","Simple_R5S","Simple_R6S","Simple_R1_Arrow","Simple_R2_Arrow","Simple_R3_Arrow","Simple_R4_Arrow",
"Simple_R5_Arrow","Simple_R6_Arrow","Simple_C1","Simple_C2","Simple_C3","Simple_C4","Simple_C5","Simple_C6","Simple_C1S","Simple_C2S","Simple_C3S",
"Simple_C4S","Simple_C5S","Simple_C6S","INITA","INITA_CoRoute","INITA_FltNbr","INITA_CostIndex","INITA_CruiseFLTemp","INITA_FromTo",
"INITA_InitRequest","INITA_AlignIRS","INITB","INITB_ZFWCG","INITB_ZFW","INITB_ZFW_S","INITB_Block","PERFTO","PERFTO_V1","PERFTO_VR","PERFTO_V2",
"PERFTO_FE","PERFTO_SE","PERFTO_OE","FPLN","FPLN_From","FPLN_TMPY_group","FPLN_Callsign","departureTMPY", "arrowsDepArr","arrow1L","arrow2L","arrow3L"
,"arrow4L","arrow5L","arrow1R","arrow2R","arrow3R","arrow4R","arrow5R"];
},
update: func() {
if (systems.ELEC.Bus.ac1.getValue() >= 110 and mcdu1_lgt.getValue() > 0.01) {
@ -190,19 +194,36 @@ var canvas_MCDU_base = {
page = pageProp[i].getValue();
if (page == "F-PLNA" or page == "F-PLNB") {
if (!pageSwitch[i].getBoolValue()) {
me["Simple"].hide();
me["Simple_Center"].hide();
me["Simple"].show();
me["Simple_Center"].show();
me["FPLN"].show();
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["Simple_Title"].hide();
me["Simple_PageNum"].hide();
me["ArrowLeft"].show();
me["ArrowRight"].show();
me["arrowsDepArr"].hide();
me["Simple_L1_Arrow"].hide();
me["Simple_L2_Arrow"].hide();
me["Simple_L3_Arrow"].hide();
me["Simple_L4_Arrow"].hide();
me["Simple_L5_Arrow"].hide();
me["Simple_L6_Arrow"].hide();
me["Simple_R1_Arrow"].hide();
me["Simple_R2_Arrow"].hide();
me["Simple_R3_Arrow"].hide();
me["Simple_R4_Arrow"].hide();
me["Simple_R5_Arrow"].hide();
me["Simple_R6_Arrow"].hide();
pageSwitch[i].setBoolValue(1);
}
myFpln[i].update();
if (flightNumSet.getValue()) {
me["FPLN_Callsign"].setText(flightNum.getValue());
me["FPLN_Callsign"].show();
@ -210,144 +231,272 @@ var canvas_MCDU_base = {
me["FPLN_Callsign"].hide();
}
fplnLineSize = size(mcdu.FPLNLines[i].output);
if (fplnLineSize >= 1) {
fplnl1 = mcdu.FPLNLines[i].output[0].getText();
if (fplnl1 != "") {
me["FPLN_L1"].setColor(mcdu.FPLNLines[i].output[0].getColor(i));
me["FPLN_L1"].setText(fplnl1);
me["FPLN_L1"].show();
if (myFpln[i].L1[0] == nil) {
me["Simple_L1"].hide();
me["Simple_L1S"].hide();
} else {
me["FPLN_L1"].hide();
me["Simple_L1"].show();
me["Simple_L1"].setText(myFpln[i].L1[0]);
if (myFpln[i].L1[1] != nil) {
me["Simple_L1S"].show();
me["Simple_L1S"].setText(myFpln[i].L1[1]);
} else {
me["Simple_L1S"].hide();
}
fplnl1s = mcdu.FPLNLines[i].output[0].getSubText(i);
if (fplnl1s != "") {
me["FPLN_L1S"].setText(fplnl1s);
me["FPLN_L1S"].show();
} else {
me["FPLN_L1S"].hide();
}
} else {
me["FPLN_L1"].hide();
me["FPLN_L1S"].hide();
}
if (fplnLineSize >= 2) {
fplnl2 = mcdu.FPLNLines[i].output[1].getText();
if (fplnl2 != "") {
me["FPLN_L2"].setColor(mcdu.FPLNLines[i].output[1].getColor(i));
me["FPLN_L2"].setText(fplnl2);
me["FPLN_L2"].show();
if (myFpln[i].L2[0] == nil) {
me["Simple_L2"].hide();
me["Simple_L2S"].hide();
} else {
me["FPLN_L2"].hide();
me["Simple_L2"].show();
me["Simple_L2"].setText(myFpln[i].L2[0]);
if (myFpln[i].L2[1] != nil) {
me["Simple_L2S"].show();
me["Simple_L2S"].setText(myFpln[i].L2[1]);
} else {
me["Simple_L2S"].hide();
}
fplnl2s = mcdu.FPLNLines[i].output[1].getSubText(i);
if (fplnl2s != "") {
me["FPLN_L2S"].setText(fplnl2s);
me["FPLN_L2S"].show();
} else {
me["FPLN_L2S"].hide();
}
} else {
me["FPLN_L2"].hide();
me["FPLN_L2S"].hide();
}
if (fplnLineSize >= 3) {
fplnl3 = mcdu.FPLNLines[i].output[2].getText();
if (fplnl3 != "") {
me["FPLN_L3"].setColor(mcdu.FPLNLines[i].output[2].getColor(i));
me["FPLN_L3"].setText(fplnl3);
me["FPLN_L3"].show();
if (myFpln[i].L3[0] == nil) {
me["Simple_L3"].hide();
me["Simple_L3S"].hide();
} else {
me["FPLN_L3"].hide();
me["Simple_L3"].show();
me["Simple_L3"].setText(myFpln[i].L3[0]);
if (myFpln[i].L3[1] != nil) {
me["Simple_L3S"].show();
me["Simple_L3S"].setText(myFpln[i].L3[1]);
} else {
me["Simple_L3S"].hide();
}
fplnl3s = mcdu.FPLNLines[i].output[2].getSubText(i);
if (fplnl3s != "") {
me["FPLN_L3S"].setText(fplnl3s);
me["FPLN_L3S"].show();
} else {
me["FPLN_L3S"].hide();
}
} else {
me["FPLN_L3"].hide();
me["FPLN_L3S"].hide();
}
if (fplnLineSize >= 4) {
fplnl4 = mcdu.FPLNLines[i].output[3].getText();
if (fplnl4 != "") {
me["FPLN_L4"].setColor(mcdu.FPLNLines[i].output[3].getColor(i));
me["FPLN_L4"].setText(fplnl4);
me["FPLN_L4"].show();
if (myFpln[i].L4[0] == nil) {
me["Simple_L4"].hide();
me["Simple_L4S"].hide();
} else {
me["FPLN_L4"].hide();
me["Simple_L4"].show();
me["Simple_L4"].setText(myFpln[i].L4[0]);
if (myFpln[i].L4[1] != nil) {
me["Simple_L4S"].show();
me["Simple_L4S"].setText(myFpln[i].L4[1]);
} else {
me["Simple_L4S"].hide();
}
fplnl4s = mcdu.FPLNLines[i].output[3].getSubText(i);
if (fplnl4s != "") {
me["FPLN_L4S"].setText(fplnl4s);
me["FPLN_L4S"].show();
} else {
me["FPLN_L4S"].hide();
}
} else {
me["FPLN_L4"].hide();
me["FPLN_L4S"].hide();
}
if (fplnLineSize >= 5) {
fplnl5 = mcdu.FPLNLines[i].output[4].getText();
if (fplnl5 != "") {
me["FPLN_L5"].setColor(mcdu.FPLNLines[i].output[4].getColor(i));
me["FPLN_L5"].setText(fplnl5);
me["FPLN_L5"].show();
if (myFpln[i].L5[0] == nil) {
me["Simple_L5"].hide();
me["Simple_L5S"].hide();
} else {
me["FPLN_L5"].hide();
me["Simple_L5"].show();
me["Simple_L5"].setText(myFpln[i].L5[0]);
if (myFpln[i].L5[1] != nil) {
me["Simple_L5S"].show();
me["Simple_L5S"].setText(myFpln[i].L5[1]);
} else {
me["Simple_L5S"].hide();
}
fplnl5s = mcdu.FPLNLines[i].output[4].getSubText(i);
if (fplnl5s != "") {
me["FPLN_L5S"].setText(fplnl5s);
me["FPLN_L5S"].show();
} else {
me["FPLN_L5S"].hide();
}
} else {
me["FPLN_L5"].hide();
me["FPLN_L5S"].hide();
}
if (fplnLineSize >= 6) {
fplnl6 = mcdu.FPLNLines[i].output[5].getText();
if (fplnl6 != "") {
me["FPLN_L6"].setColor(mcdu.FPLNLines[i].output[5].getColor(i));
me["FPLN_L6"].setText(fplnl6);
me["FPLN_L6"].show();
if (myFpln[i].L6[0] == nil or fmgc.flightPlanController.temporaryFlag[i]) {
me["Simple_L6"].hide();
me["Simple_L6S"].hide();
} else {
me["FPLN_L6"].hide();
me["Simple_L6"].show();
me["Simple_L6"].setText(myFpln[i].L6[0]);
if (myFpln[i].L6[1] != nil) {
me["Simple_L6S"].show();
me["Simple_L6S"].setText(myFpln[i].L6[1]);
} else {
me["Simple_L6S"].hide();
}
fplnl6s = mcdu.FPLNLines[i].output[5].getSubText(i);
if (fplnl6s != "") {
me["FPLN_L6S"].setText(fplnl6s);
me["FPLN_L6S"].show();
} else {
me["FPLN_L6S"].hide();
}
me.colorLeft(myFpln[i].L1[2],myFpln[i].L2[2],myFpln[i].L3[2],myFpln[i].L4[2],myFpln[i].L5[2],myFpln[i].L6[2]);
if (myFpln[i].C1[0] == nil) {
me["Simple_C1"].hide();
me["Simple_C1S"].hide();
} else {
me["FPLN_L6"].hide();
me["FPLN_L6S"].hide();
me["Simple_C1"].show();
me["Simple_C1"].setText(myFpln[i].C1[0]);
if (myFpln[i].C1[1] != nil) {
me["Simple_C1S"].show();
me["Simple_C1S"].setText(myFpln[i].C1[1]);
} else {
me["Simple_C1S"].hide();
}
}
if (mcdu.FPLNLines[i].index == 0) {
me["FPLN_From"].show();
if (myFpln[i].C2[0] == nil) {
me["Simple_C2"].hide();
me["Simple_C2S"].hide();
} else {
me["FPLN_From"].hide();
me["Simple_C2"].show();
me["Simple_C2"].setText(myFpln[i].C2[0]);
if (myFpln[i].C2[1] != nil) {
me["Simple_C2S"].show();
me["Simple_C2S"].setText(myFpln[i].C2[1]);
} else {
me["Simple_C2S"].hide();
}
if (TMPYActive[i].getBoolValue()) {
}
if (myFpln[i].C3[0] == nil) {
me["Simple_C3"].hide();
me["Simple_C3S"].hide();
} else {
me["Simple_C3"].show();
me["Simple_C3"].setText(myFpln[i].C3[0]);
if (myFpln[i].C3[1] != nil) {
me["Simple_C3S"].show();
me["Simple_C3S"].setText(myFpln[i].C3[1]);
} else {
me["Simple_C3S"].hide();
}
}
if (myFpln[i].C4[0] == nil) {
me["Simple_C4"].hide();
me["Simple_C4S"].hide();
} else {
me["Simple_C4"].show();
me["Simple_C4"].setText(myFpln[i].C4[0]);
if (myFpln[i].C4[1] != nil) {
me["Simple_C4S"].show();
me["Simple_C4S"].setText(myFpln[i].C4[1]);
} else {
me["Simple_C4S"].hide();
}
}
if (myFpln[i].C5[0] == nil) {
me["Simple_C5"].hide();
me["Simple_C5S"].hide();
} else {
me["Simple_C5"].show();
me["Simple_C5"].setText(myFpln[i].C5[0]);
if (myFpln[i].C5[1] != nil) {
me["Simple_C5S"].show();
me["Simple_C5S"].setText(myFpln[i].C5[1]);
} else {
me["Simple_C5S"].hide();
}
}
if (myFpln[i].C6[0] == nil or fmgc.flightPlanController.temporaryFlag[i]) {
me["Simple_C6"].hide();
me["Simple_C6S"].hide();
} else {
me["Simple_C6"].show();
me["Simple_C6"].setText(myFpln[i].C6[0]);
if (myFpln[i].C6[1] != nil) {
me["Simple_C6S"].show();
me["Simple_C6S"].setText(myFpln[i].C6[1]);
} else {
me["Simple_C6S"].hide();
}
}
me.colorCenter(myFpln[i].C1[2],myFpln[i].C2[2],myFpln[i].C3[2],myFpln[i].C4[2],myFpln[i].C5[2],myFpln[i].C6[2]);
if (myFpln[i].R1[0] == nil) {
me["Simple_R1"].hide();
me["Simple_R1S"].hide();
} else {
me["Simple_R1"].show();
me["Simple_R1"].setText(myFpln[i].R1[0]);
if (myFpln[i].R1[1] != nil) {
me["Simple_R1S"].show();
me["Simple_R1S"].setText(myFpln[i].R1[1]);
} else {
me["Simple_R1S"].hide();
}
}
if (myFpln[i].R2[0] == nil) {
me["Simple_R2"].hide();
me["Simple_R2S"].hide();
} else {
me["Simple_R2"].show();
me["Simple_R2"].setText(myFpln[i].R2[0]);
if (myFpln[i].R2[1] != nil) {
me["Simple_R2S"].show();
me["Simple_R2S"].setText(myFpln[i].R2[1]);
} else {
me["Simple_R2S"].hide();
}
}
if (myFpln[i].R3[0] == nil) {
me["Simple_R3"].hide();
me["Simple_R3S"].hide();
} else {
me["Simple_R3"].show();
me["Simple_R3"].setText(myFpln[i].R3[0]);
if (myFpln[i].R3[1] != nil) {
me["Simple_R3S"].show();
me["Simple_R3S"].setText(myFpln[i].R3[1]);
} else {
me["Simple_R3S"].hide();
}
}
if (myFpln[i].R4[0] == nil) {
me["Simple_R4"].hide();
me["Simple_R4S"].hide();
} else {
me["Simple_R4"].show();
me["Simple_R4"].setText(myFpln[i].R4[0]);
if (myFpln[i].R4[1] != nil) {
me["Simple_R4S"].show();
me["Simple_R4S"].setText(myFpln[i].R4[1]);
} else {
me["Simple_R4S"].hide();
}
}
if (myFpln[i].R5[0] == nil) {
me["Simple_R5"].hide();
me["Simple_R5S"].hide();
} else {
me["Simple_R5"].show();
me["Simple_R5"].setText(myFpln[i].R5[0]);
if (myFpln[i].R5[1] != nil) {
me["Simple_R5S"].show();
me["Simple_R5S"].setText(myFpln[i].R5[1]);
} else {
me["Simple_R5S"].hide();
}
}
if (myFpln[i].R6[0] == nil or fmgc.flightPlanController.temporaryFlag[i]) {
me["Simple_R6"].hide();
me["Simple_R6S"].hide();
} else {
me["Simple_R6"].show();
me["Simple_R6"].setText(myFpln[i].R6[0]);
if (myFpln[i].R6[1] != nil) {
me["Simple_R6S"].show();
me["Simple_R6S"].setText(myFpln[i].R6[1]);
} else {
me["Simple_R6S"].hide();
}
}
me.colorRight(myFpln[i].R1[2],myFpln[i].R2[2],myFpln[i].R3[2],myFpln[i].R4[2],myFpln[i].R5[2],myFpln[i].R6[2]);
#if (mcdu.FPLNLines[i].index == 0) {
# me["FPLN_From"].show();
#} else {
# me["FPLN_From"].hide();
#}
if (fmgc.flightPlanController.temporaryFlag[i]) {
me["FPLN_TMPY_group"].show();
me["FPLN_6_group"].hide();
} else {
me["FPLN_TMPY_group"].hide();
me["FPLN_6_group"].show();
}
} elsif (page == "MCDU") {
if (!pageSwitch[i].getBoolValue()) {
@ -357,6 +506,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText("MCDU MENU");
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
@ -439,6 +589,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText(sprintf("%s", " " ~ acType.getValue()));
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
@ -521,6 +672,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText("DATA INDEX");
me["Simple_PageNum"].setText("1/2");
me["Simple_PageNum"].show();
@ -601,6 +753,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText("DATA INDEX");
me["Simple_PageNum"].setText("2/2");
me["Simple_PageNum"].show();
@ -686,6 +839,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText("POSITION MONITOR");
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
@ -783,6 +937,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText("RADIO NAV");
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
@ -922,6 +1077,7 @@ var canvas_MCDU_base = {
me["INITA"].show();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText("INIT");
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
@ -1077,6 +1233,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].show();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText("INIT");
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
@ -1207,6 +1364,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText("FUEL PRED");
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
@ -1319,6 +1477,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].show();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText("TAKE OFF");
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
@ -1477,6 +1636,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_Title"].setText(sprintf("%s", page));
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
@ -1599,6 +1759,7 @@ var canvas_MCDU_base = {
me["INITA"].hide();
me["INITB"].hide();
me["PERFTO"].hide();
me["arrowsDepArr"].hide();
me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
me["ArrowLeft"].hide();
@ -1857,6 +2018,19 @@ var canvas_MCDU_base = {
me["Simple_PageNum"].hide();
me["ArrowLeft"].show();
me["ArrowRight"].show();
me["arrowsDepArr"].show();
me["Simple_L1_Arrow"].hide();
me["Simple_L2_Arrow"].hide();
me["Simple_L3_Arrow"].hide();
me["Simple_L4_Arrow"].hide();
me["Simple_L5_Arrow"].hide();
me["Simple_L6_Arrow"].show();
me["Simple_R1_Arrow"].hide();
me["Simple_R2_Arrow"].hide();
me["Simple_R3_Arrow"].hide();
me["Simple_R4_Arrow"].hide();
me["Simple_R5_Arrow"].hide();
me["Simple_R6_Arrow"].hide();
me.fontLeft(default, default, default, default, default, default);
me.fontLeftS(default, default, default, default, default, default);
@ -1867,9 +2041,7 @@ var canvas_MCDU_base = {
me.fontSizeRight(normal, normal, normal, normal, normal, normal);
me.colorLeftS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorLeftArrow("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRightArrow("wht", "wht", "wht", "wht", "wht", "wht");
if (myDeparture[i] != nil) {
@ -1882,14 +2054,18 @@ var canvas_MCDU_base = {
var sign = "R";
}
forindex (var item; myDeparture[i].arrowsMatrix[matrixArrow]) {
if (item == 5) {
me["Simple_L6_Arrow"].setColor(getprop("/MCDUC/colors/" ~ myDeparture[i].arrowsColour[0][5] ~ "/r"), getprop("/MCDUC/colors/" ~ myDeparture[i].arrowsColour[0][5] ~ "/g"), getprop("/MCDUC/colors/" ~ myDeparture[i].arrowsColour[0][5] ~ "/b"));
continue;
}
if (myDeparture[i].arrowsMatrix[matrixArrow][item] == 1) {
me["Simple_" ~ sign ~ (item + 1) ~ "_Arrow"].show();
me["arrow" ~ (item + 1) ~ sign].show();
me["arrow" ~ (item + 1) ~ sign].setColor(getprop("/MCDUC/colors/" ~ myDeparture[i].arrowsColour[matrixArrow][item] ~ "/r"), getprop("/MCDUC/colors/" ~ myDeparture[i].arrowsColour[matrixArrow][item] ~ "/g"), getprop("/MCDUC/colors/" ~ myDeparture[i].arrowsColour[matrixArrow][item] ~ "/b"));
} else {
me["Simple_" ~ sign ~ (item + 1) ~ "_Arrow"].hide();
me["arrow" ~ (item + 1) ~ sign].hide();
}
}
}
me.colorLeftArrow(myDeparture[i].arrowsColour[0][0],myDeparture[i].arrowsColour[0][1],myDeparture[i].arrowsColour[0][2],myDeparture[i].arrowsColour[0][3],myDeparture[i].arrowsColour[0][4],myDeparture[i].arrowsColour[0][5]);
forindex (var matrixFont; myDeparture[i].fontMatrix) {
if (matrixFont == 0) {

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 105 KiB

View file

@ -16,7 +16,7 @@ var A3XXRouteDriver = {
me.update();
},
update: func(){
me.flightplan = fmgc.fp[2];
me.flightplan = fmgc.flightPlanController.flightplans[2];
},
getNumberOfFlightPlans: func(){1},
getFlightPlanType: func(fpNum){"current"},

View file

@ -59,8 +59,6 @@ var FPLN = {
maxBank: 0,
maxBankLimit: 0,
nextCourse: 0,
num: props.globals.getNode("/FMGC/flightplan[2]/num", 1),
numTemp: 0,
R: 0,
radius: 0,
turnDist: 0,
@ -376,7 +374,6 @@ var ITAF = {
Velocity.trueAirspeedKtTemp = Velocity.trueAirspeedKt.getValue();
FPLN.activeTemp = FPLN.active.getValue();
FPLN.currentWPTemp = FPLN.currentWP.getValue();
FPLN.numTemp = FPLN.num.getValue();
# Bank Limit
if (Velocity.trueAirspeedKtTemp >= 420) {
@ -391,14 +388,14 @@ var ITAF = {
# If in LNAV mode and route is not longer active, switch to HDG HLD
if (Output.lat.getValue() == 1) { # Only evaulate the rest of the condition if we are in LNAV mode
if (FPLN.num.getValue() == 0 or !FPLN.active.getBoolValue()) {
if (FPLN.num == 0 or !FPLN.active.getBoolValue()) {
me.setLatMode(3);
}
}
# Waypoint Advance Logic
if (FPLN.numTemp > 0 and FPLN.activeTemp == 1) {
if ((FPLN.currentWPTemp + 1) < FPLN.numTemp) {
if (flightPlanController.num[2] > 0 and FPLN.activeTemp == 1) {
if ((FPLN.currentWPTemp + 1) < flightPlanController.num[2]) {
Velocity.groundspeedMps = Velocity.groundspeedKt.getValue() * 0.5144444444444;
FPLN.wpFlyFrom = FPLN.currentWPTemp;
if (FPLN.wpFlyFrom < 0) {
@ -431,10 +428,10 @@ var ITAF = {
Internal.lnavAdvanceNm.setValue(FPLN.turnDist);
if (FPLN.wp0Dist.getValue() <= FPLN.turnDist) {
if (currentWP[2] < 1) {
currentWP[2] = 1;
} else if (num_out[2].getValue() > 2) { # The Airbus doesn't display anything past the previous waypoint after advancing
flightplan.advanceDelete(2);
if (flightPlanController.currentToWptIndex < 1) {
flightPlanController.currentToWptIndex = 1;
} else if (flightPlanController.num[2] > 2) { # The Airbus doesn't display anything past the previous waypoint after advancing
flightPlanController.autoSequencing();
}
}
}
@ -604,7 +601,7 @@ var ITAF = {
Custom.showHdg.setBoolValue(1);
me.armTextCheck();
} else if (n == 1) {
if (FPLN.num.getValue() > 0 and FPLN.active.getBoolValue()) {
if (flightPlanController.num[2] > 0 and FPLN.active.getBoolValue()) {
Output.lnavArm.setBoolValue(1);
Custom.showHdg.setBoolValue(0);
me.armTextCheck();
@ -741,7 +738,7 @@ var ITAF = {
}
},
checkLNAV: func(t) {
if (FPLN.num.getValue() > 0 and FPLN.active.getBoolValue() and Position.gearAglFt.getValue() >= 30) {
if (flightPlanController.num[2] > 0 and FPLN.active.getBoolValue() and Position.gearAglFt.getValue() >= 30) {
me.activateLNAV();
} else if (Output.lat.getValue() != 1 and t != 1) {
Output.lnavArm.setBoolValue(1);

View file

@ -230,7 +230,7 @@ var masterFMGC = maketimer(0.2, func {
setprop("/FMGC/status/phase", "5");
}
if (getprop("/FMGC/flightplan[2]/num") > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and getprop("/FMGC/flightplan[2]/arrival-leg-dist") <= 15) {
if (flightPlanController.num[2] > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and flightPlanController.arrivalDist <= 15) {
setprop("/FMGC/internal/decel", 1);
} else if (getprop("/FMGC/internal/decel") == 1 and (phase == 0 or phase == 6)) {
setprop("/FMGC/internal/decel", 0);

View file

@ -1,47 +1,26 @@
# A3XX FMGC Flightplan Driver
# Copyright (c) 2019 Jonathan Redpath (2019)
# Copyright (c) 2019 Joshua Davidson (Octal450)
# This thing replaces the Route Manager, it's far from finished though
var magTrueError = 0;
# 0 = TEMP FP Captain MCDU
# 1 = TEMP FP First Officer MCDU
# 2 = ACTIVE FP
var fp = [createFlightplan(), createFlightplan(), createFlightplan()];
var wpDep = nil;
var wpArr = nil;
var pos = nil;
var geoPos = nil;
var geoPosPrev = geo.Coord.new();
var currentLegCourseDist = nil;
var courseDistanceFrom = nil;
var courseDistanceFromPrev = nil;
var sizeWP = nil;
var magTrueError = 0;
var arrivalAirportI = [0, 0, 0];
# Vars for MultiFlightplan
var currentWP = [nil, nil, 0];
var currentLeg = [nil, nil, ""];
# Create/Fetch props.nas for MultiFlightplan
var altFeet = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1);
var active_out = [nil, nil, props.globals.initNode("/FMGC/flightplan[2]/active", 0, "BOOL")];
var currentWP_out = [nil, nil, props.globals.initNode("/FMGC/flightplan[2]/current-wp", 0, "INT")];
var currentLeg_out = [nil, nil, props.globals.initNode("/FMGC/flightplan[2]/current-leg", "", "STRING")];
var currentLegCourse_out = [nil, nil, props.globals.initNode("/FMGC/flightplan[2]/current-leg-course", 0, "DOUBLE")];
var currentLegDist_out = [nil, nil, props.globals.initNode("/FMGC/flightplan[2]/current-leg-dist", 0, "DOUBLE")];
var currentLegCourseMag_out = [nil, nil, props.globals.initNode("/FMGC/flightplan[2]/current-leg-course-mag", 0, "DOUBLE")];
var arrivalLegDist_out = [props.globals.initNode("/FMGC/flightplan[0]/arrival-leg-dist", 0, "DOUBLE"), props.globals.initNode("/FMGC/flightplan[1]/arrival-leg-dist", 0, "DOUBLE"), props.globals.initNode("/FMGC/flightplan[2]/arrival-leg-dist", 0, "DOUBLE")];
var num_out = [props.globals.initNode("/FMGC/flightplan[0]/num", 0, "INT"), props.globals.initNode("/FMGC/flightplan[1]/num", 0, "INT"), props.globals.initNode("/FMGC/flightplan[2]/num", 0, "INT")];
var toFromSet = props.globals.initNode("/FMGC/internal/tofrom-set", 0, "BOOL");
# Props.getNode
var magHDG = props.globals.getNode("/orientation/heading-magnetic-deg", 1);
var trueHDG = props.globals.getNode("/orientation/heading-deg", 1);
var FMGCdep = props.globals.getNode("/FMGC/internal/dep-arpt", 1);
var FMGCarr = props.globals.getNode("/FMGC/internal/arr-arpt", 1);
var TMPYActive = [props.globals.initNode("/FMGC/internal/tmpy-active[0]", 0, "BOOL"), props.globals.initNode("/FMGC/internal/tmpy-active[1]", 0, "BOOL")];
var toFromSet = props.globals.getNode("/FMGC/internal/tofrom-set", 1);
# Create props.nas for flightplan
# Vectors inside vectors, so we can use as many flightplans or waypoints as we want
# Props.initNode
var wpID = [[props.globals.initNode("/FMGC/flightplan[0]/wp[0]/id", "", "STRING")], [props.globals.initNode("/FMGC/flightplan[1]/wp[0]/id", "", "STRING")], [props.globals.initNode("/FMGC/flightplan[2]/wp[0]/id", "", "STRING")]];
var wpLat = [[props.globals.initNode("/FMGC/flightplan[0]/wp[0]/lat", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[1]/wp[0]/lat", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[2]/wp[0]/lat", 0, "DOUBLE")]];
var wpLon = [[props.globals.initNode("/FMGC/flightplan[0]/wp[0]/lon", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[1]/wp[0]/lon", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[2]/wp[0]/lon", 0, "DOUBLE")]];
@ -50,163 +29,194 @@ var wpDistance = [[props.globals.initNode("/FMGC/flightplan[0]/wp[0]/distance",
var wpCoursePrev = [[props.globals.initNode("/FMGC/flightplan[0]/wp[0]/course-from-prev", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[1]/wp[0]/course-from-prev", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[2]/wp[0]/course-from-prev", 0, "DOUBLE")]];
var wpDistancePrev = [[props.globals.initNode("/FMGC/flightplan[0]/wp[0]/distance-from-prev", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[1]/wp[0]/distance-from-prev", 0, "DOUBLE")], [props.globals.initNode("/FMGC/flightplan[2]/wp[0]/distance-from-prev", 0, "DOUBLE")]];
var flightplan = {
var flightPlanController = {
flightplans: [createFlightplan(), createFlightplan(), createFlightplan()],
temporaryFlag: [0, 0],
# These flags are only for the main flgiht-plan
active: props.globals.initNode("/FMGC/flightplan[2]/active", 0, "BOOL"),
currentToWpt: nil, # container for the current TO waypoint ghost
currentToWptIndex: props.globals.initNode("/FMGC/flightplan[2]/current-wp", 0, "INT"),
currentToWptID: "",
courseToWpt: 0,
courseMagToWpt: 0,
distToWpt: 0,
distanceToDest: [0, 0, 0],
num: [0, 0, 0],
arrivalIndex: [0, 0, 0],
arrivalDist: 0,
_arrivalDist: 0,
reset: func() {
TMPYActive[0].setBoolValue(0);
TMPYActive[1].setBoolValue(0);
me.reset0();
me.reset1();
me.reset2();
me.temporaryFlag[0] = 0;
me.temporaryFlag[1] = 0;
me.resetFlightplan(0);
me.resetFlightplan(1);
me.resetFlightplan(2);
},
reset0: func() {
fp[0].cleanPlan();
fp[0].departure = nil;
fp[0].destination = nil;
resetFlightplan: func(n) {
me.flightplans[n].cleanPlan();
me.flightplans[n].departure = nil;
me.flightplans[n].destination = nil;
},
reset1: func() {
fp[1].cleanPlan();
fp[1].departure = nil;
fp[1].destination = nil;
createTemporaryFlightPlan: func(n) {
me.flightplans[n] = me.flightplans[2].clone();
me.temporaryFlag[n] = 1;
me.flightPlanChanged(n);
},
reset2: func() {
fp[2].cleanPlan();
fp[2].departure = nil;
fp[2].destination = nil;
currentWP[2] = 0;
currentLeg[2] = "";
},
initTempFP: func(f, n) { # f is temp, n is active
fp[f] = fp[n].clone();
TMPYActive[f].setBoolValue(1);
me.checkWPOutputs(f);
},
eraseTempFP: func(f, n) { # f is temp, n is active
TMPYActive[f].setBoolValue(0);
if (f == 0) {
me.reset0();
} else if (f == 1) {
me.reset1();
destroyTemporaryFlightPlan: func(n, a) { # a = 1 activate, a = 0 erase
if (a == 1) {
me.flightplans[2] = me.flightplans[n].clone();
me.flightPlanChanged(2);
}
me.checkWPOutputs(n);
me.resetFlightplan(n);
me.temporaryFlag[n] = 0;
},
executeTempFP: func(f, n) { # f is temp, n is active
fp[n] = fp[f].clone();
TMPYActive[f].setBoolValue(0);
if (f == 0) {
me.reset0();
} else if (f == 1) {
me.reset1();
updateAirports: func(dep, arr, plan) {
me.resetFlightplan(plan);
me.flightplans[plan].departure = airportinfo(dep);
me.flightplans[plan].destination = airportinfo(arr);
if (plan == 2) {
me.currentToWptIndex.setValue(0);
}
me.checkWPOutputs(n);
me.addDiscontinuity(1, plan);
me.flightPlanChanged(plan);
},
advanceDelete: func(n) {
if (num_out[n].getValue() > 2) {
if (TMPYActive[0].getBoolValue() and wpID[0][0] == wpID[n][0]) {
autoSequencing: func() {
if (me.num[2] > 2) {
if (me.temporaryFlag[0] == 1 and wpID[0][0] == wpID[2][0]) {
me.deleteWP(0, 0);
}
if (TMPYActive[1].getBoolValue() and wpID[1][0] == wpID[n][0]) {
if (me.temporaryFlag[1] == 1 and wpID[1][0] == wpID[2][0]) {
me.deleteWP(0, 1);
}
me.deleteWP(0, n, 1);
me.deleteWP(0, 2);
}
},
updateARPT: func(dep, arr, n) {
if (n == 2) { # Which flightplan?
me.reset2();
# Set Departure ARPT
if (dep != nil) {
fp[2].departure = airportinfo(dep);
} else {
fp[2].departure = nil;
}
# Set Arrival ARPT
if (arr != nil) {
fp[2].destination = airportinfo(arr);
} else {
fp[2].destination = nil;
}
currentWP[2] = 0;
# Create discontinuity
fmgc.fp[2].insertWP(createDiscontinuity(), 1);
}
me.checkWPOutputs(n);
},
# return 1 will cause NOT IN DATABASE, return 2 will cause NOT ALLOWED
insertFix: func(wp, i, n) {
var pos = findFixesByID(wp);
if (i == 0) {
return 2;
} else if (pos != nil and size(pos) > 0) {
fp[n].insertWP(createWPFrom(pos[0]), i);
me.checkWPOutputs(n);
return 0;
} else {
return 1;
}
},
insertArpt: func(wp, i, n) {
var pos = findAirportsByICAO(wp);
if (i == 0) {
return 2;
} else if (pos != nil and size(pos) > 0) {
fp[n].insertWP(createWPFrom(pos[0]), i);
me.checkWPOutputs(n);
return 0;
} else {
return 1;
}
},
insertNavaid: func(nav, i, n) {
var pos = findNavaidsByID(nav);
if (i == 0) {
return 2;
} else if (pos != nil and size(pos) > 0) {
fp[n].insertWP(createWPFrom(pos[0]), i);
me.checkWPOutputs(n);
return 0;
} else {
return 1;
}
# for these two remember to call flightPlanChanged
addDiscontinuity: func(index, plan) {
me.flightplans[plan].insertWP(createDiscontinuity(), index);
},
insertPPOS: func(n) {
fp[n].insertWP(createWP(geo.aircraft_position(), "PPOS"), 0);
me.checkWPOutputs(n);
me.flightplans[n].insertWP(createWP(geo.aircraft_position(), "PPOS"), 0);
},
insertTP: func(n) {
fp[n].insertWP(createWP(geo.aircraft_position(), "T/P"), 0);
me.checkWPOutputs(n);
deleteWP: func(index, n) {
var wp = wpID[n][index].getValue();
if (wp != FMGCdep.getValue() and wp != FMGCarr.getValue() and me.flightplans[n].getPlanSize() > 2) {
if (me.flightplans[2].getWP(index).id != "DISCONTINUITY") { # if it is a discont, don't make a new one
me.flightplans[2].deleteWP(index);
if (me.flightplans[2].getWP(index).id != "DISCONTINUITY") { # else, if the next one isn't a discont, add one
me.addDiscontinuity(index, n);
}
} else {
me.flightplans[2].deleteWP(index);
}
me.flightPlanChanged(n);
}
},
deleteWP: func(i, n, t) {
var wp = wpID[n][i].getValue();
if (t == 1) {
fp[n].deleteWP(i);
me.outputProps(); # Make sure everything is updated before we update the MCDUs.
me.updateMCDUDriver(n);
canvas_nd.A3XXRouteDriver.triggerSignal("fp-removed");
insertAirport: func(text, index, plan, override = 0, overrideIndex = -1) {
if (index == 0) {
return 1;
}
var airport = findAirportsByICAO(text);
if (size(airport) == 0) {
return 0;
}
if (size(airport) == 1 or override) {
if (!override) {
if (me.flightplans[plan].indexOfWP(airport[0]) == -1) {
me.flightplans[plan].insertWP(createWPFrom(airport[0]), index);
me.flightPlanChanged(plan);
} else {
if (i == 0) {
return 2;
} else if (fp[n].getPlanSize() > 2 and wp != FMGCdep.getValue() and wp != FMGCarr.getValue() and wp != "T/P" and wp != "PPOS") {
fp[n].deleteWP(i);
me.outputProps(); # Make sure everything is updated before we update the MCDUs.
me.updateMCDUDriver(n);
canvas_nd.A3XXRouteDriver.triggerSignal("fp-removed");
var numToDel = me.flightplans[plan].indexOfWP(airport[0]) - index;
}
} else {
if (me.flightplans[plan].indexOfWP(airport[overrideIndex]) == -1) {
me.flightplans[plan].insertWP(createWPFrom(airport[overrideIndex]), index);
me.flightPlanChanged(plan);
} else {
var numToDel = me.flightplans[plan].indexOfWP(airport[overrideIndex]) - index;
}
}
} elsif (size(airport) >= 1) {
# spawn DUPLICATE NAMES
}
},
insertFix: func(text, index, plan, override = 0) { # override - means always choose [0]
if (index == 0) {
return 1;
}
var fix = findFixesByID(text);
if (size(fix) == 0) {
return 0;
}
if (size(fix) == 1 or override) {
if (me.flightplans[plan].indexOfWP(fix[0]) == -1) {
me.flightplans[plan].insertWP(createWPFrom(fix[0]), index);
me.flightPlanChanged(plan);
} else {
return 2;
var numToDel = me.flightplans[plan].indexOfWP(fix[0]) - index;
}
}
},
checkWPOutputs: func(n) {
insertNavaid: func(text, index, plan, override = 0) {
if (index == 0) {
return 1;
}
var navaid = findNavaidsByID(text);
if (size(navaid) == 0) {
return 0;
}
if (size(navaid) == 1 or override) {
if (me.flightplans[plan].indexOfWP(navaid[0]) == -1) {
me.flightplans[plan].insertWP(createWPFrom(navaid[0]), index);
me.flightPlanChanged(plan);
} else {
var numToDel = me.flightplans[plan].indexOfWP(fix[0]) - index;
}
}
},
scratchpad: func(text, index, plan) { # return 0 not in database, 1 not allowed, 2 success
if (text == "CLR") {
return me.deleteWP(index);
} elsif (size(text) == 5) {
return me.insertFix(text, index, plan);
} elsif (size(text) == 4) {
return me.insertAirport(text, index, plan);
} elsif (size(text) == 3 or size(text) == 2) {
return me.insertNavatext(text, index, plan);
} else {
return 1;
}
},
flightPlanChanged: func(n) {
sizeWP = size(wpID[n]);
for (var counter = sizeWP; counter < fp[n].getPlanSize(); counter += 1) {
append(wpID[n], props.globals.initNode("/FMGC/flightplan[" ~ n ~ "]/wp[" ~ counter ~ "]/id", "", "STRING"));
for (var counter = sizeWP; counter < me.flightplans[n].getPlanSize(); counter += 1) { # create new properties if they are required
append(wpID[n], props.globals.initNode("/FMGC/flightplan[" ~ n ~ "]/wp[" ~ counter ~ "]/text", "", "STRING"));
append(wpLat[n], props.globals.initNode("/FMGC/flightplan[" ~ n ~ "]/wp[" ~ counter ~ "]/lat", 0, "DOUBLE"));
append(wpLon[n], props.globals.initNode("/FMGC/flightplan[" ~ n ~ "]/wp[" ~ counter ~ "]/lon", 0, "DOUBLE"));
append(wpCourse[n], props.globals.initNode("/FMGC/flightplan[" ~ n ~ "]/wp[" ~ counter ~ "]/course", 0, "DOUBLE"));
@ -214,104 +224,110 @@ var flightplan = {
append(wpCoursePrev[n], props.globals.initNode("/FMGC/flightplan[" ~ n ~ "]/wp[" ~ counter ~ "]/course-from-prev", 0, "DOUBLE"));
append(wpDistancePrev[n], props.globals.initNode("/FMGC/flightplan[" ~ n ~ "]/wp[" ~ counter ~ "]/distance-from-prev", 0, "DOUBLE"));
}
me.outputProps(); # Make sure everything is updated before we update the MCDUs.
me.updateMCDUDriver(n);
canvas_nd.A3XXRouteDriver.triggerSignal("fp-added"); # Update the NDs
me.updatePlans();
},
updatePlans: func() {
me.updateCurrentWaypoint();
me._arrivalDist = 0;
for (var n = 0; n <= 2; n += 1) {
for (var wpt = 0; wpt < me.flightplans[n].getPlanSize(); wpt += 1) { # Iterate through the waypoints and update their data
var curAircraftPos = geo.aircraft_position(); # don't want to get this corrupted so make sure it is a local variable
var waypointHashStore = me.flightplans[n].getWP(wpt);
courseDistanceFrom = waypointHashStore.courseAndDistanceFrom(curAircraftPos);
wpID[n][wpt].setValue(waypointHashStore.wp_name);
wpLat[n][wpt].setValue(waypointHashStore.wp_lat);
wpLon[n][wpt].setValue(waypointHashStore.wp_lon);
wpCourse[n][wpt].setValue(waypointHashStore.courseAndDistanceFrom(curAircraftPos)[0]);
wpDistance[n][wpt].setValue(waypointHashStore.courseAndDistanceFrom(curAircraftPos)[1]);
if (wpt > 0) {
if (me.flightplans[n].getWP(wpt).id == "DISCONTINUITY") {
wpCoursePrev[n][wpt].setValue(0);
wpDistancePrev[n][wpt].setValue(0);
continue;
}
if (me.flightplans[n].getWP(wpt - 1).id == "DISCONTINUITY") {
geoPosPrev.set_latlon(me.flightplans[n].getWP(wpt - 2).lat, me.flightplans[n].getWP(wpt - 2).lon);
} else {
geoPosPrev.set_latlon(me.flightplans[n].getWP(wpt - 1).lat, me.flightplans[n].getWP(wpt - 1).lon);
}
courseDistanceFromPrev = waypointHashStore.courseAndDistanceFrom(geoPosPrev);
wpCoursePrev[n][wpt].setValue(courseDistanceFromPrev[0]);
wpDistancePrev[n][wpt].setValue(courseDistanceFromPrev[1]);
me._arrivalDist += courseDistanceFromPrev[1];
} else {
# use PPOS for the first waypoint
wpCoursePrev[n][wpt].setValue(courseDistanceFrom[0]);
wpDistancePrev[n][wpt].setValue(courseDistanceFrom[1]);
}
if (wpID[n][wpt].getValue() == FMGCarr.getValue()) {
me.arrivalIndex[n] = wpt;
}
}
}
me.arrivalDist = me._arrivalDist;
me.updateMCDUDriver(n);
canvas_nd.A3XXRouteDriver.triggerSignal("fp-added");
},
updateCurrentWaypoint: func() {
for (var i = 0; i <= 2; i += 1) {
if (toFromSet.getBoolValue() and me.flightplans[i].departure != nil and me.flightplans[i].destination != nil) { # check if flightplan exists
var curAircraftPos = geo.aircraft_position(); # don't want to get this corrupted so make sure it is a local variable
if (i == 2) { # main plan
if (!me.active.getBoolValue()) {
me.active.setValue(1);
}
if (me.currentToWptIndex.getValue() > me.flightplans[i].getPlanSize()) {
me.currentToWptIndex.setValue(me.flightplans[i].getPlanSize());
}
me.currentToWpt = me.flightplans[i].getWP(me.currentToWptIndex.getValue());
me.currentToWptId = me.currentToWpt.wp_name;
me.courseToWpt = me.currentToWpt.courseAndDistanceFrom(curAircraftPos)[0];
me.distToWpt = me.currentToWpt.courseAndDistanceFrom(curAircraftPos)[1];
magTrueError = magHDG.getValue() - trueHDG.getValue();
me.courseMagToWpt = me.courseToWpt + magTrueError;
return;
}
me.num[i] = me.flightplans[i].getPlanSize();
} else {
if (i == 2) {
if (me.active.getBoolValue()) {
me.active.setValue(0);
}
me.currentToWptID = "";
}
me.num[i] = 0;
}
}
},
updateMCDUDriver: func(n) {
for (var i = 0; i < 2; i += 1) { # Update the 2 MCDUs
if (TMPYActive[i].getBoolValue()) {
for (var i = 0; i <= 1; i += 1) {
if (me.temporaryFlag[i] == 1) {
mcdu.FPLNLines[i].replacePlan(i, mcdu.TMPY, mcdu.FPLNLines[i].index);
} else {
mcdu.FPLNLines[i].replacePlan(2, mcdu.MAIN, mcdu.FPLNLines[i].index);
}
}
},
outputProps: func() {
geoPos = geo.aircraft_position();
for (var n = 0; n < 3; n += 1) { # Note: Some things don't get done for TMPY (0) hence all the if (n > 1) {}
if (((n == 0 and TMPYActive[0].getBoolValue()) or (n == 1 and TMPYActive[1].getBoolValue()) or n > 1) and toFromSet.getBoolValue() and fp[n].departure != nil and fp[n].destination != nil) {
if (n > 1) {
if (currentWP[n] > fp[n].getPlanSize()) {
currentWP[n] = fp[n].getPlanSize();
}
if (active_out[n].getBoolValue() != 1) {
active_out[n].setBoolValue(1);
}
currentLeg[n] = fp[n].getWP(currentWP[n]).wp_name;
if (currentLeg_out[n].getValue() != currentLeg[n]) {
currentLeg_out[n].setValue(currentLeg[n]);
}
currentLegCourseDist = fp[n].getWP(currentWP[n]).courseAndDistanceFrom(geoPos);
currentLegCourse_out[n].setValue(currentLegCourseDist[0]);
currentLegDist_out[n].setValue(currentLegCourseDist[1]);
magTrueError = magHDG.getValue() - trueHDG.getValue();
currentLegCourseMag_out[n].setValue(currentLegCourseDist[0] + magTrueError); # Convert to Magnetic
}
if (num_out[n].getValue() != fp[n].getPlanSize()) {
num_out[n].setValue(fp[n].getPlanSize());
}
for (var i = 0; i < fp[n].getPlanSize(); i += 1) {
wpID[n][i].setValue(fp[n].getWP(i).wp_name);
wpLat[n][i].setValue(fp[n].getWP(i).wp_lat);
wpLon[n][i].setValue(fp[n].getWP(i).wp_lon);
courseDistanceFrom = fp[n].getWP(i).courseAndDistanceFrom(geoPos);
wpCourse[n][i].setValue(courseDistanceFrom[0]);
wpDistance[n][i].setValue(courseDistanceFrom[1]);
if (i > 0) { # Impossible to do from the first WP
geoPosPrev.set_latlon(fp[n].getWP(i - 1).lat, fp[n].getWP(i - 1).lon, altFeet.getValue() * 0.3048);
courseDistanceFromPrev = fp[n].getWP(i).courseAndDistanceFrom(geoPosPrev);
wpCoursePrev[n][i].setValue(courseDistanceFromPrev[0]);
wpDistancePrev[n][i].setValue(courseDistanceFromPrev[1]);
} else { # So if its the first WP, we just use current position instead
wpCoursePrev[n][i].setValue(courseDistanceFrom[0]);
wpDistancePrev[n][i].setValue(courseDistanceFrom[1]);
}
if (wpID[n][i].getValue() == FMGCarr.getValue()) {
arrivalAirportI[n] = i;
}
}
arrivalLegDist_out[n].setValue(wpDistance[n][arrivalAirportI[n]].getValue());
} else {
if (n > 1) {
if (active_out[n].getBoolValue() != 0) {
active_out[n].setBoolValue(0);
}
if (currentLeg_out[n].getValue() != "") {
currentLeg_out[n].setValue("");
}
}
if (num_out[n].getValue() != 0) {
num_out[n].setValue(0);
}
}
if (n > 1) {
if (currentWP[n] != nil) {
if (currentWP_out[n].getValue() != currentWP[n]) {
currentWP_out[n].setValue(currentWP[n]);
}
} else {
if (currentWP_out[n].getValue() != 0) {
currentWP_out[n].setValue(0);
}
if (canvas_mcdu.myFpln[i] != nil) {
canvas_mcdu.myFpln[i].createPlanList();
}
}
}
},
};
var outputPropsTimer = maketimer(0.1, flightplan.outputProps);
var flightPlanTimer = maketimer(0.1, flightPlanController, flightPlanController.updatePlans);

View file

@ -37,8 +37,8 @@ var arrivalPage = {
lr.computer = computer;
lr._setupPageWithData();
lr.updateRunways();
if (fmgc.fp[2].destination_runway != nil) {
lr.selectedRunway = fmgc.fp[2].destination_runway;
if (fmgc.flightPlanController.flightplans[2].destination_runway != nil) {
lr.selectedRunway = fmgc.flightPlanController.flightplans[2].destination_runway;
}
lr.updateActiveRunway();
return lr;
@ -48,7 +48,7 @@ var arrivalPage = {
},
_setupPageWithData: func() {
me.title = ["ARRIVAL", " TO ", left(me.id, 4)];
if (!TMPYActive[me.computer].getBoolValue()) {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.L6 = [" RETURN END", nil, "wht"];
} else {
me.L6 = [" F-PLN", " TMPY", "yel"];
@ -64,16 +64,16 @@ var arrivalPage = {
},
updateActiveRunway: func() {
if (me.selectedRunway != nil) {
if (fmgc.fp[2].destination_runway != nil) {
if (fmgc.fp[2].destination_runway.id == me.selectedRunway.id) {
me.L1 = [fmgc.fp[2].destination_runway.id, " RWY", "grn"];
} elsif (fmgc.fp[me.computer].destination_runway != nil) {
me.L1 = [fmgc.fp[me.computer].destination_runway.id, " RWY", "yel"];
if (fmgc.flightPlanController.flightplans[2].destination_runway != nil) {
if (fmgc.flightPlanController.flightplans[2].destination_runway.id == me.selectedRunway.id) {
me.L1 = [fmgc.flightPlanController.flightplans[2].destination_runway.id, " RWY", "grn"];
} elsif (fmgc.flightPlanController.flightplans[me.computer].destination_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].destination_runway.id, " RWY", "yel"];
} else {
me.L1 = ["---", " RWY", "wht"];
}
} elsif (fmgc.fp[me.computer].destination_runway != nil) {
me.L1 = [fmgc.fp[me.computer].destination_runway.id, " RWY", "yel"];
} elsif (fmgc.flightPlanController.flightplans[me.computer].destination_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].destination_runway.id, " RWY", "yel"];
} else {
me.L1 = ["---", " RWY", "wht"];
}
@ -124,8 +124,8 @@ var arrivalPage = {
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
makeTmpy: func() {
if (!TMPYActive[me.computer].getBoolValue()) {
fmgc.flightplan.initTempFP(me.computer, 2);
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
fmgc.flightPlanController.createTemporaryFlightPlan(me.computer);
me.L6 = [" F-PLN", " TMPY", "yel"];
me.arrowsColour[0][5] = "yel";
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
@ -153,9 +153,9 @@ var arrivalPage = {
if (size(me.runways) >= (index - 1)) {
me.selectedRunway = me.arrAirport[0].runway(me.runways[index - 2 + me.scroll]);
me.makeTmpy();
fmgc.fp[me.computer].destination_runway = me.selectedRunway;
fmgc.flightPlanController.flightplans[me.computer].destination_runway = me.selectedRunway;
me.updateActiveRunway();
fmgc.flightplan.checkWPOutputs(me.computer);
fmgc.flightPlanController.checkWPOutputs(me.computer);
} else {
notAllowed(me.computer);
}

View file

@ -25,22 +25,25 @@ var departurePage = {
depAirport: nil,
runways: nil,
selectedRunway: nil,
selectedSID: nil,
selectedTransition: nil,
sids: nil,
transitions: nil,
computer: nil,
enableScroll: 0,
scroll: 0,
enableScrollRwy: 0,
enableScrollSids: 0,
scrollRwy: 0,
scrollSids: 0,
activePage: 0, # runways, sids, trans
hasPressNoTrans: 0, # temporary
_runways: nil,
_sids: nil,
_transitions: nil,
new: func(icao, computer) {
var lr = {parents:[departurePage]};
lr.id = icao;
lr.computer = computer;
lr._setupPageWithData();
lr.updateRunways();
if (fmgc.fp[2].departure_runway != nil) {
lr.selectedRunway = fmgc.fp[2].departure_runway;
}
lr.updateActiveRunway();
return lr;
},
del: func() {
@ -48,31 +51,86 @@ var departurePage = {
},
_setupPageWithData: func() {
me.title = ["DEPARTURE", " FROM ", left(me.id, 4)];
if (!TMPYActive[me.computer].getBoolValue()) {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.L6 = [" RETURN END", nil, "wht"];
} else {
me.L6 = [" F-PLN", " TMPY", "yel"];
me.arrowsColour[0][5] = "yel";
}
me.C1 = ["------- ", "SID", "wht"];
me.R1 = ["-------", "TRANS ", "wht"];
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[2].departure_runway != nil) {
me.selectedRunway = fmgc.flightPlanController.flightplans[2].departure_runway;
}
if (fmgc.flightPlanController.flightplans[2].sid != nil) {
me.selectedSID = fmgc.flightPlanController.flightplans[2].sid;
}
} else {
if (fmgc.flightPlanController.flightplans[me.computer].departure_runway != nil) {
me.selectedRunway = fmgc.flightPlanController.flightplans[me.computer].departure_runway;
} elsif (fmgc.flightPlanController.flightplans[2].departure_runway != nil) {
me.selectedRunway = fmgc.flightPlanController.flightplans[2].departure_runway;
}
if (fmgc.flightPlanController.flightplans[me.computer].sid != nil) {
me.selectedSID = fmgc.flightPlanController.flightplans[me.computer].sid;
} elsif (fmgc.flightPlanController.flightplans[2].sid != nil) {
me.selectedSID = fmgc.flightPlanController.flightplans[2].sid;
}
}
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
if (me.activePage == 0) {
me.updateRunways();
} else {
me.updateSIDs();
}
me.updateActiveRunway();
me.updateActiveSIDs();
me.updateActiveTransitions();
},
_clearPage: func() {
me.L1 = [nil, nil, "ack"];
me.L2 = [nil, nil, "ack"];
me.L3 = [nil, nil, "ack"];
me.L4 = [nil, nil, "ack"];
me.L5 = [nil, nil, "ack"];
me.L6 = [nil, nil, "ack"];
me.C1 = [nil, nil, "ack"];
me.C2 = [nil, nil, "ack"];
me.C3 = [nil, nil, "ack"];
me.C4 = [nil, nil, "ack"];
me.C5 = [nil, nil, "ack"];
me.C6 = [nil, nil, "ack"];
me.R1 = [nil, nil, "ack"];
me.R2 = [nil, nil, "ack"];
me.R3 = [nil, nil, "ack"];
me.R4 = [nil, nil, "ack"];
me.R5 = [nil, nil, "ack"];
me.R6 = [nil, nil, "ack"];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "ack"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
},
updatePage: func() {
me._clearPage();
me._setupPageWithData();
},
updateActiveRunway: func() {
if (me.selectedRunway != nil) {
if (fmgc.fp[2].departure_runway != nil) {
if (fmgc.fp[2].departure_runway.id == me.selectedRunway.id) {
me.L1 = [fmgc.fp[2].departure_runway.id, " RWY", "grn"];
} elsif (fmgc.fp[me.computer].departure_runway != nil) {
me.L1 = [fmgc.fp[me.computer].departure_runway.id, " RWY", "yel"];
if (fmgc.flightPlanController.flightplans[2].departure_runway != nil) {
if (fmgc.flightPlanController.flightplans[2].departure_runway.id == me.selectedRunway.id) {
me.L1 = [fmgc.flightPlanController.flightplans[2].departure_runway.id, " RWY", "grn"];
} elsif (fmgc.flightPlanController.flightplans[me.computer].departure_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].departure_runway.id, " RWY", "yel"];
} else {
me.L1 = ["---", " RWY", "wht"];
}
} elsif (fmgc.fp[me.computer].departure_runway != nil) {
me.L1 = [fmgc.fp[me.computer].departure_runway.id, " RWY", "yel"];
} elsif (fmgc.flightPlanController.flightplans[me.computer].departure_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].departure_runway.id, " RWY", "yel"];
} else {
me.L1 = ["---", " RWY", "wht"];
}
@ -81,82 +139,316 @@ var departurePage = {
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateActiveSIDs: func() {
if (me.selectedSID != nil) {
if (fmgc.flightPlanController.flightplans[2].sid != nil) {
if (fmgc.flightPlanController.flightplans[2].sid == me.selectedSID) {
me.C1 = [fmgc.flightPlanController.flightplans[2].sid.id, "SID", "grn"];
} elsif (fmgc.flightPlanController.flightplans[me.computer].sid != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[me.computer].sid.id, "SID", "yel"];
} else {
me.C1 = ["------- ", "SID", "wht"];
}
} elsif (fmgc.flightPlanController.flightplans[me.computer].sid.id != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[me.computer].sid.id, "SID", "yel"];
} else {
me.C1 = ["------- ", "SID", "wht"];
}
} else {
me.C1 = ["------- ", "SID", "wht"];
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateActiveTransitions: func() {
if (me.selectedTransition != nil) {
if (fmgc.flightPlanController.flightplans[2].sid_trans != nil) {
if (fmgc.flightPlanController.flightplans[2].sid_trans == me.selectedTransition) {
me.R1 = [fmgc.flightPlanController.flightplans[2].sid_trans.id, "TRANS", "grn"];
} elsif (fmgc.flightPlanController.flightplans[me.computer].sid_trans != nil) {
me.R1 = [fmgc.flightPlanController.flightplans[me.computer].sid_trans.id, "TRANS", "yel"];
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
} elsif (fmgc.flightPlanController.flightplans[me.computer].sid_trans != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[me.computer].sid_trans.id, "SID", "yel"];
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateRunways: func() {
if (me.depAirport == nil) {
me.depAirport = findAirportsByICAO(left(me.id, 4));
}
me._runways = keys(me.depAirport[0].runways);
me.runways = sort(me._runways,func(a,b) cmp(a,b));
me.fourRunways = [nil, nil, nil, nil];
if (size(me.runways) >= 1) {
me.L2 = [" " ~ me.runways[0 + me.scroll], nil, "blu"];
me.C2 = [math.round(me.depAirport[0].runways[me.runways[0 + me.scroll]].length) ~ "M", nil, "blu"];
me.R2 = ["CRS" ~ math.round(me.depAirport[0].runways[me.runways[0 + me.scroll]].heading), nil, "blu"];
me.L2 = [" " ~ me.runways[0 + me.scrollRwy], nil, "blu"];
me.C2 = [math.round(me.depAirport[0].runways[me.runways[0 + me.scrollRwy]].length) ~ "M", "AVAILABLE RUNWAYS", "blu"];
me.R2 = ["CRS" ~ math.round(me.depAirport[0].runways[me.runways[0 + me.scrollRwy]].heading), nil, "blu"];
if (me.runways[0 + me.scrollRwy] != me.selectedRunway) {
me.arrowsMatrix[0][1] = 1;
me.arrowsColour[0][1] = "blu";
} else {
me.arrowsMatrix[0][1] = 0;
me.arrowsColour[0][1] = "ack";
}
}
if (size(me.runways) >= 2) {
me.L3 = [" " ~ me.runways[1 + me.scroll], nil, "blu"];
me.C3 = [math.round(me.depAirport[0].runways[me.runways[1 + me.scroll]].length) ~ "M", nil, "blu"];
me.R3 = ["CRS" ~ math.round(me.depAirport[0].runways[me.runways[1 + me.scroll]].heading), nil, "blu"];
me.L3 = [" " ~ me.runways[1 + me.scrollRwy], nil, "blu"];
me.C3 = [math.round(me.depAirport[0].runways[me.runways[1 + me.scrollRwy]].length) ~ "M", nil, "blu"];
me.R3 = ["CRS" ~ math.round(me.depAirport[0].runways[me.runways[1 + me.scrollRwy]].heading), nil, "blu"];
if (me.runways[1 + me.scrollRwy] != me.selectedRunway) {
me.arrowsMatrix[0][2] = 1;
me.arrowsColour[0][2] = "blu";
} else {
me.arrowsMatrix[0][2] = 0;
me.arrowsColour[0][2] = "ack";
}
}
if (size(me.runways) >= 3) {
me.L4 = [" " ~ me.runways[2 + me.scroll], nil, "blu"];
me.C4 = [math.round(me.depAirport[0].runways[me.runways[2 + me.scroll]].length) ~ "M", nil, "blu"];
me.R4 = ["CRS" ~ math.round(me.depAirport[0].runways[me.runways[2 + me.scroll]].heading), nil, "blu"];
me.L4 = [" " ~ me.runways[2 + me.scrollRwy], nil, "blu"];
me.C4 = [math.round(me.depAirport[0].runways[me.runways[2 + me.scrollRwy]].length) ~ "M", nil, "blu"];
me.R4 = ["CRS" ~ math.round(me.depAirport[0].runways[me.runways[2 + me.scrollRwy]].heading), nil, "blu"];
if (me.runways[2 + me.scrollRwy] != me.selectedRunway) {
me.arrowsMatrix[0][3] = 1;
me.arrowsColour[0][3] = "blu";
} else {
me.arrowsMatrix[0][3] = 0;
me.arrowsColour[0][3] = "ack";
}
}
if (size(me.runways) >= 4) {
me.L5 = [" " ~ me.runways[3 + me.scroll], nil, "blu"];
me.C5 = [math.round(me.depAirport[0].runways[me.runways[3 + me.scroll]].length) ~ "M", nil, "blu"];
me.R5 = ["CRS" ~ math.round(me.depAirport[0].runways[me.runways[3 + me.scroll]].heading), nil, "blu"];
me.L5 = [" " ~ me.runways[3 + me.scrollRwy], nil, "blu"];
me.C5 = [math.round(me.depAirport[0].runways[me.runways[3 + me.scrollRwy]].length) ~ "M", nil, "blu"];
me.R5 = ["CRS" ~ math.round(me.depAirport[0].runways[me.runways[3 + me.scrollRwy]].heading), nil, "blu"];
if (me.runways[3 + me.scrollRwy] != me.selectedRunway) {
me.arrowsMatrix[0][4] = 1;
me.arrowsColour[0][4] = "blu";
} else {
me.arrowsMatrix[0][4] = 0;
me.arrowsColour[0][4] = "ack";
}
}
if (size(me.runways) > 4) {
me.enableScroll = 1;
me.enableScrollRwy = 1;
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateSIDs: func() {
if (me.depAirport == nil) {
me.depAirport = findAirportsByICAO(left(me.id, 4));
}
if (me.selectedRunway != nil) {
me._sids = me.depAirport[0].sids(me.selectedRunway.id);
} else {
me._sids = me.depAirport[0].sids();
}
me.sids = sort(me._sids,func(a,b) cmp(a,b));
if (size(me.sids) >= 1) {
me.L2 = [" " ~ me.sids[0 + me.scrollSids], "SIDS", "blu"];
if (me.sids[0 + me.scrollSids] != me.selectedSID) {
me.arrowsMatrix[0][1] = 1;
me.arrowsColour[0][1] = "blu";
} else {
me.arrowsMatrix[0][1] = 0;
me.arrowsColour[0][1] = "ack";
}
}
if (size(me.sids) >= 2) {
me.L3 = [" " ~ me.sids[1 + me.scrollSids], nil, "blu"];
if (me.sids[1 + me.scrollSids] != me.selectedSID) {
me.arrowsMatrix[0][2] = 1;
me.arrowsColour[0][2] = "blu";
} else {
me.arrowsMatrix[0][2] = 0;
me.arrowsColour[0][2] = "ack";
}
}
if (size(me.sids) >= 3) {
me.L4 = [" " ~ me.sids[2 + me.scrollSids], nil, "blu"];
if (me.sids[2 + me.scrollSids] != me.selectedSID) {
me.arrowsMatrix[0][3] = 1;
me.arrowsColour[0][3] = "blu";
} else {
me.arrowsMatrix[0][3] = 0;
me.arrowsColour[0][3] = "ack";
}
}
if (size(me.sids) >= 4) {
me.L5 = [" " ~ me.sids[3 + me.scrollSids], nil, "blu"];
if (me.sids[3 + me.scrollSids] != me.selectedSID) {
me.arrowsMatrix[0][4] = 1;
me.arrowsColour[0][4] = "blu";
} else {
me.arrowsMatrix[0][4] = 0;
me.arrowsColour[0][4] = "ack";
}
}
me.C2 = [nil, "AVAILABLE", "wht"];
me.R2 = [nil, "TRANS ", "wht"];
if (size(me.sids) > 4) {
me.enableScrollSids = 1;
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateTransitions: func() {
if (me.depAirport == nil) {
me.depAirport = findAirportsByICAO(left(me.id, 4));
}
me._transitions = me.depAirport[0].getSid(me.selectedSID).transitions;
me.transitions = sort(me._transitions,func(a,b) cmp(a,b));
if (size(me.transitions) == 0) {
me.R2 = ["NO TRANS ", "TRANS", "blu"];
if (!me.hasPressNoTrans) {
me.arrowsMatrix[1][1] = 1;
me.arrowsColour[1][1] = "blu";
} else {
me.arrowsMatrix[1][1] = 0;
me.arrowsColour[1][1] = "ack";
}
} elsif (size(me.transitions) >= 1) {
me.R2 = [" " ~ me.transitions[0], "TRANS", "blu"];
if (me.transitions[0] != me.selectedTransition) {
me.arrowsMatrix[1][1] = 1;
me.arrowsColour[1][1] = "blu";
} else {
me.arrowsMatrix[1][1] = 0;
me.arrowsColour[1][1] = "ack";
}
} elsif (size(me.transitions) >= 2) {
me.R3 = [" " ~ me.transitions[1], nil, "blu"];
if (me.transitions[1] != me.selectedTransition) {
me.arrowsMatrix[1][2] = 1;
me.arrowsColour[1][2] = "blu";
} else {
me.arrowsMatrix[1][2] = 0;
me.arrowsColour[1][2] = "ack";
}
} elsif (size(me.transitions) >= 3) {
me.R4 = [" " ~ me.transitions[2], nil, "blu"];
if (me.transitions[2] != me.selectedTransition) {
me.arrowsMatrix[1][3] = 1;
me.arrowsColour[1][3] = "blu";
} else {
me.arrowsMatrix[1][3] = 0;
me.arrowsColour[1][3] = "ack";
}
} elsif (size(me.transitions) >= 4) {
me.R5 = [" " ~ me.transitions[3], nil, "blu"];
if (me.transitions[3] != me.selectedTransition) {
me.arrowsMatrix[1][4] = 1;
me.arrowsColour[1][4] = "blu";
} else {
me.arrowsMatrix[1][4] = 0;
me.arrowsColour[1][4] = "ack";
}
}
},
makeTmpy: func() {
if (!TMPYActive[me.computer].getBoolValue()) {
fmgc.flightplan.initTempFP(me.computer, 2);
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
fmgc.flightPlanController.createTemporaryFlightPlan(me.computer);
me.L6 = [" F-PLN", " TMPY", "yel"];
me.arrowsColour[0][5] = "yel";
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
}
},
scrollUp: func() {
if (me.enableScroll) {
me.scroll += 1;
if (me.scroll > size(me.runways) - 4) {
me.scroll = 0;
if (me.activePage == 0) {
if (me.enableScrollRwy) {
me.scrollRwy += 1;
if (me.scrollRwy > size(me.runways) - 4) {
me.scrollRwy = 0;
}
me.updateRunways();
}
} else {
if (me.enableScrollSids) {
me.scrollSids += 1;
if (me.scrollSids > size(me.sids) - 4) {
me.scrollSids = 0;
}
me.updateSIDs();
}
}
},
scrollDn: func() {
if (me.enableScroll) {
me.scroll -= 1;
if (me.scroll < 0) {
me.scroll = size(me.runways) - 4;
if (me.activePage == 0) {
if (me.enableScrollRwy) {
me.scrollRwy -= 1;
if (me.scrollRwy < 0) {
me.scrollRwy = size(me.runways) - 4;
}
me.updateRunways();
}
} else {
if (me.enableScrollSids) {
me.scrollSids -= 1;
if (me.scrollSids < 0) {
me.scrollSids = size(me.sids) - 4;
}
me.updateSIDs();
}
}
},
scrollLeft: func() {
me.activePage = !me.activePage;
me.updatePage();
},
scrollRight: func() {
me.activePage = !me.activePage;
me.updatePage();
},
depPushbuttonLeft: func(index) {
if (me.activePage == 0) {
if (size(me.runways) >= (index - 1)) {
me.selectedRunway = me.depAirport[0].runway(me.runways[index - 2 + me.scroll]);
me.selectedRunway = me.depAirport[0].runway(me.runways[index - 2 + me.scrollRwy]);
me.makeTmpy();
fmgc.fp[me.computer].departure_runway = me.selectedRunway;
fmgc.flightPlanController.flightplans[me.computer].departure_runway = me.selectedRunway;
me.updateActiveRunway();
fmgc.flightplan.checkWPOutputs(me.computer);
me.updateRunways();
fmgc.flightPlanController.flightPlanChanged(me.computer);
me.scrollRight();
} else {
notAllowed(me.computer);
}
} else {
if (size(me.sids) >= (index - 1)) {
me.selectedSID = me.sids[index - 2 + me.scrollSids];
me.makeTmpy();
fmgc.flightPlanController.flightplans[me.computer].sid = me.selectedSID;
me.updateActiveSIDs();
me.updateSIDs();
me.updateTransitions();
fmgc.flightPlanController.flightPlanChanged(me.computer);
} else {
notAllowed(me.computer);
}
}
},
depPushbuttonRight: func(index) {
if (index == 2 and size(me.transitions) == 0) {
me.hasPressNoTrans = 1;
me.updateActiveTransitions();
me.updateTransitions();
} else {
me.selectedTransition = me.transitions[index - 2];
me.makeTmpy();
fmgc.flightPlanController.flightplans[me.computer].sid_trans = me.selectedTransition;
me.updateActiveTransitions();
me.updateTransitions();
fmgc.flightPlanController.flightPlanChanged(me.computer);
}
},
};

314
Nasal/MCDU/F-PLN-rework.nas Normal file
View file

@ -0,0 +1,314 @@
var fplnItem = {
new: func(wp, index, plan) {
var fI = {parents:[fplnItem]};
fI.wp = wp;
fI.index = index;
fI.plan = plan;
return fI;
},
updateLeftText: func() {
if (me.wp.wp_name != "DISCONTINUITY") {
return [me.wp.wp_name, nil, "grn"];
} else {
return [nil, nil, "ack"];
}
},
updateCenterText: func() {
if (me.wp.wp_name != "DISCONTINUITY") {
me.brg = me.getBrg();
me.track = me.getTrack();
return ["---- ", nil, "grn"];
} else {
return ["---F-PLN DISCONTINUITY--", nil, "wht"];
}
},
updateRightText: func() {
me.spd = me.getSpd();
me.spd = me.getAlt();
me.spd = me.getDist();
return [me.spd ~ "/" ~ me.alt, "-" ~ me.dist ~ "NM ", "grn"];
},
getBrg: func() {
return nil;
},
getTrack: func() {
return nil;
},
getSpd: func() {
return nil;
},
getAlt: func() {
return nil;
},
getDist: func() {
return nil;
},
};
var fplnPage = { # this one is only created once, and then updated - remember this
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
L1: [nil, nil, "ack"], # content, title, colour
L2: [nil, nil, "ack"],
L3: [nil, nil, "ack"],
L4: [nil, nil, "ack"],
L5: [nil, nil, "ack"],
L6: [nil, nil, "ack"],
C1: [nil, nil, "ack"],
C2: [nil, nil, "ack"],
C3: [nil, nil, "ack"],
C4: [nil, nil, "ack"],
C5: [nil, nil, "ack"],
C6: [nil, nil, "ack"],
R1: [nil, nil, "ack"],
R2: [nil, nil, "ack"],
R3: [nil, nil, "ack"],
R4: [nil, nil, "ack"],
R5: [nil, nil, "ack"],
R6: [nil, nil, "ack"],
# init conditions
# line 1 = FROM
# line 2 = TO
# line 6 = DEST
# neither pseudo nor markers may be FROM waypoint
# bearing between FROM and TO waypoints
# track between line 2 and line 3 waypoints
# name of LEG above TO waypoint - is airway identifier, or waypoint name
# DEST in LINE 6 time prediction, distance along flightplan, and EFOB
# dashes if no predictions
planList: [],
outputList: [],
scroll: 0,
new: func(plan, computer) {
var lr = {parents:[fplnPage]};
lr.plan = fmgc.flightPlanController.flightplans[plan];
lr.planIndex = plan;
lr.computer = computer;
lr._setupPageWithData();
return lr;
},
_setupPageWithData: func() {
me.destInfo();
me.createPlanList();
},
getText: func(type) {
if (me.type == "discontinuity") {
return "---F-PLN DISCONTINUITY--";
} else if (me.type == "fplnEnd") {
return "------END OF F-PLN------";
} else if (me.type == "altnFplnEnd") {
return "----END OF ALTN F-PLN---";
} else if (me.type == "noAltnFpln") {
return "------NO ALTN F-PLN-----";
} else if (me.type == "empty") {
return "";
}
},
createPlanList: func() {
me.planList = [];
for (var i = 0; i < me.plan.getPlanSize(); i += 1) {
append(me.planList, fplnItem.new(me.plan.getWP(i), i, me.plan));
}
},
basePage: func() {
me.outputList = [];
for (var i = 0; i < size(me.planList); i += 1) {
if (i == 5) { break; }
append(me.outputList, me.planList[i + me.scroll] );
}
if (size(me.outputList) > 1) {
me.L1 = me.outputList[0].updateLeftText();
me.C1 = me.outputList[0].updateCenterText();
me.C1[1] = "TIME ";
me.R1 = ["---/-----", "SPD/ALT ", "grn"];
}
if (size(me.outputList) > 2) {
me.L2 = me.outputList[1].updateLeftText();
me.C2 = me.outputList[1].updateCenterText();
me.R2 = ["---/-----", nil, "grn"];
}
if (size(me.outputList) > 3) {
me.L3 = me.outputList[2].updateLeftText();
me.C3 = me.outputList[2].updateCenterText();
me.R3 = ["---/-----", nil, "grn"];
}
if (size(me.outputList) > 4) {
me.L4 = me.outputList[3].updateLeftText();
me.C4 = me.outputList[3].updateCenterText();
me.R4 = ["---/-----", nil, "grn"];
}
if (size(me.outputList) > 5) {
me.L5 = me.outputList[4].updateLeftText();
me.C5 = me.outputList[4].updateCenterText();
me.R5 = ["---/-----", nil, "grn"];
}
},
destInfo: func() {
me.L6 = [me.plan.getWP(fmgc.flightPlanController.arrivalIndex[me.planIndex]).wp_name, " DEST", "wht"];
me.C6 = ["---- " ~ int(fmgc.flightPlanController.arrivalDist), "TIME DIST", "wht"];
me.R6 = ["--.-", "EFOB", "wht"];
},
update: func() {
me.destInfo();
me.basePage();
},
scrollUp: func() {
if (size(me.planList) > 4) {
me.scroll += 1;
if (me.scroll > size(me.planList) - 4) {
me.scroll = 0;
}
}
},
scrollDn: func() {
if (size(me.planList) > 4) {
me.scroll += 1;
if (me.scroll < 0) {
me.scroll = size(me.planList) - 4
}
}
},
};
var notInDataBase = func(i) {
if (getprop("/MCDU[" ~ i ~ "]/scratchpad-msg") == 1) {
setprop("/MCDU[" ~ i ~ "]/last-scratchpad", "NOT IN DATABASE");
} else {
setprop("/MCDU[" ~ i ~ "]/last-scratchpad", getprop("/MCDU[" ~ i ~ "]/scratchpad"));
}
setprop("/MCDU[" ~ i ~ "]/scratchpad-msg", 1);
setprop("/MCDU[" ~ i ~ "]/scratchpad", "NOT IN DATABASE");
}
var duplicateNamesPage = {
title: nil,
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
L2: [nil, nil, "ack"],
L3: [nil, nil, "ack"],
L4: [nil, nil, "ack"],
L5: [nil, nil, "ack"],
L6: [nil, nil, "ack"],
C1: [nil, nil, "ack"],
C2: [nil, nil, "ack"],
C3: [nil, nil, "ack"],
C4: [nil, nil, "ack"],
C5: [nil, nil, "ack"],
C6: [nil, nil, "ack"],
R1: [nil, nil, "ack"],
R2: [nil, nil, "ack"],
R3: [nil, nil, "ack"],
R4: [nil, nil, "ack"],
R5: [nil, nil, "ack"],
R6: [nil, nil, "ack"],
vector: nil,
type: nil,
computer: nil,
enableScroll: 0,
scroll: 0,
distances: [],
new: func(vector, type, computer) {
var lr = {parents:[duplicateNamesPage]};
lr.id = vector;
lr.type = type; # 0 = other, 1 = navaid
lr.computer = computer;
lr._setupPageWithData();
return lr;
},
del: func() {
return nil;
},
_setupPageWithData: func() {
me.title = "DUPLICATE NAMES";
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
for (var i = 0; i <= size(me.vector); i += 1) {
append(distances, courseAndDistance(me.vector[i]));
}
me.C1[1] = "LAT/LONG";
me.R1[1] = "FREQ";
if (size(me.vector) >= 1) {
me.L1 = [" " ~ me.vector[0 + me.scroll].id, " " ~ me.distances[0 + me.scroll] ~ "NM", "blu"];
me.arrowsMatrix[0][0] = 1;
me.arrowsColour[0][0] = "blu";
me.C1 = [" " ~ decimalToShortString(me.vector[0 + me.scroll].lat, "lat") ~ "/" ~ decimalToShortString(me.vector[0 + me.scroll].lon, "lon"), "LAT/LONG", "grn"];
if (me.vector[0 + me.scroll].frequency != nil) {
me.R1 = [me.vector[0 + me.scroll].frequency, "FREQ", "grn"];
}
}
if (size(me.vector) >= 2) {
me.L2 = [" " ~ me.vector[0 + me.scroll].id, " " ~ me.distances[1 + me.scroll] ~ "NM", "blu"];
me.arrowsMatrix[0][1] = 1;
me.arrowsColour[0][1] = "blu";
me.C2 = [" " ~ decimalToShortString(me.vector[1 + me.scroll].lat, "lat") ~ "/" ~ decimalToShortString(me.vector[1 + me.scroll].lon, "lon"), "LAT/LONG", "grn"];
if (me.vector[1 + me.scroll].frequency != nil) {
me.R2 = [me.vector[1 + me.scroll].frequency, nil, "grn"];
}
}
if (size(me.vector) >= 3) {
me.L3 = [" " ~ me.vector[0 + me.scroll].id, " " ~ me.distances[2 + me.scroll] ~ "NM", "blu"];
me.arrowsMatrix[0][2] = 1;
me.arrowsColour[0][2] = "blu";
me.C3 = [" " ~ decimalToShortString(me.vector[2 + me.scroll].lat, "lat") ~ "/" ~ decimalToShortString(me.vector[2 + me.scroll].lon, "lon"), "LAT/LONG", "grn"];
if (me.vector[2 + me.scroll].frequency != nil) {
me.R3 = [me.vector[2 + me.scroll].frequency, nil, "grn"];
}
}
if (size(me.vector) >= 4) {
me.L4 = [" " ~ me.vector[0 + me.scroll].id, " " ~ me.distances[3 + me.scroll] ~ "NM", "blu"];
me.arrowsMatrix[0][3] = 1;
me.arrowsColour[0][3] = "blu";
me.C4 = [" " ~ decimalToShortString(me.vector[3 + me.scroll].lat, "lat") ~ "/" ~ decimalToShortString(me.vector[3 + me.scroll].lon, "lon"), "LAT/LONG", "grn"];
if (me.vector[3 + me.scroll].frequency != nil) {
me.R4 = [me.vector[3 + me.scroll].frequency, nil, "grn"];
}
}
if (size(me.vector) >= 5) {
me.L5 = [" " ~ me.vector[0 + me.scroll].id, " " ~ me.distances[4 + me.scroll] ~ "NM", "blu"];
me.arrowsMatrix[0][4] = 1;
me.arrowsColour[0][4] = "blu";
me.C5 = [" " ~ decimalToShortString(me.vector[4 + me.scroll].lat, "lat") ~ "/" ~ decimalToShortString(me.vector[4 + me.scroll].lon, "lon"), "LAT/LONG", "grn"];
if (me.vector[4 + me.scroll].frequency != nil) {
me.R5 = [me.vector[4 + me.scroll].frequency, nil, "grn"];
}
}
if (size(me.vector) > 5) { me.enableScroll = 1; }
me.L6 = [" RETURN", nil, "wht"];
},
scrollUp: func() {
if (me.enableScroll) {
me.scroll += 1;
if (me.scroll > size(me.vector) - 5) {
me.scroll = 0;
}
}
},
scrollDn: func() {
if (me.enableScroll) {
me.scroll -= 1;
if (me.scroll < 0) {
me.scroll = size(me.vector) - 5;
}
}
},
};
var decimalToShortString = func(dms, type) {
var degrees = split(".", dms)[0];
if (type == "lat") {
var sign = degrees >= 0 ? "N" : "S";
} else {
var sign = degrees >= 0 ? "E" : "W";
}
return abs(degrees) ~ sign;
}

View file

@ -8,9 +8,6 @@ var TMPY = 5;
var MAIN = 6;
var debug = 0; # Set to 1 to check inner functionality
var insertReturn = nil;
var active_out = [nil, nil, props.globals.getNode("/FMGC/flightplan[2]/active")];
var num_out = [props.globals.getNode("/FMGC/flightplan[0]/num"), props.globals.getNode("/FMGC/flightplan[1]/num"), props.globals.getNode("/FMGC/flightplan[2]/num")];
var TMPYActive = [props.globals.getNode("/FMGC/internal/tmpy-active[0]"), props.globals.getNode("/FMGC/internal/tmpy-active[1]")];
var clearFPLNComputer = func {
FPLNLines[0].clear();
@ -50,14 +47,89 @@ var StaticText = {
notAllowed(me.computer.mcdu);
} else {
var scratchpad = getprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad");
if (TMPYActive[me.computer.mcdu].getBoolValue()) {
if (me.computer.lines == MAIN and scratchpad != "CLR" and scratchpad != "") {
fmgc.flightPlanController.createTemporaryFlightPlan(me.computer.mcdu);
}
if (fmgc.flightPlanController.temporaryFlag[me.computer.mcdu]) {
if (scratchpad == "CLR") {
if (fmgc.flightplan.deleteWP(me.index, me.computer.mcdu, 0) != 0) {
if (fmgc.flightPlanController.deleteWP(me.index, me.computer.mcdu, 0) != 0) {
notAllowed(me.computer.mcdu);
} else {
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad-msg", 0);
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
}
} elsif (size(scratchpad) == 5) {
var fix = findFixesByID(scratchpad);
if (size(fix) >= 1) {
var indexWp = fmgc.flightPlanController.flightplans[me.computer.mcdu].indexOfWP(fix[0]);
if (indexWp == -1) {
var insertReturn = fmgc.flightPlanController.insertFix(scratchpad, me.index, me.computer.mcdu);
fmgc.flightPlanController.flightPlanChanged(me.computer.mcdu);
} else {
var numTimesDelete = indexWp - me.index;
while (numTimesDelete > 0) {
fmgc.flightPlanController.deleteWP(me.index + 1, me.computer.mcdu, 0);
numTimesDelete -= 1;
}
}
if (insertReturn == 2) {
notAllowed(me.computer.mcdu);
} else if (insertReturn == 1) {
notInDataBase(me.computer.mcdu);
} else {
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
}
} else {
notInDataBase(me.computer.mcdu);
}
} else if (size(scratchpad) == 4) {
var arpt = findAirportsByICAO(scratchpad);
if (size(arpt) >= 1) {
var indexWp = fmgc.flightPlanController.flightplans[me.computer.mcdu].indexOfWP(arpt[0]);
if (indexWp == -1) {
var insertReturn = fmgc.flightPlanController.insertArpt(scratchpad, me.index, me.computer.mcdu);
fmgc.flightPlanController.flightPlanChanged(me.computer.mcdu);
} else {
var numTimesDelete = indexWp - me.index;
while (numTimesDelete > 0) {
fmgc.flightPlanController.deleteWP(me.index + 1, me.computer.mcdu, 0);
numTimesDelete -= 1;
}
}
if (insertReturn == 2) {
notAllowed(me.computer.mcdu);
} else if (insertReturn == 1) {
notInDataBase(me.computer.mcdu);
} else {
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
}
} else {
notInDataBase(me.computer.mcdu);
}
} else if (size(scratchpad) == 3 or size(scratchpad) == 2) {
var navaid = findNavaidsByID(scratchpad);
if (size(navaid) >= 1) {
var indexWp = fmgc.flightPlanController.flightplans[me.computer.mcdu].indexOfWP(navaid[0]);
if (indexWp == -1) {
var insertReturn = fmgc.flightPlanController.insertNavaid(scratchpad, me.index, me.computer.mcdu);
fmgc.flightPlanController.flightPlanChanged(me.computer.mcdu);
} else {
var numTimesDelete = indexWp - me.index;
while (numTimesDelete > 0) {
fmgc.flightPlanController.deleteWP(me.index + 1, me.computer.mcdu, 0);
numTimesDelete -= 1;
}
}
if (insertReturn == 2) {
notAllowed(me.computer.mcdu);
} else if (insertReturn == 1) {
notInDataBase(me.computer.mcdu);
} else {
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
}
} else {
notInDataBase(me.computer.mcdu);
}
} elsif (scratchpad == "") {
if (canvas_mcdu.myLatRev[me.computer.mcdu] != nil) {
canvas_mcdu.myLatRev[me.computer.mcdu].del();
@ -70,12 +142,14 @@ var StaticText = {
}
} else {
if (scratchpad == "CLR") {
if (fmgc.flightplan.deleteWP(me.index, 2, 0) != 0) {
if (fmgc.flightPlanController.deleteWP(me.index, 2, 0) != 0) {
notAllowed(me.computer.mcdu);
} else {
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad-msg", 0);
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
}
} elsif (size(scratchpad) != 0) {
me.pushButtonLeft();
} elsif (scratchpad == "") {
if (canvas_mcdu.myLatRev[me.computer.mcdu] != nil) {
canvas_mcdu.myLatRev[me.computer.mcdu].del();
@ -114,7 +188,7 @@ var FPLNText = {
}
},
getColor: func(i) {
if (TMPYActive[i].getBoolValue()) {
if (fmgc.flightPlanController.temporaryFlag[i]) {
if (me.dest) {
return canvas_mcdu.WHITE;
} else {
@ -131,14 +205,14 @@ var FPLNText = {
getSubText: func(i) {
if (me.index == 0) {
return "";
} else if (TMPYActive[i].getBoolValue()) {
if (fmgc.arrivalAirportI[i] == me.index) {
} else if (fmgc.flightPlanController.temporaryFlag[i]) {
if (fmgc.flightPlanController.arrivalIndex[i] == me.index) {
return "DEST";
} else {
return "C" ~ sprintf("%03d", fmgc.wpCoursePrev[me.fp][me.index].getValue()) ~ "g";
}
} else {
if (fmgc.arrivalAirportI[2] == me.index) {
if (fmgc.flightPlanController.arrivalIndex[2] == me.index) {
return "DEST";
} else {
return "C" ~ sprintf("%03d", fmgc.wpCoursePrev[me.fp][me.index].getValue()) ~ "g";
@ -149,10 +223,10 @@ var FPLNText = {
pushButtonLeft: func() {
var scratchpad = getprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad");
if (me.computer.lines == MAIN and scratchpad != "") {
fmgc.flightplan.initTempFP(me.computer.mcdu, 2);
fmgc.flightPlanController.createTemporaryFlightPlan(me.computer.mcdu);
}
if (scratchpad == "CLR") {
if (fmgc.flightplan.deleteWP(me.index, me.computer.mcdu, 0) != 0) {
if (fmgc.flightPlanController.deleteWP(me.index, me.computer.mcdu, 0) != 0) {
notAllowed(me.computer.mcdu);
} else {
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad-msg", 0);
@ -160,14 +234,18 @@ var FPLNText = {
}
} else {
if (size(scratchpad) == 5) {
var indexWp = fmgc.fp[me.computer.mcdu].indexOfWP(findFixesByID(scratchpad));
var fix = findFixesByID(scratchpad);
if (size(fix) >= 1) {
var indexWp = fmgc.flightPlanController.flightplans[me.computer.mcdu].indexOfWP(fix[0]);
if (indexWp == -1) {
var insertReturn = fmgc.flightplan.insertFix(scratchpad, me.index, me.computer.mcdu);
fmgc.fp[me.computer.mcdu].insertWP(createDiscontinuity(), me.index + 1);
fmgc.flightplan.checkWPOutputs(me.computer.mcdu);
var insertReturn = fmgc.flightPlanController.insertFix(scratchpad, me.index, me.computer.mcdu);
fmgc.flightPlanController.flightplans[me.computer.mcdu].insertWP(createDiscontinuity(), me.index + 1);
fmgc.flightPlanController.flightPlanChanged(me.computer.mcdu);
} else {
for (var i = me.index; i == indexWp; i = i + 1) {
fmgc.flightplan.deleteWP(i, me.computer.mcdu, 0);
var numTimesDelete = indexWp - me.index;
while (numTimesDelete > 0) {
fmgc.flightPlanController.deleteWP(me.index + 1, me.computer.mcdu, 0);
numTimesDelete -= 1;
}
}
if (insertReturn == 2) {
@ -177,15 +255,22 @@ var FPLNText = {
} else {
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
}
} else {
notInDataBase(me.computer.mcdu);
}
} else if (size(scratchpad) == 4) {
var indexWp = fmgc.fp[me.computer.mcdu].indexOfWP(findAirportsByICAO(scratchpad));
var arpt = findAirportsByICAO(scratchpad);
if (size(arpt) >= 1) {
var indexWp = fmgc.flightPlanController.flightplans[me.computer.mcdu].indexOfWP(arpt[0]);
if (indexWp == -1) {
var insertReturn = fmgc.flightplan.insertArpt(scratchpad, me.index, me.computer.mcdu);
fmgc.fp[me.computer.mcdu].insertWP(createDiscontinuity(), me.index + 1);
fmgc.flightplan.checkWPOutputs(me.computer.mcdu);
var insertReturn = fmgc.flightPlanController.insertArpt(scratchpad, me.index, me.computer.mcdu);
fmgc.flightPlanController.flightplans[me.computer.mcdu].insertWP(createDiscontinuity(), me.index + 1);
fmgc.flightPlanController.flightPlanChanged(me.computer.mcdu);
} else {
for (var i = me.index; i == indexWp; i = i + 1) {
fmgc.flightplan.deleteWP(i, me.computer.mcdu, 0);
var numTimesDelete = indexWp - me.index;
while (numTimesDelete > 0) {
fmgc.flightPlanController.deleteWP(me.index + 1, me.computer.mcdu, 0);
numTimesDelete -= 1;
}
}
if (insertReturn == 2) {
@ -195,15 +280,22 @@ var FPLNText = {
} else {
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
}
} else {
notInDataBase(me.computer.mcdu);
}
} else if (size(scratchpad) == 3 or size(scratchpad) == 2) {
var indexWp = fmgc.fp[me.computer.mcdu].indexOfWP(findNavaidsByID(scratchpad));
var navaid = findNavaidsByID(scratchpad);
if (size(navaid) >= 1) {
var indexWp = fmgc.flightPlanController.flightplans[me.computer.mcdu].indexOfWP(navaid[0]);
if (indexWp == -1) {
var insertReturn = fmgc.flightplan.insertNavaid(scratchpad, me.index, me.computer.mcdu);
fmgc.fp[me.computer.mcdu].insertWP(createDiscontinuity(), me.index + 1);
fmgc.flightplan.checkWPOutputs(me.computer.mcdu);
var insertReturn = fmgc.flightPlanController.insertNavaid(scratchpad, me.index, me.computer.mcdu);
fmgc.flightPlanController.flightplans[me.computer.mcdu].insertWP(createDiscontinuity(), me.index + 1);
fmgc.flightPlanController.flightPlanChanged(me.computer.mcdu);
} else {
for (var i = me.index; i == indexWp; i = i + 1) {
fmgc.flightplan.deleteWP(i, me.computer.mcdu, 0);
var numTimesDelete = indexWp - me.index;
while (numTimesDelete > 0) {
fmgc.flightPlanController.deleteWP(me.index + 1, me.computer.mcdu, 0);
numTimesDelete -= 1;
}
}
if (insertReturn == 2) {
@ -213,17 +305,20 @@ var FPLNText = {
} else {
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
}
} else {
notInDataBase(me.computer.mcdu);
}
} else if (size(scratchpad) == 1) {
formatError(me.computer.mcdu);
} else if (scratchpad == "") {
if (!TMPYActive[me.computer.mcdu].getBoolValue()) {
if (me.getText() == fmgc.fp[2].departure.id or left(me.getText(), 4) == fmgc.fp[2].departure.id) {
if (!fmgc.flightPlanController.temporaryFlag[me.computer.mcdu]) {
if (me.getText() == fmgc.flightPlanController.flightplans[2].departure.id or left(me.getText(), 4) == fmgc.flightPlanController.flightplans[2].departure.id) {
if (canvas_mcdu.myLatRev[me.computer.mcdu] != nil) {
canvas_mcdu.myLatRev[me.computer.mcdu].del();
}
canvas_mcdu.myLatRev[me.computer.mcdu] = nil;
canvas_mcdu.myLatRev[me.computer.mcdu] = latRev.new(0, me.getText(), me.index, me.computer.mcdu);
} elsif (me.index == fmgc.arrivalAirportI[2]) {
} elsif (me.index == fmgc.flightPlanController.arrivalIndex[2]) {
if (canvas_mcdu.myLatRev[me.computer.mcdu] != nil) {
canvas_mcdu.myLatRev[me.computer.mcdu].del();
}
@ -244,13 +339,13 @@ var FPLNText = {
}
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/page", "LATREV");
} else {
if (me.getText() == fmgc.fp[me.computer.mcdu].departure.id or left(me.getText(), 4) == fmgc.fp[me.computer.mcdu].departure.id) {
if (me.getText() == fmgc.flightPlanController.flightplans[me.computer.mcdu].departure.id or left(me.getText(), 4) == fmgc.flightPlanController.flightplans[me.computer.mcdu].departure.id) {
if (canvas_mcdu.myLatRev[me.computer.mcdu] != nil) {
canvas_mcdu.myLatRev[me.computer.mcdu].del();
}
canvas_mcdu.myLatRev[me.computer.mcdu] = nil;
canvas_mcdu.myLatRev[me.computer.mcdu] = latRev.new(0, me.getText(), me.index, me.computer.mcdu);
} elsif (me.index == fmgc.arrivalAirportI[me.computer.mcdu]) {
} elsif (me.index == fmgc.flightPlanController.arrivalIndex[me.computer.mcdu]) {
if (canvas_mcdu.myLatRev[me.computer.mcdu] != nil) {
canvas_mcdu.myLatRev[me.computer.mcdu].del();
}
@ -320,12 +415,12 @@ var FPLNLineComputer = {
me.planList = [];
if (!fmgc.active_out[2].getBoolValue()) {
if (!fmgc.flightPlanController.active.getBoolValue()) {
me.destIndex = -1;
me.destination = nil;
} else {
fpln = fmgc.fp[fplnID]; # Get the Nasal Flightplan
me.destIndex = fmgc.arrivalAirportI[fplnID];
fpln = fmgc.flightPlanController.flightplans[fplnID]; # Get the Nasal Flightplan
me.destIndex = fmgc.flightPlanController.arrivalIndex[fplnID];
me.destination = FPLNText.new(me, fpln.getWP(me.destIndex), 1, fplnID, me.destIndex);
for (var j = 0; j < fpln.getPlanSize(); j += 1) {
me.dest = 0;
@ -452,16 +547,16 @@ var slewFPLN = func(d, i) { # Scrolling function. d is -1 or 1 for direction, an
var FPLNButton = func(s, key, i) {
var scratchpad = getprop("/MCDU[" ~ i ~ "]/scratchpad");
if (s == "L") {
if (key == 6 and TMPYActive[i].getBoolValue()) {
fmgc.flightplan.eraseTempFP(i, 2);
if (key == 6 and fmgc.flightPlanController.temporaryFlag[i]) {
fmgc.flightPlanController.destroyTemporaryFlightPlan(i, 0);
} else {
if (size(FPLNLines[i].output) >= key) {
FPLNLines[i].output[key - 1].pushButtonLeft();
}
}
} else if (s == "R") {
if (key == 6 and TMPYActive[i].getBoolValue()) {
fmgc.flightplan.executeTempFP(i, 2);
if (key == 6 and fmgc.flightPlanController.temporaryFlag[i]) {
fmgc.flightPlanController.destroyTemporaryFlightPlan(i, 1);
} else {
# if (scratchpad != "") {
# if (size(FPLNLines[i].output) >= key) {
@ -474,174 +569,3 @@ var FPLNButton = func(s, key, i) {
}
}
}
var notInDataBase = func(i) {
if (getprop("/MCDU[" ~ i ~ "]/scratchpad-msg") == 1) { # Messages clear after NOT IN DATABASE
setprop("/MCDU[" ~ i ~ "]/last-scratchpad", "NOT IN DATABASE");
} else {
setprop("/MCDU[" ~ i ~ "]/last-scratchpad", getprop("/MCDU[" ~ i ~ "]/scratchpad"));
}
setprop("/MCDU[" ~ i ~ "]/scratchpad-msg", 1);
setprop("/MCDU[" ~ i ~ "]/scratchpad", "NOT IN DATABASE");
}
# For testing purposes only -- do not touch!
var test = func {
var fp = createFlightplan(getprop("sim/aircraft-dir")~"/plan.gpx");
var desti = int(fp.getPlanSize()*0.5);
FPLNLines[0].replacePlan(fp,6,desti,0);
print("Display:");
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("down");FPLNLines[0].scrollDown();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
print("up");FPLNLines[0].scrollUp();
foreach(line;FPLNLines[0].output) {
printf("line: %s",line.getText());
}
}
#test();

View file

@ -74,7 +74,7 @@ var initInputA = func(key, i) {
setprop("/FMGC/internal/dep-arpt", "");
setprop("/FMGC/internal/arr-arpt", "");
setprop("/FMGC/internal/tofrom-set", 0);
fmgc.flightplan.reset();
fmgc.flightPlanController.reset();
setprop("/MCDU[" ~ i ~ "]/scratchpad-msg", 0);
setprop("/MCDU[" ~ i ~ "]/scratchpad", "");
} else {
@ -88,7 +88,7 @@ var initInputA = func(key, i) {
setprop("/FMGC/internal/arr-arpt", fromto[1]);
setprop("/FMGC/internal/tofrom-set", 1);
setprop("/MCDU[" ~ i ~ "]/scratchpad", "");
fmgc.flightplan.updateARPT(fromto[0], fromto[1], 2);
fmgc.flightPlanController.updateAirports(fromto[0], fromto[1], 2);
} else {
notAllowed(i);
}

View file

@ -34,7 +34,7 @@ var latRev = {
return nil;
},
_checkTmpy: func() {
if (TMPYActive[me.computer].getBoolValue()) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.L6 = [" F-PLN", " TMPY", "yel"];
me.arrowsColour[0][5] = "yel";
me.R2[2] = "yel";
@ -120,8 +120,8 @@ var latRev = {
}
},
makeTmpy: func() {
if (!TMPYActive[me.computer].getBoolValue()) {
fmgc.flightplan.initTempFP(me.computer, 2);
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
fmgc.flightPlanController.createTemporaryFlightPlan(me.computer);
me._checkTmpy();
}
},
@ -133,51 +133,57 @@ var latRev = {
# check if it is part of the active f-pln, if so delete intermediate wpts, if not create discontinuiity after it with original wpts
if (size(me.R3[0]) == 5) {
var fix = findFixesByID(me.R3[0]);
if (fix != nil) {
var indexWp = fmgc.fp[me.computer].indexOfWP(fix[0]);
if (size(fix) >= 1) {
var indexWp = fmgc.flightPlanController.flightplans[me.computer].indexOfWP(fix[0]);
if (indexWp == -1) {
var _insert = fmgc.flightplan.insertFix(me.R3[0], me.index + 1, me.computer);
fmgc.fp[me.computer].insertWP(createDiscontinuity(), me.index + 2);
fmgc.flightplan.checkWPOutputs(me.computer);
var _insert = fmgc.flightPlanController.insertFix(me.R3[0], me.index + 1, me.computer);
fmgc.flightPlanController.flightplans[me.computer].insertWP(createDiscontinuity(), me.index + 2);
fmgc.flightPlanController.flightPlanChanged(me.computer);
} else {
for (var i = me.index + 1; i == indexWp; i = i + 1) {
fmgc.flightplan.deleteWP(i, me.computer, 0);
var numTimesDelete = indexWp - me.index;
while (numTimesDelete > 1) {
fmgc.flightPlanController.deleteWP(me.index + 1, me.computer.mcdu, 0);
numTimesDelete -= 1;
}
var _insert = fmgc.flightplan.insertFix(me.R3[0], me.index + 1, me.computer);
var _insert = 0;
}
} else {
var _insert = 1;
}
} elsif (size(me.R3[0]) == 4) {
var airport = findAirportsByICAO(me.R3[0]);
if (airport != nil) {
var indexWp = fmgc.fp[me.computer].indexOfWP(fix[0]);
if (size(airport) >= 1) {
var indexWp = fmgc.flightPlanController.flightplans[me.computer].indexOfWP(fix[0]);
if (indexWp == -1) {
var _insert = fmgc.flightplan.insertArpt(me.R3[0], me.index + 1, me.computer);
fmgc.fp[me.computer].insertWP(createDiscontinuity(), me.index + 2);
fmgc.flightplan.checkWPOutputs(me.computer);
var _insert = fmgc.flightPlanController.insertArpt(me.R3[0], me.index + 1, me.computer);
fmgc.flightPlanController.flightplans[me.computer].insertWP(createDiscontinuity(), me.index + 2);
fmgc.flightPlanController.flightPlanChanged(me.computer);
} else {
for (var i = me.index + 1; i == indexWp; i = i + 1) {
fmgc.flightplan.deleteWP(i, me.computer, 0);
var numTimesDelete = indexWp - me.index;
while (numTimesDelete > 1) {
fmgc.flightPlanController.deleteWP(me.index + 1, me.computer.mcdu, 0);
numTimesDelete -= 1;
}
var _insert = fmgc.flightplan.insertArpt(me.R3[0], me.index + 1, me.computer);
var _insert = 0;
}
} else {
var _insert = 1;
}
} elsif (size(me.R3[0]) == 3 or size(me.R3[0]) == 2) {
var navaid = findNavaidsByID(me.R3[0]);
if (navaid != nil) {
var indexWp = fmgc.fp[me.computer].indexOfWP(navaid[0]);
if (size(navaid) >= 1) {
var indexWp = fmgc.flightPlanController.flightplans[me.computer].indexOfWP(navaid[0]);
if (indexWp == -1) {
var _insert = fmgc.flightplan.insertNavaid(me.R3[0], me.index + 1, me.computer);
fmgc.fp[me.computer].insertWP(createDiscontinuity(), me.index + 2);
fmgc.flightplan.checkWPOutputs(me.computer);
var _insert = fmgc.flightPlanController.insertNavaid(me.R3[0], me.index + 1, me.computer);
fmgc.flightPlanController.flightplans[me.computer].insertWP(createDiscontinuity(), me.index + 2);
fmgc.flightPlanController.flightPlanChanged(me.computer);
} else {
for (var i = me.index + 1; i == indexWp; i = i + 1) {
fmgc.flightplan.deleteWP(i, me.computer, 0);
var numTimesDelete = indexWp - me.index;
while (numTimesDelete > 1) {
fmgc.flightPlanController.deleteWP(me.index + 1, me.computer.mcdu, 0);
numTimesDelete -= 1;
}
var _insert = fmgc.flightplan.insertNavaid(me.R3[0], me.index + 1, me.computer);
var _insert = 0;
}
} else {
var _insert = 1;
@ -192,7 +198,7 @@ var latRev = {
notAllowed(me.computer);
} else {
setprop("/MCDU[" ~ me.computer ~ "]/scratchpad", "");
fmgc.flightplan.checkWPOutputs(me.computer);
fmgc.flightPlanController.flightPlanChanged(me.computer);
setprop("/MCDU[" ~ me.computer ~ "]/page", "F-PLNA");
}
},

View file

@ -219,7 +219,7 @@ var lskbutton = func(btn, i) {
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "LATREV") {
setprop("/MCDU[" ~ i ~ "]/page", "F-PLNA");
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DEPARTURE") {
if (canvas_mcdu.TMPYActive[i].getBoolValue()) {
if (fmgc.flightPlanController.temporaryFlag[i]) {
setprop("/MCDU[" ~ i ~ "]/page", "F-PLNA");
} else {
setprop("/MCDU[" ~ i ~ "]/page", "LATREV");
@ -258,6 +258,8 @@ var rskbutton = func(btn, i) {
printInput("R2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("R2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DEPARTURE") {
canvas_mcdu.myDeparture[i].depPushbuttonRight(2);
} else {
notAllowed(i);
}
@ -344,46 +346,46 @@ var arrowbutton = func(btn, i) {
setprop("/MCDU[" ~ i ~ "]/page", "DATA2");
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DATA2") {
setprop("/MCDU[" ~ i ~ "]/page", "DATA");
}
if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
if (getprop("/engines/engine[0]/state") != 3 and getprop("/engines/engine[1]/state") != 3) {
setprop("/MCDU[" ~ i ~ "]/page", "INITB");
}
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "INITB") {
setprop("/MCDU[" ~ i ~ "]/page", "INITA");
}
if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
setprop("/MCDU[" ~ i ~ "]/page", "PRINTFUNC2");
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
setprop("/MCDU[" ~ i ~ "]/page", "PRINTFUNC");
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DEPARTURE") {
canvas_mcdu.myDeparture[i].scrollLeft();
}
} else if (btn == "right") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "DATA") {
setprop("/MCDU[" ~ i ~ "]/page", "DATA2");
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DATA2") {
setprop("/MCDU[" ~ i ~ "]/page", "DATA");
}
if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
if (getprop("/engines/engine[0]/state") != 3 and getprop("/engines/engine[1]/state") != 3) {
setprop("/MCDU[" ~ i ~ "]/page", "INITB");
}
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "INITB") {
setprop("/MCDU[" ~ i ~ "]/page", "INITA");
}
if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
setprop("/MCDU[" ~ i ~ "]/page", "PRINTFUNC2");
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
setprop("/MCDU[" ~ i ~ "]/page", "PRINTFUNC");
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DEPARTURE") {
canvas_mcdu.myDeparture[i].scrollRight();
}
} else if (btn == "up") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNA" or getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNB") {
slewFPLN(1, i);
canvas_mcdu.myFpln[i].scrollUp();
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DEPARTURE") {
canvas_mcdu.myDeparture[i].scrollUp();
}
} else if (btn == "down") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNA" or getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNB") {
slewFPLN(-1, i);
canvas_mcdu.myFpln[i].scrollDn();
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DEPARTURE") {
canvas_mcdu.myDeparture[i].scrollDn();
}
@ -414,7 +416,10 @@ var pagebutton = func(btn, i) {
setprop("/MCDU[" ~ i ~ "]/scratchpad", "SELECT DESIRED SYSTEM");
setprop("/MCDU[" ~ i ~ "]/page", "MCDU");
} else if (btn == "f-pln") {
if (active_out[2].getBoolValue()) {
if (fmgc.flightPlanController.active.getBoolValue()) {
if (canvas_mcdu.myFpln[i] == nil) {
canvas_mcdu.myFpln[i] = fplnPage.new(2, i);
}
setprop("/MCDU[" ~ i ~ "]/page", "F-PLNA");
} else {
setprop("/MCDU[" ~ i ~ "]/scratchpad-msg", 1);