FMGC: Ability to insert Waypoints into F-PLN, but it has 2 bugs that need fixing
This commit is contained in:
parent
dbd72d9189
commit
1742f5b0c6
3 changed files with 177 additions and 64 deletions
Nasal
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Reference in a new issue