New FPLN
This commit is contained in:
parent
ed5b92cef4
commit
848a6a7b7f
14 changed files with 1888 additions and 1141 deletions
|
@ -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>
|
||||
|
|
|
@ -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();
|
||||
} else {
|
||||
me["FPLN_L1"].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();
|
||||
}
|
||||
if (myFpln[i].L1[0] == nil) {
|
||||
me["Simple_L1"].hide();
|
||||
me["Simple_L1S"].hide();
|
||||
} else {
|
||||
me["FPLN_L1"].hide();
|
||||
me["FPLN_L1S"].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();
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
} else {
|
||||
me["FPLN_L2"].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();
|
||||
}
|
||||
if (myFpln[i].L2[0] == nil) {
|
||||
me["Simple_L2"].hide();
|
||||
me["Simple_L2S"].hide();
|
||||
} else {
|
||||
me["FPLN_L2"].hide();
|
||||
me["FPLN_L2S"].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();
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
} else {
|
||||
me["FPLN_L3"].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();
|
||||
}
|
||||
if (myFpln[i].L3[0] == nil) {
|
||||
me["Simple_L3"].hide();
|
||||
me["Simple_L3S"].hide();
|
||||
} else {
|
||||
me["FPLN_L3"].hide();
|
||||
me["FPLN_L3S"].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();
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
} else {
|
||||
me["FPLN_L4"].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();
|
||||
}
|
||||
if (myFpln[i].L4[0] == nil) {
|
||||
me["Simple_L4"].hide();
|
||||
me["Simple_L4S"].hide();
|
||||
} else {
|
||||
me["FPLN_L4"].hide();
|
||||
me["FPLN_L4S"].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();
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
} else {
|
||||
me["FPLN_L5"].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();
|
||||
}
|
||||
if (myFpln[i].L5[0] == nil) {
|
||||
me["Simple_L5"].hide();
|
||||
me["Simple_L5S"].hide();
|
||||
} else {
|
||||
me["FPLN_L5"].hide();
|
||||
me["FPLN_L5S"].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();
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
} else {
|
||||
me["FPLN_L6"].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();
|
||||
}
|
||||
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["FPLN_L6S"].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();
|
||||
}
|
||||
}
|
||||
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["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 |
|
@ -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"},
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
me.checkWPOutputs(n);
|
||||
},
|
||||
advanceDelete: func(n) {
|
||||
if (num_out[n].getValue() > 2) {
|
||||
if (TMPYActive[0].getBoolValue() and wpID[0][0] == wpID[n][0]) {
|
||||
me.deleteWP(0, 0);
|
||||
}
|
||||
if (TMPYActive[1].getBoolValue() and wpID[1][0] == wpID[n][0]) {
|
||||
me.deleteWP(0, 1);
|
||||
}
|
||||
me.deleteWP(0, n, 1);
|
||||
}
|
||||
},
|
||||
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);
|
||||
|
||||
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);
|
||||
},
|
||||
# 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;
|
||||
|
||||
autoSequencing: func() {
|
||||
if (me.num[2] > 2) {
|
||||
if (me.temporaryFlag[0] == 1 and wpID[0][0] == wpID[2][0]) {
|
||||
me.deleteWP(0, 0);
|
||||
}
|
||||
|
||||
if (me.temporaryFlag[1] == 1 and wpID[1][0] == wpID[2][0]) {
|
||||
me.deleteWP(0, 1);
|
||||
}
|
||||
|
||||
me.deleteWP(0, 2);
|
||||
}
|
||||
},
|
||||
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(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");
|
||||
return 0;
|
||||
} 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");
|
||||
return 0;
|
||||
|
||||
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 {
|
||||
return 2;
|
||||
me.flightplans[2].deleteWP(index);
|
||||
}
|
||||
me.flightPlanChanged(n);
|
||||
}
|
||||
},
|
||||
|
||||
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 {
|
||||
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 {
|
||||
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();
|
||||
},
|
||||
updateMCDUDriver: func(n) {
|
||||
for (var i = 0; i < 2; i += 1) { # Update the 2 MCDUs
|
||||
if (TMPYActive[i].getBoolValue()) {
|
||||
mcdu.FPLNLines[i].replacePlan(i, mcdu.TMPY, mcdu.FPLNLines[i].index);
|
||||
|
||||
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 {
|
||||
mcdu.FPLNLines[i].replacePlan(2, mcdu.MAIN, mcdu.FPLNLines[i].index);
|
||||
if (i == 2) {
|
||||
if (me.active.getBoolValue()) {
|
||||
me.active.setValue(0);
|
||||
}
|
||||
me.currentToWptID = "";
|
||||
}
|
||||
me.num[i] = 0;
|
||||
}
|
||||
}
|
||||
},
|
||||
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());
|
||||
|
||||
updateMCDUDriver: func(n) {
|
||||
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 {
|
||||
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);
|
||||
}
|
||||
mcdu.FPLNLines[i].replacePlan(2, mcdu.MAIN, mcdu.FPLNLines[i].index);
|
||||
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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
},
|
||||
updateRunways: func() {
|
||||
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.arrowsMatrix[0][1] = 1;
|
||||
me.arrowsColour[0][1] = "blu";
|
||||
}
|
||||
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.arrowsMatrix[0][2] = 1;
|
||||
me.arrowsColour[0][2] = "blu";
|
||||
}
|
||||
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.arrowsMatrix[0][3] = 1;
|
||||
me.arrowsColour[0][3] = "blu";
|
||||
}
|
||||
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.arrowsMatrix[0][4] = 1;
|
||||
me.arrowsColour[0][4] = "blu";
|
||||
}
|
||||
|
||||
if (size(me.runways) > 4) {
|
||||
me.enableScroll = 1;
|
||||
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));
|
||||
|
||||
if (size(me.runways) >= 1) {
|
||||
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.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.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.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.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();
|
||||
}
|
||||
me.updateRunways();
|
||||
}
|
||||
},
|
||||
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();
|
||||
}
|
||||
me.updateRunways();
|
||||
}
|
||||
},
|
||||
scrollLeft: func() {
|
||||
me.activePage = !me.activePage;
|
||||
me.updatePage();
|
||||
},
|
||||
scrollRight: func() {
|
||||
me.activePage = !me.activePage;
|
||||
me.updatePage();
|
||||
},
|
||||
depPushbuttonLeft: func(index) {
|
||||
if (size(me.runways) >= (index - 1)) {
|
||||
me.selectedRunway = me.depAirport[0].runway(me.runways[index - 2 + me.scroll]);
|
||||
me.makeTmpy();
|
||||
fmgc.fp[me.computer].departure_runway = me.selectedRunway;
|
||||
me.updateActiveRunway();
|
||||
fmgc.flightplan.checkWPOutputs(me.computer);
|
||||
if (me.activePage == 0) {
|
||||
if (size(me.runways) >= (index - 1)) {
|
||||
me.selectedRunway = me.depAirport[0].runway(me.runways[index - 2 + me.scrollRwy]);
|
||||
me.makeTmpy();
|
||||
fmgc.flightPlanController.flightplans[me.computer].departure_runway = me.selectedRunway;
|
||||
me.updateActiveRunway();
|
||||
me.updateRunways();
|
||||
fmgc.flightPlanController.flightPlanChanged(me.computer);
|
||||
me.scrollRight();
|
||||
} else {
|
||||
notAllowed(me.computer);
|
||||
}
|
||||
} else {
|
||||
notAllowed(me.computer);
|
||||
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
314
Nasal/MCDU/F-PLN-rework.nas
Normal 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;
|
||||
}
|
|
@ -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,70 +234,91 @@ var FPLNText = {
|
|||
}
|
||||
} else {
|
||||
if (size(scratchpad) == 5) {
|
||||
var indexWp = fmgc.fp[me.computer.mcdu].indexOfWP(findFixesByID(scratchpad));
|
||||
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);
|
||||
} else {
|
||||
for (var i = me.index; i == indexWp; i = i + 1) {
|
||||
fmgc.flightplan.deleteWP(i, me.computer.mcdu, 0);
|
||||
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.flightplans[me.computer.mcdu].insertWP(createDiscontinuity(), me.index + 1);
|
||||
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", "");
|
||||
}
|
||||
}
|
||||
if (insertReturn == 2) {
|
||||
notAllowed(me.computer.mcdu);
|
||||
} else if (insertReturn == 1) {
|
||||
notInDataBase(me.computer.mcdu);
|
||||
} else {
|
||||
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
|
||||
notInDataBase(me.computer.mcdu);
|
||||
}
|
||||
} else if (size(scratchpad) == 4) {
|
||||
var indexWp = fmgc.fp[me.computer.mcdu].indexOfWP(findAirportsByICAO(scratchpad));
|
||||
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);
|
||||
} else {
|
||||
for (var i = me.index; i == indexWp; i = i + 1) {
|
||||
fmgc.flightplan.deleteWP(i, me.computer.mcdu, 0);
|
||||
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.flightplans[me.computer.mcdu].insertWP(createDiscontinuity(), me.index + 1);
|
||||
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", "");
|
||||
}
|
||||
}
|
||||
if (insertReturn == 2) {
|
||||
notAllowed(me.computer.mcdu);
|
||||
} else if (insertReturn == 1) {
|
||||
notInDataBase(me.computer.mcdu);
|
||||
} else {
|
||||
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
|
||||
notInDataBase(me.computer.mcdu);
|
||||
}
|
||||
} else if (size(scratchpad) == 3 or size(scratchpad) == 2) {
|
||||
var indexWp = fmgc.fp[me.computer.mcdu].indexOfWP(findNavaidsByID(scratchpad));
|
||||
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);
|
||||
} else {
|
||||
for (var i = me.index; i == indexWp; i = i + 1) {
|
||||
fmgc.flightplan.deleteWP(i, me.computer.mcdu, 0);
|
||||
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.flightplans[me.computer.mcdu].insertWP(createDiscontinuity(), me.index + 1);
|
||||
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", "");
|
||||
}
|
||||
}
|
||||
if (insertReturn == 2) {
|
||||
notAllowed(me.computer.mcdu);
|
||||
} else if (insertReturn == 1) {
|
||||
notInDataBase(me.computer.mcdu);
|
||||
} else {
|
||||
setprop("/MCDU[" ~ me.computer.mcdu ~ "]/scratchpad", "");
|
||||
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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
},
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue