FMGC: Ability to insert Waypoints into F-PLN, but it has 2 bugs that need fixing

This commit is contained in:
Joshua Davidson 2019-02-17 14:43:50 -07:00
parent dbd72d9189
commit 1742f5b0c6
3 changed files with 177 additions and 64 deletions

View file

@ -78,6 +78,12 @@ var updateFPLN = func(i) {
num = num_out[fp].getValue();
if (active_out[1].getBoolValue()) {
# if (offset[i] + offsetThreshold > num + 2) {
# if (num + 2 - offsetThreshold >= 0) {
# offset[i] = num - offsetThreshold;
# }
# }
# Line 1:
if (offset[i] < num) {
left1[i].setValue(fmgc.wpID[fp][offset[i]].getValue());
@ -222,10 +228,6 @@ var updateFPLN = func(i) {
left7[i] = "";
}
# if (offset[i] + offsetThreshold > num) {
# offset[i] = num - offsetThreshold;
# }
if (offset[i] > 0) {
showFromInd[i].setBoolValue(0);
} else {
@ -248,3 +250,72 @@ var updateFPLN = func(i) {
left6s[i].setValue("");
}
}
# Button and Inputs
var FPLNButton = func(s, key, i) {
if (s == "L") {
var input = offset[i] + key - 1; # Where to insert waypoint?
var scratchpad = getprop("/MCDU[" ~ i ~ "]/scratchpad");
if (key == 6 and TMPYActive_out.getBoolValue()) {
TMPYActive.setBoolValue(0);
} else {
if (scratchpad == "CLR") {
if (!TMPYActive.getBoolValue()) {
fmgc.flightplan.initTempFP(1);
}
if (fmgc.flightplan.deleteWP(input, 0) != 0) {
notAllowed(i);
} else {
setprop("/MCDU[" ~ i ~ "]/scratchpad-msg", 0);
setprop("/MCDU[" ~ i ~ "]/scratchpad", "");
}
} else {
if (size(scratchpad) == 5) {
if (!TMPYActive.getBoolValue()) {
fmgc.flightplan.initTempFP(1);
}
if (fmgc.flightplan.insertFix(scratchpad, input, 0) != 0) {
notInDataBase(i);
} else {
setprop("/MCDU[" ~ i ~ "]/scratchpad", "");
}
} else if (size(scratchpad) == 4) {
if (!TMPYActive.getBoolValue()) {
fmgc.flightplan.initTempFP(1);
}
if (fmgc.flightplan.insertArpt(scratchpad, input, 0) != 0) {
notInDataBase(i);
} else {
setprop("/MCDU[" ~ i ~ "]/scratchpad", "");
}
} else if (size(scratchpad) == 3) {
if (!TMPYActive.getBoolValue()) {
fmgc.flightplan.initTempFP(1);
}
if (fmgc.flightplan.insertNavaid(scratchpad, input, 0) != 0) {
notInDataBase(i);
} else {
setprop("/MCDU[" ~ i ~ "]/scratchpad", "");
}
} else {
notAllowed(i);
}
}
}
} else if (s == "R") {
if (key == 6 and TMPYActive_out.getBoolValue()) {
fmgc.flightplan.executeTempFP(1);
} else {
notAllowed(i);
}
}
}
var notInDataBase = func(i) {
if (getprop("/MCDU[" ~ i ~ "]/scratchpad") != "NOT IN DATABASE") {
setprop("/MCDU[" ~ i ~ "]/last-scratchpad", getprop("/MCDU[" ~ i ~ "]/scratchpad"));
}
setprop("/MCDU[" ~ i ~ "]/scratchpad-msg", 1);
setprop("/MCDU[" ~ i ~ "]/scratchpad", "NOT IN DATABASE");
}

View file

@ -96,53 +96,59 @@ var lskbutton = func(btn, i) {
setprop("/MCDU[" ~ i ~ "]/scratchpad-msg", 0);
}
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "TO") {
perfTOInput("L1",i);
perfTOInput("L1", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "RADNAV") {
radnavInput("L1",i);
radnavInput("L1", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DATA") {
dataInput("L1",i);
dataInput("L1", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
printInput("L1",i);
printInput("L1", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("L1",i);
printInput2("L1", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNA" or getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNB") {
FPLNButton("L", 1, i);
} else {
notAllowed(i);
}
} else if (btn == "2") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
PerfInput("L2",i);
PerfInput("L2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "TO") {
perfTOInput("L2",i);
perfTOInput("L2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "RADNAV") {
radnavInput("L2",i);
radnavInput("L2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "CLB") {
initInputA("L5",i); # Does the same thing as on the INIT page
initInputA("L5", i); # Does the same thing as on the INIT page
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "CRZ") {
initInputA("L5",i);
initInputA("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DES") {
initInputA("L5",i);
initInputA("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DATA") {
dataInput("L2",i);
dataInput("L2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
printInput("L2",i);
printInput("L2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("L2",i);
printInput2("L2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNA" or getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNB") {
FPLNButton("L", 2, i);
} else {
notAllowed(i);
}
} else if (btn == "3") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
initInputA("L3",i);
initInputA("L3", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "TO") {
perfTOInput("L3",i);
perfTOInput("L3", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "STATUS") {
statusInput("L3",i);
statusInput("L3", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "RADNAV") {
radnavInput("L3",i);
radnavInput("L3", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
printInput("L3",i);
printInput("L3", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("L3",i);
printInput2("L3", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNA" or getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNB") {
FPLNButton("L", 3, i);
} else {
notAllowed(i);
}
@ -150,45 +156,51 @@ var lskbutton = func(btn, i) {
if (getprop("/MCDU[" ~ i ~ "]/page") == "DATA") {
setprop("/MCDU[" ~ i ~ "]/page", "STATUS");
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "TO") {
perfTOInput("L4",i);
perfTOInput("L4", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "RADNAV") {
radnavInput("L4",i);
radnavInput("L4", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("L4",i);
printInput2("L4", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNA" or getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNB") {
FPLNButton("L", 4, i);
} else {
notAllowed(i);
}
} else if (btn == "5") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
initInputA("L5",i);
initInputA("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "TO") {
perfTOInput("L5",i);
perfTOInput("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "CLB") {
perfCLBInput("L5",i);
perfCLBInput("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "CRZ") {
perfCRZInput("L5",i);
perfCRZInput("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DES") {
perfDESInput("L5",i);
perfDESInput("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "RADNAV") {
radnavInput("L5",i);
radnavInput("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
printInput("L5",i);
printInput("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("L5",i);
printInput2("L5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNA" or getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNB") {
FPLNButton("L", 5, i);
} else {
notAllowed(i);
}
} else if (btn == "6") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
initInputA("L6",i);
initInputA("L6", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "CLB") {
perfCLBInput("L6",i);
perfCLBInput("L6", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "CRZ") {
perfCRZInput("L6",i);
perfCRZInput("L6", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DES") {
perfDESInput("L6",i);
perfDESInput("L6", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("L6",i);
printInput2("L6", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNA" or getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNB") {
FPLNButton("L", 6, i);
} else {
notAllowed(i);
}
@ -202,59 +214,59 @@ var lskbutton_b = func(btn, i) {
var rskbutton = func(btn, i) {
if (btn == "1") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
initInputA("R1",i);
initInputA("R1", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "INITB") {
initInputB("R1",i);
initInputB("R1", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "RADNAV") {
radnavInput("R1",i);
radnavInput("R1", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
printInput("R1",i);
printInput("R1", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("R1",i);
printInput2("R1", i);
} else {
notAllowed(i);
}
} else if (btn == "2") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "INITB") {
initInputB("R2",i);
initInputB("R2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "RADNAV") {
radnavInput("R2",i);
radnavInput("R2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
printInput("R2",i);
printInput("R2", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("R2",i);
printInput2("R2", i);
} else {
notAllowed(i);
}
} else if (btn == "3") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
initInputA("R3",i);
initInputA("R3", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "TO") {
perfTOInput("R3",i);
perfTOInput("R3", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") {
printInput("R3",i);
printInput("R3", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("R3",i);
printInput2("R3", i);
} else {
notAllowed(i);
}
} else if (btn == "4") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "TO") {
perfTOInput("R4",i);
perfTOInput("R4", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "RADNAV") {
radnavInput("R4",i);
radnavInput("R4", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2") {
printInput2("R4",i);
printInput2("R4", i);
} else {
notAllowed(i);
}
} else if (btn == "5") {
if (getprop("/MCDU[" ~ i ~ "]/page") == "TO") {
perfTOInput("R5",i);
perfTOInput("R5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "RADNAV") {
radnavInput("R5",i);
radnavInput("R5", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "DATA") {
dataInput("R5",i);
dataInput("R5", i);
} else {
notAllowed(i);
}
@ -268,11 +280,11 @@ var rskbutton = func(btn, i) {
notAllowed(i);
}
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "TO") {
perfTOInput("R6",i);
perfTOInput("R6", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "CLB") {
perfCLBInput("R6",i);
perfCLBInput("R6", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "CRZ") {
perfCRZInput("R6",i);
perfCRZInput("R6", i);
} else if ((getprop("/MCDU[" ~ i ~ "]/page") == "DATA") or (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC") or (getprop("/MCDU[" ~ i ~ "]/page") == "PRINTFUNC2")) {
if (getprop("/MCDU[" ~ i ~ "]/scratchpad") != "AOC DISABLED") {
setprop("/MCDU[" ~ i ~ "]/last-scratchpad", getprop("/MCDU[" ~ i ~ "]/scratchpad"));
@ -280,7 +292,9 @@ var rskbutton = func(btn, i) {
setprop("/MCDU[" ~ i ~ "]/scratchpad-msg", 1);
setprop("/MCDU[" ~ i ~ "]/scratchpad", "AOC DISABLED");
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "INITA") {
initInputA("R6",i);
initInputA("R6", i);
} else if (getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNA" or getprop("/MCDU[" ~ i ~ "]/page") == "F-PLNB") {
FPLNButton("R", 6, i);
} else {
notAllowed(i);
}

View file

@ -110,6 +110,19 @@ var flightplan = {
if (pos != nil and size(pos) > 0) {
fp[n].insertWP(createWPFrom(pos[0]), i);
me.checkWPOutputs(n);
return 0;
} else {
return 1;
}
},
insertArpt: func(wp, i, n) {
var pos = findAirportsByICAO(wp);
if (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) {
@ -117,12 +130,27 @@ var flightplan = {
if (pos != nil and size(pos) > 0) {
fp[n].insertWP(createWPFrom(pos[0]), i);
me.checkWPOutputs(n);
return 0;
} else {
return 1;
}
},
insertPPOS: func(n) {
fp[n].insertWP(createWP(geo.aircraft_position(), "PPOS"), 0);
me.checkWPOutputs(n);
},
insertTP: func(n) {
fp[n].insertWP(createWP(geo.aircraft_position(), "T/P"), 0);
me.checkWPOutputs(n);
},
deleteWP: func(i, n) {
if (fp[n].getPlanSize() > 2 and wpID[i].getValue() != FMGCdep.getValue() and wpID[i].getValue() != FMGCarr.getValue()) { # Not allowed to remove departure or arrival airport
var wp = wpID[n][i].getValue();
if (fp[n].getPlanSize() > 2 and wp != FMGCdep.getValue() and wp != FMGCarr.getValue() and wp != "T/P" and wp != "PPOS") {
fp[n].deleteWP(i);
canvas_nd.A3XXRouteDriver.triggerSignal("fp-removed");
return 0;
} else {
return 1;
}
},
checkWPOutputs: func(n) {